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-