OUTPUT #744 | 4890 karakter | 108 satır
355- for marker in ("write_file(", "write_text(", ".write(", "json.dump(", "open(")
356- ):
357- return _block(
358: "Shorts production guard: PROOF_FREEZE — do not mutate manifest.json through "
359- "execute_code after an accepted proof. Use patch/write_file instead so the runtime "
360- "can compare the prospective proof fingerprint and allow proof-irrelevant edits "
361- "while blocking changes to accepted creative proof/casting."
--
414- prospective = json.loads(prospective_text)
415- if _runtime_proof_fingerprint(prospective) != current_fp:
416- return _block(
417: "Shorts production guard: PROOF_FREEZE — accepted proof is locked. "
418- "Do not change creative_intent, proof candidates, or selected footage/casting "
419- "after Vision PASS. Continue with TTS/render/final QA using the accepted plan. "
420- "A genuine proof failure must be handled before acceptance, not by reopening "
--
547- return bool(
548- isinstance(verdict, dict)
549- and verdict.get("verdict") == "PASS"
550: and verdict.get("verifier") == "vision_analyze"
551- and verdict.get("primary_visual_proof") is True
552- and verdict.get("hook_visual_goal") is True
553- and verdict.get("proof_visible_and_unmistakable") is True
--
629- if tool_name in {"browser_vision", "computer_use"} and not alternate_method:
630- return _block(
631- "Shorts production guard: this QA fallback is disabled during normal production. "
632: "Use vision_analyze as the primary visual QA path; if Vision is unavailable after "
633- "the permitted retry, continue with controlled QA_UNAVAILABLE rather than inventing a fallback."
634- )
635-
636: if tool_name == "vision_analyze":
637- image_url = str(args.get("image_url") or "")
638- question = str(args.get("question") or "").strip()
639- raw = image_url[7:] if image_url.startswith("file://") else image_url
--
716- return _block(
717- "Shorts production guard: proof state is runtime-owned. "
718- "Do not write or patch proof receipts/pending attestations manually; "
719: "only a real vision_analyze PASS may issue the receipt."
720- )
721- if any(path.startswith(prefix) for prefix in _PROTECTED_PREFIXES):
722- return _block(
--
775- return text
776-
777-
778:def _update_repair_state_from_vision(
779- image_path: Path,
780- question: str,
781- result: Any,
--
814- else:
815- accepted = (
816- verdict.get("verdict") == "PASS"
817: and verdict.get("verifier") == "vision_analyze"
818- and verdict.get("post_repair_semantic_verified") is True
819- and _normalized_proof_token(verdict.get("repair_token")) == token
820- )
--
823- state["verification_pending"] = False
824- state["claim_fixed_allowed"] = accepted
825- state["verification"] = {
826: "verifier": "vision_analyze",
827- "verdict": verdict.get("verdict"),
828- "artifact_sha256": state.get("artifact_sha256"),
829- "contact_sheet_sha256": state.get("contact_sheet_sha256"),
--
852- status: str = "",
853- **_: Any,
854-) -> None:
855: if tool_name != "vision_analyze":
856- return
857-
858- active, _, _ = _production_context(session_id)
--
892- return
893-
894- contract_question = _expanded_vision_question_for_receipt(image_path, question)
895: _update_repair_state_from_vision(
896- image_path, contract_question, result, session_id, turn_id, tool_call_id
897- )
898-
--
956- obj = {
957- "pass": True,
958- "receipt_source": "shorts-production-guard/post_tool_call",
959: "verifier": "vision_analyze",
960- "fingerprint": pending["fingerprint"],
961- "contact_sheet": str(image_path),
962- "contact_sheet_sha256": pending["contact_sheet_sha256"],
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md
187-### ASSET-001 — Pre-casting visual inspection diagnostic
188-
189-Bu tanı koşusunda asset/casting kararını yalnız metadata, dosya adı veya arama açıklamasından verme.
190:Gerekli olduğunda aday gerçek footage/source/range/assetleri `vision_analyze` ile gerçekten gör.
191-
192-Değerlendir:
193-- gerçek hareket ve görüntü kalitesi;
--
231-
232-### Faz 3 — Tek görsel QA geçidi
233-
234:Deterministic pipeline PASS verdikten sonra yalnız final contact sheet'i `vision_analyze` ile değerlendir.
235-
236-Kontrol et:
237-