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:~#