========== YENİ KOMUT | 16.09.2026 15:26:26 ==========
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-13-_LOCK = threading.Lock()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-14-_VISION_SEEN: set[str] = set()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-15-_CANONICAL_READS: set[tuple[str, str]] = set()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-16-_CREATIVE_CHILDREN: dict[str, str] = {}
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-17-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:18:_CREATIVE_CONTRACT_DIR = Path.home() / ".hermes" / "cache" / "shorts-production-guard" / "creative-contracts"
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-19-_CREATIVE_CONTRACT_SCHEMA = {
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-20- "type": "object",
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-21- "additionalProperties": False,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-22- "properties": {
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-23- "contract_version": {"type": "integer", "const": 1},
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-24- "creative_thesis": {"type": "string", "minLength": 1},
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-25- "visual_strategy": {"type": "string", "minLength": 1},
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:26: "source_strategy": {"type": "string", "minLength": 1},
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-27- "visual_arc": {
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-28- "type": "array", "minItems": 1, "maxItems": 4,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-29- "items": {"type": "string", "minLength": 1},
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-30- },
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-31- "payoff": {"type": "string", "minLength": 1},
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-35- },
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-36- "fallback": {"type": "string"},
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-37- },
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-38- "required": [
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-39- "contract_version", "creative_thesis", "visual_strategy",
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:40: "source_strategy", "visual_arc", "payoff",
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-41- ],
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-42-}
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-43-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-44-_CANONICAL_IMPLEMENTATION_NAMES = {
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-45- "shorts_fast_pipeline.py",
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-185- low = str(text or "").lower()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-186- is_video = any(x in low for x in _VIDEO_WORDS)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-187- is_production = any(x in low for x in _PRODUCTION_WORDS)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-188- alternate_method = any(x in low for x in _ALT_METHOD_WORDS)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-189- explicit_system_change = any(x in low for x in _EXPLICIT_SYSTEM_WORDS)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:190: # Turkish/English engineering briefs must retain source, test and dependency
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-191- # access. Requiring one engineering phrase plus one system-quality phrase
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-192- # avoids turning an ordinary "make the video better" prompt into a bypass.
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-193- engineering = any(x in low for x in (
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-194- "engineering", "mühendislik", "regression harness", "case-vid",
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-195- "regresyon harness", "regresyon", "kök neden", "root cause", "runtime/architecture",
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-208-def _production_context(session_id: str) -> tuple[bool, bool, bool]:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-209- return _classify_context_text(_recent_real_user_text(session_id))
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-210-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-211-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-212-def _canonical_rediscovery_target(tool_name: str, args: dict) -> Optional[str]:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:213: """Identify source/reference inspection, not canonical script execution."""
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-214- payload = json.dumps(args, ensure_ascii=False, sort_keys=True)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-215- names = _CANONICAL_IMPLEMENTATION_NAMES | _CANONICAL_REFERENCE_NAMES
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-216- target = next((name for name in names if name in payload), None)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-217- if not target:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-218- return None
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:219: if tool_name in {"read_file", "search_files"}:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-220- return target
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-221- if tool_name == "skill_view" and args.get("file_path"):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-222- return target
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-223- if tool_name == "execute_code":
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-224- low = str(args.get("code") or "").lower()
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-244- # this function at its caller.
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-245- if target in _CANONICAL_IMPLEMENTATION_NAMES or key in _CANONICAL_READS:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-246- return _block(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-247- "Shorts production guard: normal production must use the documented interface "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-248- f"instead of re-reading {target} to rediscover schema. Run the canonical "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:249: "preflight/proof-check/pipeline command. Source and tests remain readable in an "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-250- "explicit engineering/system-change task."
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-251- )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-252- _CANONICAL_READS.add(key)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-253- return None
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-254-
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-258-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-259-def _runtime_proof_fingerprint(data: dict) -> str:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-260- """Mirror the canonical proof fingerprint so accepted proof can be frozen at runtime."""
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-261- creative = data.get("creative_intent") or {}
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-262- gate = data.get("proof_gate") or {}
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:263: candidates = gate.get("candidates") or []
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-264-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-265- normalized = []
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:266: for c in candidates:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-267- if not isinstance(c, dict):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-268- normalized.append(c)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-269- continue
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-270- item = dict(c)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-271- src = item.get("src")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-272- if isinstance(src, str) and src.strip():
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-273- path = Path(src).expanduser()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-274- if path.exists():
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-275- st = path.stat()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:276: item["_source_identity"] = {
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-277- "path": str(path.resolve()),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-278- "size": st.st_size,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-279- "mtime_ns": st.st_mtime_ns,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-280- }
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-281- else:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:282: item["_source_identity"] = {"path": str(path), "missing": True}
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-283- normalized.append(item)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-284-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-285- selected_casting = []
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-286- for index, shot in enumerate(data.get("shots") or []):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-287- if not isinstance(shot, dict):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-288- continue
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-289- kind = str(shot.get("type") or "").lower()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:290: origin = str(shot.get("source_origin") or "").strip().lower()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-291- src_value = shot.get("src")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:292: footage_backed = (
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:293: "footage" in kind
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-294- or (
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-295- shot.get("materialized") is True
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-296- and bool(origin)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-297- and not origin.startswith(("generated:", "synthetic:", "ai-generated:"))
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-298- and isinstance(src_value, str)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-299- and Path(src_value).expanduser().suffix.lower() in {".mp4", ".mov", ".mkv", ".webm", ".m4v"}
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-300- )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-301- )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:302: if not footage_backed:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-303- continue
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-304- item = {
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-305- "shot": index,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-306- "src": shot.get("src"),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:307: "source_origin": shot.get("source_origin"),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-308- "visual_goal": shot.get("visual_goal"),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-309- "in": shot.get("in", 0),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-310- "duration": shot.get("duration"),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-311- "casting": shot.get("casting"),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-312- }
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-313- src = item.get("src")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-314- if isinstance(src, str) and src.strip():
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-315- path = Path(src).expanduser()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-316- if path.exists():
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-317- st = path.stat()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:318: item["_source_identity"] = {
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-319- "path": str(path.resolve()),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-320- "size": st.st_size,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-321- "mtime_ns": st.st_mtime_ns,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-322- }
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-323- else:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:324: item["_source_identity"] = {"path": str(path), "missing": True}
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-325- selected_casting.append(item)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-326-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-327- payload = {
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-328- "creative_intent": {
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-329- "promise": creative.get("promise"),
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-331- "hook_visual_goal": creative.get("hook_visual_goal"),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-332- "payoff": creative.get("payoff"),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-333- },
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-334- "proof_gate": {
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-335- "mode": gate.get("mode"),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:336: "candidates": normalized,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-337- },
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-338- "selected_casting": selected_casting,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-339- }
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-340- return hashlib.sha256(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-341- json.dumps(payload, sort_keys=True, ensure_ascii=False).encode("utf-8")
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-413-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-414- prospective = json.loads(prospective_text)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-415- if _runtime_proof_fingerprint(prospective) != current_fp:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-416- return _block(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-417- "Shorts production guard: PROOF_FREEZE — accepted proof is locked. "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:418: "Do not change creative_intent, proof candidates, or selected footage/casting "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-419- "after Vision PASS. Continue with TTS/render/final QA using the accepted plan. "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-420- "A genuine proof failure must be handled before acceptance, not by reopening "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-421- "the proof loop after PASS."
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-422- )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-423- except Exception:
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-462-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-463-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-464-def _direct_render_bypass(tool_name: str, args: dict) -> bool:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-465- """Block manual TTS/final assembly during normal Shorts production.
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-466-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:467: Asset inspection, proof generation and deterministic QA remain available.
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-468- Final production must go through the canonical shorts_fast_pipeline.
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-469- """
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-470- if tool_name == "terminal":
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-471- cmd = str(args.get("command") or "")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-472- low = cmd.lower()
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-541- prefix = "HERMES_PROOF_GATE::"
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-542- return token[len(prefix):] if token.startswith(prefix) else token
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-543-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-544-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-545-def _proof_verdict_accepted(verdict: Any, token: str) -> bool:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:546: """Accept proof only when every selected footage role is unambiguous."""
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-547- return bool(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-548- isinstance(verdict, dict)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-549- and verdict.get("verdict") == "PASS"
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-550- and verdict.get("verifier") == "vision_analyze"
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-551- and verdict.get("primary_visual_proof") is True
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-617- if tool_name == "skill_view" and not alternate_method:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-618- name = str(args.get("name") or "")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-619- if name and name != "shorts-core":
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-620- return _block(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-621- "Shorts production guard: shorts-core is the sole production authority "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:622: "for this footage-based Shorts/Reels turn. Do not load another production, "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-623- "debug, installation, or QA skill. Continue with shorts-core and the canonical pipeline."
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-624- )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-625-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-626- # Vision policy: do not impose arbitrary call counts.
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-627- # The agent may re-evaluate when the evidence or question genuinely changes.
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-638- question = str(args.get("question") or "").strip()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-639- raw = image_url[7:] if image_url.startswith("file://") else image_url
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-640- image_path = Path(raw).expanduser()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-641-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-642- # Normal production gets exactly the two canonical visual judgment surfaces:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:643: # proof/casting before render and final semantic QA after render. Source-sheet,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:644: # range-sheet and ad-hoc asset-sheet inspections duplicate evidence and create
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-645- # expensive main-agent loops. This block does not abort the job; the agent
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-646- # continues with deterministic discovery and the canonical proof sheet.
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-647- if (
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-648- not alternate_method
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-649- and not explicit_system_change
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-650- and image_path.name not in {"proof_contact_sheet.jpg", "final_contact_sheet.jpg"}
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-651- ):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-652- return _block(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-653- "Shorts production guard: AD_HOC_VISION_SKIPPED_FOR_TURN_ECONOMY — "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:654: "do not open a separate source/range/asset Vision review. Select candidates "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-655- "from metadata and the creative contract, build the manifest, then use the "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-656- "single canonical proof_contact_sheet which already reviews hook, proof, "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-657- "setup, insert and payoff casting. Continue the production; do not stop."
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-658- )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-659-
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-675- and proof_state.get("last_fingerprint") == current_fingerprint
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-676- ):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-677- return _block(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-678- "Shorts production guard: PROOF_STRATEGY_EXHAUSTED — this proof strategy "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-679- "already failed initial review plus one repair. Do not retry Vision on the "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:680: "same accepted candidates/casting. Materially change the proof footage or "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-681- "casting, rerun proof-check, and continue the production autonomously."
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-682- )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-683-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-684- # Content identity matters more than filename: a repaired final_contact_sheet
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-685- # at the same path is new evidence and must be allowed to be judged again.
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-702-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-703- with _LOCK:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-704- if signature in _VISION_SEEN:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-705- return _block(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-706- "Shorts production guard: this exact visual evidence has already been "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:707: "asked the same question. Reuse the existing result. If evidence was repaired "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-708- "or the verification question genuinely needs correction, change the evidence "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-709- "or question rather than repeating the same call."
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-710- )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-711- return None
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-712-
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-744- "Shorts production guard: proof state is runtime-owned. "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-745- "Do not create, edit, copy, delete, or inspect proof receipt/pending files "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-746- "through terminal commands during production."
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-747- )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-748- if (
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:749: _INSTALL_RE.search(cmd)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-750- or "local-vlm" in low
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-751- or ("transformers" in low and "install" in low)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-752- or ("torch" in low and "install" in low)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-753- ):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-754- return _block(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-755- "Shorts production guard: installing packages/models or creating a local VLM "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-756- "during video production is blocked. Do not build a new QA/tool stack; continue "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-757- "with the canonical installed pipeline."
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-758- )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:759: if _PROTECTED_MUTATION_RE.search(cmd):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-760- return _block(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-761- "Shorts production guard: production-time mutation of the Hermes runtime/toolchain "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-762- "is blocked. Use existing tools without modifying them."
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-763- )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-764-
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-875- question = str(args.get("question") or "")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-876- if not image_url:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-877- return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-878-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-879- # A provider failure is not reviewed evidence. Mark only completed Vision
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:880: # calls as seen so the provider's explicit retry can reuse the exact sheet
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-881- # and question instead of forcing a meaningless evidence mutation.
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-882- raw_identity = image_url[7:] if image_url.startswith("file://") else image_url
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-883- try:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-884- image_identity = _sha_file(Path(raw_identity).expanduser().resolve())
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-885- except Exception:
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-965- try:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-966- receipt = Path(str(pending["receipt"])).expanduser().resolve()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-967- receipt.parent.mkdir(parents=True, exist_ok=True)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-968- obj = {
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-969- "pass": True,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:970: "receipt_source": "shorts-production-guard/post_tool_call",
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-971- "verifier": "vision_analyze",
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-972- "fingerprint": pending["fingerprint"],
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-973- "contact_sheet": str(image_path),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-974- "contact_sheet_sha256": pending["contact_sheet_sha256"],
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-975- "verdict": verdict,
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-1034- sid = str(session_id or "")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-1035- if not sid:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-1036- return None
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-1037- try:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-1038- con = sqlite3.connect(str(_DB), timeout=1)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:1039: row = con.execute("SELECT source FROM sessions WHERE id=? LIMIT 1", (sid,)).fetchone()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-1040- con.close()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-1041- if row and str(row[0] or "") in {"subagent", "tool"}:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-1042- return None
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-1043- except Exception:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-1044- pass
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-1048- compact = json.dumps(contract, ensure_ascii=False, separators=(",", ":"))
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-1049- return {
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-1050- "context": (
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-1051- "HERMES_CREATIVE_CONTRACT_ACTIVE: This Astra-approved creative direction is the "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-1052- "current production contract. Preserve its visual intent while choosing concrete "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py:1053: "assets and executing the canonical pipeline. Do not silently replace it. "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-1054- f"CONTRACT={compact}"
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py-1055- )
root@213-238-170-219:~#