OUTPUT #632 | 45799 karakter | 327 satır
========== YENİ KOMUT | 16.09.2026 15:32:15 ==========


========== YENİ KOMUT | 16.09.2026 15:32:15 ==========

/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-238-            "mode": gate.get("mode"),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-239-            "candidates": normalized,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-240-        },
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-241-        "selected_casting": selected_casting,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-242-    }
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924:243:    return hashlib.sha256(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-244-        json.dumps(payload, sort_keys=True, ensure_ascii=False).encode("utf-8")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-245-    ).hexdigest()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-246-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-247-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-248-def _proof_freeze_block(tool_name: str, args: dict) -> Optional[dict]:
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-380-        ):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-381-            return True
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-382-    return False
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-383-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-384-def _sha_file(path: Path) -> str:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924:385:    h = hashlib.sha256()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-386-    with path.open("rb") as f:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-387-        for chunk in iter(lambda: f.read(1024 * 1024), b""):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-388-            h.update(chunk)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-389-    return h.hexdigest()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-390-
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-546-                "question": normalized_question,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-547-            },
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-548-            ensure_ascii=False,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-549-            sort_keys=True,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-550-        )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924:551:        signature = hashlib.sha256(sig_raw.encode("utf-8")).hexdigest()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-552-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-553-        with _LOCK:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-554-            if signature in _VISION_SEEN:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-555-                return _block(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-556-                    "Shorts production guard: this exact visual evidence has already been "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924:557:                    "asked the same question. Reuse the existing result. If evidence was repaired "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-558-                    "or the verification question genuinely needs correction, change the evidence "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-559-                    "or question rather than repeating the same call."
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-560-                )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-561-        return None
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-562-
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-658-        return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-659-    token = str(state.get("repair_token") or "")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-660-    if not token or f"HERMES_REPAIR_VERIFY::{token}" not in question:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-661-        return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-662-    try:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924:663:        if _sha_file(image_path) != state.get("contact_sheet_sha256"):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-664-            return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-665-        artifact = Path(str(state.get("artifact") or "")).expanduser().resolve()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924:666:        if not artifact.exists() or _sha_file(artifact) != state.get("artifact_sha256"):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-667-            return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-668-    except Exception:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-669-        return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-670-    outer = _json_object(result)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-671-    verdict = _json_object(outer.get("analysis")) if outer and outer.get("success") is True else None
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-685-        state["verification_pending"] = False
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-686-        state["claim_fixed_allowed"] = accepted
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-687-        state["verification"] = {
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-688-            "verifier": "vision_analyze",
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-689-            "verdict": verdict.get("verdict"),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924:690:            "artifact_sha256": state.get("artifact_sha256"),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924:691:            "contact_sheet_sha256": state.get("contact_sheet_sha256"),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-692-            "session_id": session_id,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-693-            "turn_id": turn_id,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-694-            "tool_call_id": tool_call_id,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-695-            "accepted_at": time.time(),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-696-            "raw": verdict,
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-725-    question = str(args.get("question") or "")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-726-    if not image_url:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-727-        return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-728-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-729-    # A provider failure is not reviewed evidence. Mark only completed Vision
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924:730:    # calls as seen so the provider's explicit retry can reuse the exact sheet
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-731-    # and question instead of forcing a meaningless evidence mutation.
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-732-    raw_identity = image_url[7:] if image_url.startswith("file://") else image_url
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-733-    try:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-734-        image_identity = _sha_file(Path(raw_identity).expanduser().resolve())
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-735-    except Exception:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-736-        image_identity = str(Path(raw_identity).expanduser())
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-737-    normalized_question = re.sub(r"\s+", " ", question).strip()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924:738:    signature = hashlib.sha256(json.dumps(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-739-        {"session": session_id, "image": image_identity, "question": normalized_question},
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-740-        ensure_ascii=False, sort_keys=True,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-741-    ).encode("utf-8")).hexdigest()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-742-    outer = _json_object(result)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-743-    if status and status != "ok":
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-776-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-777-    try:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-778-        expected_sheet = Path(str(pending["contact_sheet"])).resolve()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-779-        if expected_sheet != image_path:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-780-            return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924:781:        if _sha_file(image_path) != pending.get("contact_sheet_sha256"):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-782-            return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-783-    except Exception:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-784-        return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-785-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-786-    outer = _json_object(result)
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-816-            "pass": True,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-817-            "receipt_source": "shorts-production-guard/post_tool_call",
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-818-            "verifier": "vision_analyze",
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-819-            "fingerprint": pending["fingerprint"],
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-820-            "contact_sheet": str(image_path),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924:821:            "contact_sheet_sha256": pending["contact_sheet_sha256"],
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-822-            "verdict": verdict,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-823-            "vision_route": outer.get("vision_route") if isinstance(outer.get("vision_route"), dict) else None,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-824-            "session_id": session_id,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-825-            "turn_id": turn_id,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-exec-proof-freeze-20260909-145924-826-            "tool_call_id": tool_call_id,
--
/home/hermes/.hermes/skills/media/shorts-core/references/production-profiles.md-140-
/home/hermes/.hermes/skills/media/shorts-core/references/production-profiles.md-141-2. Programmatic graphics/annotations must be materialized only into the affected shot before canonical assembly and declared with `materialized: true` plus pixel `bbox`. Caption-zone intersection is a deterministic FAIL. Unmaterialized graphics must not trigger a hand-built full-master render.
/home/hermes/.hermes/skills/media/shorts-core/references/production-profiles.md-142-
/home/hermes/.hermes/skills/media/shorts-core/references/production-profiles.md-143-3. For first assembly and local visual repair, use the segment-cached canonical path:
/home/hermes/.hermes/skills/media/shorts-core/references/production-profiles.md-144-   `/home/hermes/.hermes/skills/media/shorts-core/scripts/production_guardrails.py segment-build --manifest <manifest.json> --output <visual_master.mp4> [--subtitles-ass <captions.ass>]`
/home/hermes/.hermes/skills/media/shorts-core/references/production-profiles.md:145:   Unchanged shot segments must be reused from the segment cache. A changed shot must not force unchanged segments to re-encode.
/home/hermes/.hermes/skills/media/shorts-core/references/production-profiles.md-146-
/home/hermes/.hermes/skills/media/shorts-core/references/production-profiles.md:147:4. Low-resolution/missing/invalid assets fail before render. Original asset identity must survive as `source_origin`. Frequent or adjacent same-origin reuse is a directing review signal, not an automatic failure; judge whether it serves intentional continuity/callback or creates repetitive, weak visual storytelling. Extreme washed/flat signal candidates require review.
/home/hermes/.hermes/skills/media/shorts-core/references/production-profiles.md-148-
/home/hermes/.hermes/skills/media/shorts-core/references/production-profiles.md-149-Source/SFX aramasında tek toplu arama ve tek seçim turu kullan. Footage'ın kullanılabilir gerçek sesi varsa önce onu değerlendir. Bir ücretsiz sağlayıcının sayfası engellenirse aynı asset için HTML/regex/dependency denemelerini zincirleme; eldeki yeterli ve lisanslı alternatife geç. Production sırasında `bs4`, `cv2`, font veya kurulu pipeline bileşenlerini keşif amacıyla tekrar probe etme.
/home/hermes/.hermes/skills/media/shorts-core/references/production-profiles.md-150-
/home/hermes/.hermes/skills/media/shorts-core/references/production-profiles.md-151-5. Final QA order remains authoritative:
/home/hermes/.hermes/skills/media/shorts-core/references/production-profiles.md-152-   preflight → repairs → final render → semantic contact sheet → final semantic Vision QA → no visual change after PASS.
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-253-            "mode": gate.get("mode"),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-254-            "candidates": normalized,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-255-        },
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-256-        "selected_casting": selected_casting,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-257-    }
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709:258:    return hashlib.sha256(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-259-        json.dumps(payload, sort_keys=True, ensure_ascii=False).encode("utf-8")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-260-    ).hexdigest()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-261-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-262-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-263-def _proof_freeze_block(tool_name: str, args: dict) -> Optional[dict]:
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-421-        ):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-422-            return True
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-423-    return False
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-424-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-425-def _sha_file(path: Path) -> str:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709:426:    h = hashlib.sha256()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-427-    with path.open("rb") as f:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-428-        for chunk in iter(lambda: f.read(1024 * 1024), b""):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-429-            h.update(chunk)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-430-    return h.hexdigest()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-431-
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-588-                "question": normalized_question,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-589-            },
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-590-            ensure_ascii=False,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-591-            sort_keys=True,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-592-        )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709:593:        signature = hashlib.sha256(sig_raw.encode("utf-8")).hexdigest()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-594-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-595-        with _LOCK:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-596-            if signature in _VISION_SEEN:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-597-                return _block(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-598-                    "Shorts production guard: this exact visual evidence has already been "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709:599:                    "asked the same question. Reuse the existing result. If evidence was repaired "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-600-                    "or the verification question genuinely needs correction, change the evidence "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-601-                    "or question rather than repeating the same call."
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-602-                )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-603-        return None
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-604-
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-700-        return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-701-    token = str(state.get("repair_token") or "")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-702-    if not token or f"HERMES_REPAIR_VERIFY::{token}" not in question:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-703-        return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-704-    try:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709:705:        if _sha_file(image_path) != state.get("contact_sheet_sha256"):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-706-            return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-707-        artifact = Path(str(state.get("artifact") or "")).expanduser().resolve()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709:708:        if not artifact.exists() or _sha_file(artifact) != state.get("artifact_sha256"):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-709-            return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-710-    except Exception:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-711-        return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-712-    outer = _json_object(result)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-713-    verdict = _json_object(outer.get("analysis")) if outer and outer.get("success") is True else None
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-727-        state["verification_pending"] = False
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-728-        state["claim_fixed_allowed"] = accepted
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-729-        state["verification"] = {
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-730-            "verifier": "vision_analyze",
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-731-            "verdict": verdict.get("verdict"),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709:732:            "artifact_sha256": state.get("artifact_sha256"),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709:733:            "contact_sheet_sha256": state.get("contact_sheet_sha256"),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-734-            "session_id": session_id,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-735-            "turn_id": turn_id,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-736-            "tool_call_id": tool_call_id,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-737-            "accepted_at": time.time(),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-738-            "raw": verdict,
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-767-    question = str(args.get("question") or "")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-768-    if not image_url:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-769-        return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-770-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-771-    # A provider failure is not reviewed evidence. Mark only completed Vision
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709:772:    # calls as seen so the provider's explicit retry can reuse the exact sheet
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-773-    # and question instead of forcing a meaningless evidence mutation.
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-774-    raw_identity = image_url[7:] if image_url.startswith("file://") else image_url
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-775-    try:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-776-        image_identity = _sha_file(Path(raw_identity).expanduser().resolve())
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-777-    except Exception:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-778-        image_identity = str(Path(raw_identity).expanduser())
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-779-    normalized_question = re.sub(r"\s+", " ", question).strip()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709:780:    signature = hashlib.sha256(json.dumps(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-781-        {"session": session_id, "image": image_identity, "question": normalized_question},
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-782-        ensure_ascii=False, sort_keys=True,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-783-    ).encode("utf-8")).hexdigest()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-784-    outer = _json_object(result)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-785-    if status and status != "ok":
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-818-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-819-    try:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-820-        expected_sheet = Path(str(pending["contact_sheet"])).resolve()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-821-        if expected_sheet != image_path:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-822-            return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709:823:        if _sha_file(image_path) != pending.get("contact_sheet_sha256"):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-824-            return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-825-    except Exception:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-826-        return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-827-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-828-    outer = _json_object(result)
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-861-            "pass": True,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-862-            "receipt_source": "shorts-production-guard/post_tool_call",
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-863-            "verifier": "vision_analyze",
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-864-            "fingerprint": pending["fingerprint"],
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-865-            "contact_sheet": str(image_path),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709:866:            "contact_sheet_sha256": pending["contact_sheet_sha256"],
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-867-            "verdict": verdict,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-868-            "vision_route": outer.get("vision_route") if isinstance(outer.get("vision_route"), dict) else None,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-869-            "session_id": session_id,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-870-            "turn_id": turn_id,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-canonical-vision-only-20260909-173709-871-            "tool_call_id": tool_call_id,
--
/home/hermes/.hermes/skills/media/shorts-core/production-profiles.md-129-
/home/hermes/.hermes/skills/media/shorts-core/production-profiles.md-130-2. Programmatic graphics, callouts, info boxes and overlays must declare a pixel `bbox` in the production manifest. Caption-zone intersection is a deterministic FAIL before render. A graphic with no bbox is not deterministically cleared.
/home/hermes/.hermes/skills/media/shorts-core/production-profiles.md-131-
/home/hermes/.hermes/skills/media/shorts-core/production-profiles.md-132-3. For local visual repair after an existing render, use:
/home/hermes/.hermes/skills/media/shorts-core/production-profiles.md-133-   `/home/hermes/.hermes/skills/media/shorts-core/scripts/production_guardrails.py segment-build --manifest <manifest.json> --output <visual_master.mp4> [--subtitles-ass <captions.ass>]`
/home/hermes/.hermes/skills/media/shorts-core/production-profiles.md:134:   Unchanged shot segments must be reused from the segment cache. A changed shot must not force unchanged segments to re-encode.
/home/hermes/.hermes/skills/media/shorts-core/production-profiles.md-135-
/home/hermes/.hermes/skills/media/shorts-core/production-profiles.md-136-4. Low-resolution/missing/invalid assets fail before render. Repeated-source and extreme washed/flat signal candidates are surfaced before assembly and must be reviewed rather than silently accepted.
/home/hermes/.hermes/skills/media/shorts-core/production-profiles.md-137-
/home/hermes/.hermes/skills/media/shorts-core/production-profiles.md-138-5. Final QA order remains authoritative:
/home/hermes/.hermes/skills/media/shorts-core/production-profiles.md-139-   preflight → repairs → final render → semantic contact sheet → one final vision → no visual change after PASS.
--
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.pre-production-contract-20260905_235217-307-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.pre-production-contract-20260905_235217-308-2. Programmatic graphics/annotations must belong to the affected shot, be materialized before canonical assembly, and declare `materialized: true` plus pixel `bbox`. Global or unmaterialized graphics are deterministic FAIL.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.pre-production-contract-20260905_235217-309-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.pre-production-contract-20260905_235217-310-3. Canonical visual assembly and local repair use:
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.pre-production-contract-20260905_235217-311-   `/home/hermes/.hermes/skills/media/shorts-core/scripts/production_guardrails.py segment-build --manifest <manifest.json> --output <visual_master.mp4> [--subtitles-ass <captions.ass>]`
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.pre-production-contract-20260905_235217:312:   Unchanged segments must reuse cache.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.pre-production-contract-20260905_235217-313-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.pre-production-contract-20260905_235217:314:4. Missing/invalid/low-resolution assets hard-fail. `source_origin` tekrarları provenance üzerinden korunur; 3+ tekrar veya bitişik tekrar açık `intentional_callback` + `reuse_reason` olmadan hard-fail olur. Extreme washed/flat signal candidates review uyarısıdır.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.pre-production-contract-20260905_235217-315-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.pre-production-contract-20260905_235217-316-5. Final QA order:
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.pre-production-contract-20260905_235217-317-   preflight → repairs → final render → semantic contact sheet → one final vision QA → no visual change after PASS.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.pre-production-contract-20260905_235217-318-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.pre-production-contract-20260905_235217-319-## Production freshness
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-223-            "mode": gate.get("mode"),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-224-            "candidates": normalized,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-225-        },
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-226-        "selected_casting": selected_casting,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-227-    }
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721:228:    return hashlib.sha256(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-229-        json.dumps(payload, sort_keys=True, ensure_ascii=False).encode("utf-8")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-230-    ).hexdigest()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-231-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-232-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-233-def _proof_freeze_block(tool_name: str, args: dict) -> Optional[dict]:
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-365-        ):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-366-            return True
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-367-    return False
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-368-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-369-def _sha_file(path: Path) -> str:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721:370:    h = hashlib.sha256()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-371-    with path.open("rb") as f:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-372-        for chunk in iter(lambda: f.read(1024 * 1024), b""):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-373-            h.update(chunk)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-374-    return h.hexdigest()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-375-
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-531-                "question": normalized_question,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-532-            },
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-533-            ensure_ascii=False,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-534-            sort_keys=True,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-535-        )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721:536:        signature = hashlib.sha256(sig_raw.encode("utf-8")).hexdigest()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-537-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-538-        with _LOCK:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-539-            if signature in _VISION_SEEN:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-540-                return _block(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-541-                    "Shorts production guard: this exact visual evidence has already been "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721:542:                    "asked the same question. Reuse the existing result. If evidence was repaired "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-543-                    "or the verification question genuinely needs correction, change the evidence "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-544-                    "or question rather than repeating the same call."
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-545-                )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-546-        return None
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-547-
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-643-        return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-644-    token = str(state.get("repair_token") or "")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-645-    if not token or f"HERMES_REPAIR_VERIFY::{token}" not in question:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-646-        return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-647-    try:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721:648:        if _sha_file(image_path) != state.get("contact_sheet_sha256"):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-649-            return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-650-        artifact = Path(str(state.get("artifact") or "")).expanduser().resolve()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721:651:        if not artifact.exists() or _sha_file(artifact) != state.get("artifact_sha256"):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.pre-fingerprint-parity-20260909-145721-652-            return
root@213-238-170-219:~#