========== YENİ KOMUT | 17.09.2026 16:00:36 ==========
========== YENİ KOMUT | 17.09.2026 16:00:36 ==========
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-229-- `proof_gate.receipt`: canonical proof receipt yolu;
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-230-- `proof_gate.candidates`: yalnız gerçekten ana vaadi/hook'u kanıtlayabilecek aday footage;
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-231-- her candidate: `src`, `source_origin`, `visual_goal`, `covers`, `in`, `duration`;
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-232-- `covers` içinde gereken hedefler: `primary_visual_proof` ve `hook_visual_goal`.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-233-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-234-Önce:
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-235-`production_guardrails.py proof-check --manifest <manifest> --workdir <proof_gate_dir>`
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-236-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908:237:PASS yalnız adayların teknik olarak incelenebilir olduğunu söyler; yaratıcı proof PASS değildir. Ardından `proof_contact_sheet` dosyasını, komut çıktısındaki `vision_question` değeriyle doğrudan `vision_analyze` üzerinden değerlendir. `vision_question` bir `@file:/.../proof_vision_question.txt` referansıysa brief'i ana ajanla ayrıca okuma, özetleme veya prompta kopyalama; vision tool aynı dizindeki canonical dosyayı güvenli biçimde açıp tam sözleşmeyi Vision sağlayıcısına iletir. Aynı değişmemiş sheet ve aynı soruyu sırf emin olmak için tekrarlama. `proof-check` sonucu `proof_status: already_accepted` ve `vision_required: false` ise mevcut runtime receipt hâlâ aynı fingerprint/sheet/source kimliklerine bağlıdır; question dosyasını yeniden üretme veya yeni Vision çağrısı yapma. Ancak proof içeriği gerçekten değiştiyse veya önceki değerlendirme teknik/şema hatası nedeniyle geçerli bir sonuç üretmediyse yeni değerlendirme yapılabilir.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-238-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-239-Canonical `@file` çağrısında Vision ilk kez geçersiz prose/şema döndürürse tool aynı genişletilmiş sözleşmeyi kendi içinde bir kez yeniden ister; ikinci sonuç da geçersizse `CANONICAL_VISION_CONTRACT_INVALID` ile fail-closed döner. Bu durumda ana ajan question dosyasını okuyup prompt yeniden yazma döngüsü açmaz; sonucu `QA_UNAVAILABLE` sayar.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-240-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908:241:Gerçek `vision_analyze` PASS verirse `shorts-production-guard` runtime hook'u proof receipt'i otomatik üretir. Agent verdict JSON, receipt veya pending proof dosyasını elle oluşturamaz ve `proof-accept` diye manuel bir kabul yolu yoktur.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-242-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-243-Receipt oluşmadan canonical pipeline çalıştırılmaz. Creative intent veya proof adayları değişirse fingerprint değişir ve eski receipt otomatik stale olur.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-244-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-245-`proof_gate.mode: not_applicable` yalnız ana vaat gerçek dünyada doğrudan görüntülenebilir bir proof gerektirmiyorsa kullanılabilir. Görüntülenebilir bir olay/nesne/kişi/davranış için kaçış yolu değildir.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-246-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-247-### Faz 1 — Tek planlama turu
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-248-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-249-Benchmark/test görevinde uçtan uca sayaç ilk planlama veya discovery çağrısından önce başlamalıdır; araştırma ve asset keşfi de gerçek üretim maliyetidir.
--
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-297-Helper için geçici tek-seferlik bbox scripti, yeni Python ortamı veya yeniden keşfedilmiş FFmpeg/Montaj yolları oluşturma. `shorts_fast_pipeline.py` standart Shorts üretiminin canonical assembly yoludur. Mekanizma grafiği/annotation gerekiyorsa yalnız etkilenen beat'i önce kısa bir 1080×1920 shot asset'e materialize et ve manifestte `materialized: true` + `bbox` ile belirt; sonra aynı fast pipeline'ı çalıştır. Tüm master'ı elle FFmpeg/Montaj ile yeniden kurma. Helper başarısız olursa yalnız hatalı bileşeni teşhis et.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-298-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-299-### Faz 3 — Final görsel QA geçidi
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-300-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-301-Deterministic pipeline ve bütün layout/asset düzeltmeleri PASS verdikten sonra final render üret.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-302-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-303-Final QA için eşit aralıklı sabit kareler kullanma. Shot manifestindeki her seçilmiş shot ile gerçekten farklı anlam/görsel durum taşıyan her `visual_beats` öğesini ve her annotation/infographic/animation/overlay aralığını tek semantic contact sheet'te temsil et. Uzun bir materialized asset'i yalnız orta karesiyle temsil etmek yeterli değildir; fakat aynı durumu tekrar gösteren gereksiz QA kareleri de ekleme.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-304-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908:305:Final semantic Vision PASS'ten sonra, grafik içeren kabul edilmiş videonun `motion_identity` kayıtlarını `production_guardrails.py motion-register --manifest <manifest> --verification <vision-pass.json>` ile yerel history'ye ekle. `accepted` kayıt yalnız `verifier=vision_analyze` ve `verdict=PASS` kanıtıyla yazılır; aynı proje/shot/identity tekrar eklenmez. Böylece sonraki üretimin preflight'ı yalnız eski rejected baseline'ı değil, yakın tarihli kabul edilmiş görsel dilleri de karşılaştırır.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-306-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-307-Semantic sheet seyrek bir görsel-yönetmenlik kanıtıdır; her caption kartının karesi değildir. Vision'ın sheet'te örneklenmeyen kartı “videoda yok” sanmasına izin verme. Bütün caption kartlarını metin olarak `caption_plan.json` üzerinden oku; Vision'a yalnız örneklenmiş anlarda yerleşim/örtüşme sorusu sor.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-308-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908:309:Yalnız bu final semantic contact sheet'i `vision_analyze` ile değerlendir.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-310-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-311-Vision promptunu manifestin niyetini kanıt gibi anlatan uzun bir savunmaya dönüştürme. Önce niyet etiketlerini görmezden gelerek kareler arasında gerçekte neyin değiştiğini tarif etmesini; sonra görünür kanıtı vaat, progression ve payoff ile karşılaştırmasını iste. `framing`, `composition_family`, `transition`, `visual_goal` ve `payoff_visual` alanları iddiadır; görüntüde karşılığı yoksa PASS gerekçesi olamaz.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-312-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908:313:Pipeline sonucundaki `vision_question` bir `@file:/.../final_vision_question.txt` referansıysa bunu `final_contact_sheet` ile doğrudan `vision_analyze` çağrısına ver; brief veya caption planını ana ajanla yeniden okuma, özetleme ya da prompta kopyalama. Canonical question dosyası `promise`, `primary_visual_proof`, `hook_visual_goal`, `payoff`, kompakt `directing_plan`, bütün `caption_review` kartları, semantic sample/shot hedefleri, source origin ve motion-history sözleşmesini kayıpsız taşır; vision tool yalnız evidence image ile aynı dizindeki canonical promptu açar. Eski pipeline çıktısında bu referans yoksa final Vision çağrısından önce brief'i okuyup aynı alanları prompta taşı. Bu brief kullanılmadan verilen Vision PASS final görsel kalite onayı sayılmaz.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-314-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-315-`performance_plan` final Vision brief'ine taşınmaz; semantic contact sheet ses performansını doğrulayamaz ve bu bağlam Vision promptunu gereksiz büyütür. Vision PASS, TTS/audio performansına otomatik PASS vermez. Final teslimden önce narration ayrıca manifestteki `performance_plan` açısından doğrulanmalıdır: tavır, vurgu, duraklar, tempo arkı, payoff icrası ve `pronunciation_checks` içindeki kelimeler. TTS motoru/sesi henüz seçilmemiş geliştirme aşamasında bu kontrol ertelenebilir; fakat gerçek acceptance/final üretimde atlanamaz.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-316-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-317-Kontrol et:
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-318-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-319-- gerçek 9:16 tam ekran;
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-320-- siyah/boş bant veya yanlış crop;
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-321-- en fazla iki satır altyazı ve safe area;
--
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-329-- gerçek footage ana omurga mı, grafik yalnız gerekli açıklama için mi kullanılıyor;
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-330-- video teknik olarak temiz olmanın ötesinde konuya özgü ve profesyonel hissettiriyor mu;
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-331-- final `payoff`, başlangıçtaki `promise` vaadini gerçekten karşılıyor mu.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-332-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-333-Vision'a “belirgin kusur yoksa PASS” deme. Aktif olarak yaratıcı kusur ara. Bu maddelerden biri belirgin biçimde başarısızsa final verdict **FAIL** olmalıdır.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-334-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-335-PASS ise yeniden render veya ikinci contact sheet üretme.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-336-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908:337:Vision sağlayıcısı geçici 429/timeout ile dönerse `vision_analyze` içindeki yapılandırılmış `auxiliary.vision.fallback_chain` aynı değişmemiş kanıt ve soruyla otomatik devreye girebilir. Bu, QA'yı atlayan ayrı bir insan/browser yolu değildir; aynı tool sözleşmesi ve runtime-owned receipt doğrulaması korunur. Sağlayıcının açıkça istediği kısa bekleme varsa primary aynı-provider retry'ı bir kez yapabilir, sonra zincir sırayla denenir. Başarısız çağrı değerlendirilmiş kanıt değildir. Tüm yapılandırılmış Vision sağlayıcıları başarısızsa `QA_UNAVAILABLE` ver. Yeni imza elde etmek için manifest süresini, `visual_beats` metadata'sını, sheet'i veya soruyu anlamsız biçimde değiştirme ve pipeline'ı tekrar çalıştırma. Proof/final receipt içinde tool-owned `vision_route` provenance'ı varsa koru; ajan bu alanı veya receipt'i elle üretemez.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-338-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-339-Vision çağrısından sonra final görüntü değiştirilemez. Görsel değişiklik zorunluysa önceki vision sonucu geçersizdir; deterministic düzeltmeleri tamamla, yeni final render ve semantic sheet üret, sonra yeni final vision sonucu final için esas alınır.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-340-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908:341:Repair durumunu `repair_state.state` ile dürüstçe taşı: `repair_attempted` → `verification_pending` → `verified | unverified | failed`. Pipeline exact final artifact ve semantic sheet hash'lerine bağlı `repair_state.json` üretir. Yalnız runtime'ın aynı hash'ler üzerinde aldığı yapılandırılmış `vision_analyze` PASS durumu `verified` yapar. `repair_claim_fixed_allowed: false` iken final raporda “fixed/düzeltildi” deme.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-342-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-343-Final QA'nın amacı yalnız kusur bulmak değil, **teslim edeceğin son artifact'ı doğrulamaktır**. Bir FAIL sonrasında yaptığın düzeltmeler ne kadar açık görünürse görünsün, eski FAIL'i kendi muhakemenle PASS sayma. Son görsel değişiklikten sonra semantic Vision sonucu PASS değilse video henüz doğrulanmış final değildir. Vision teknik olarak kullanılamıyorsa bunu dürüstçe QA_UNAVAILABLE olarak bildir; “video tamamlandı” veya eşdeğer başarı ifadesi kullanma.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-344-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-345-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-346-FAIL ise yalnız doğrulanmış kusuru etkileyen shot/overlay/altyazıyı değiştir. Cache sağlam kalan aşamaları yeniden üretmemelidir; tek lokal segment değişikliği mümkünse bütün visual master'ı yeniden encode etme.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-347-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-348-### Faz 4 — Teslim
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md.bak-pre-turn-economy-20260908-349-
--
/home/hermes/.hermes/skills/media/shorts-core/references/montaj-fast-path.md-149-
/home/hermes/.hermes/skills/media/shorts-core/references/montaj-fast-path.md-150-Ses seviyesi:
/home/hermes/.hermes/skills/media/shorts-core/references/montaj-fast-path.md-151-
/home/hermes/.hermes/skills/media/shorts-core/references/montaj-fast-path.md-152-```bash
/home/hermes/.hermes/skills/media/shorts-core/references/montaj-fast-path.md-153-"$FFMPEG" -hide_banner -i final.mp4 -map 0:a:0 \
/home/hermes/.hermes/skills/media/shorts-core/references/montaj-fast-path.md-154- -af 'loudnorm=I=-16:TP=-1.5:LRA=11:print_format=json' -f null -
/home/hermes/.hermes/skills/media/shorts-core/references/montaj-fast-path.md-155-```
/home/hermes/.hermes/skills/media/shorts-core/references/montaj-fast-path.md-156-
/home/hermes/.hermes/skills/media/shorts-core/references/montaj-fast-path.md:157:Contact sheet’i rastgele değil, kanca + her cümle/animasyon + finalden kare seçerek üret. `vision_analyze` sorusu şu maddeleri açıkça istemeli:
/home/hermes/.hermes/skills/media/shorts-core/references/montaj-fast-path.md-158-
/home/hermes/.hermes/skills/media/shorts-core/references/montaj-fast-path.md-159-1. 9:16 tam ekran ve siyah/boş bant yok;
/home/hermes/.hermes/skills/media/shorts-core/references/montaj-fast-path.md-160-2. altyazı en fazla 2 satır;
/home/hermes/.hermes/skills/media/shorts-core/references/montaj-fast-path.md-161-3. metin kutusu dahil %8 safe area;
/home/hermes/.hermes/skills/media/shorts-core/references/montaj-fast-path.md-162-4. Türkçe karakter ve yazım;
/home/hermes/.hermes/skills/media/shorts-core/references/montaj-fast-path.md-163-5. açıklayıcı grafiklerin anlaşılabilirliği;
/home/hermes/.hermes/skills/media/shorts-core/references/montaj-fast-path.md-164-6. render bozulması veya yanlış crop;
/home/hermes/.hermes/skills/media/shorts-core/references/montaj-fast-path.md-165-7. sahne çeşitliliği ve anlatımla senkron.
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-254- return token[len(prefix):] if token.startswith(prefix) else token
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-255-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-256-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-257-def _proof_verdict_accepted(verdict: Any, token: str) -> bool:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-258- """Accept proof only when every selected footage role is unambiguous."""
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-259- return bool(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-260- isinstance(verdict, dict)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-261- and verdict.get("verdict") == "PASS"
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909:262: and verdict.get("verifier") == "vision_analyze"
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-263- and verdict.get("primary_visual_proof") is True
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-264- and verdict.get("hook_visual_goal") is True
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-265- and verdict.get("proof_visible_and_unmistakable") is True
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-266- and verdict.get("casting_subjects_clear") is True
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-267- and _normalized_proof_token(verdict.get("proof_token")) == token
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-268- )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-269-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-270-
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-304- )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-305-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-306- # Vision policy: do not impose arbitrary call counts.
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-307- # The agent may re-evaluate when the evidence or question genuinely changes.
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-308- # Only exact no-progress repetition of the same visual evidence + question is blocked.
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-309- if tool_name in {"browser_vision", "computer_use"} and not alternate_method:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-310- return _block(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-311- "Shorts production guard: this QA fallback is disabled during normal production. "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909:312: "Use vision_analyze as the primary visual QA path; if Vision is unavailable after "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-313- "the permitted retry, continue with controlled QA_UNAVAILABLE rather than inventing a fallback."
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-314- )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-315-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909:316: if tool_name == "vision_analyze":
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-317- image_url = str(args.get("image_url") or "")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-318- question = str(args.get("question") or "").strip()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-319- raw = image_url[7:] if image_url.startswith("file://") else image_url
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-320- image_path = Path(raw).expanduser()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-321-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909:322: # Content identity matters more than filename: a repaired final_contact_sheet
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-323- # at the same path is new evidence and must be allowed to be judged again.
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-324- try:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-325- image_identity = _sha_file(image_path.resolve())
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-326- except Exception:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-327- image_identity = str(image_path)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-328-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-329- normalized_question = re.sub(r"\s+", " ", question).strip()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-330- sig_raw = json.dumps(
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-361- args.get("path")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-362- or args.get("file_path")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-363- or ""
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-364- )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-365- if path.endswith("proof_receipt.json") or path.endswith("proof_pending.json"):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-366- return _block(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-367- "Shorts production guard: proof state is runtime-owned. "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-368- "Do not write or patch proof receipts/pending attestations manually; "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909:369: "only a real vision_analyze PASS may issue the receipt."
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-370- )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-371- if any(path.startswith(prefix) for prefix in _PROTECTED_PREFIXES):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-372- return _block(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-373- "Shorts production guard: production-time mutation of Hermes core/tools/skills "
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-374- "is blocked. Use the installed production stack as-is and finish the video."
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-375- )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-376-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-377- if tool_name == "terminal":
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-428-def _update_repair_state_from_vision(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-429- image_path: Path,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-430- question: str,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-431- result: Any,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-432- session_id: str,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-433- turn_id: str,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-434- tool_call_id: str,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-435-) -> None:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909:436: if image_path.name != "final_contact_sheet.jpg":
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-437- return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-438- state_path = image_path.parent / "repair_state.json"
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-439- if not state_path.exists():
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-440- return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-441- try:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-442- state = json.loads(state_path.read_text(encoding="utf-8"))
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-443- except Exception:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-444- return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-445- if state.get("state") not in {"repair_attempted", "verification_pending"}:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-446- return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-447- token = str(state.get("repair_token") or "")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-448- if not token or f"HERMES_REPAIR_VERIFY::{token}" not in question:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-449- return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-450- try:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909:451: if _sha_file(image_path) != state.get("contact_sheet_sha256"):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-452- return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-453- artifact = Path(str(state.get("artifact") or "")).expanduser().resolve()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-454- if not artifact.exists() or _sha_file(artifact) != state.get("artifact_sha256"):
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-455- return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-456- except Exception:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-457- return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-458- outer = _json_object(result)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-459- 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.bak-pre-delegation-lock-20260909-460- if not verdict:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-461- state["state"] = "unverified"
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-462- state["verification_pending"] = False
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-463- state["claim_fixed_allowed"] = False
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-464- else:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-465- accepted = (
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-466- verdict.get("verdict") == "PASS"
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909:467: and verdict.get("verifier") == "vision_analyze"
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-468- and verdict.get("post_repair_semantic_verified") is True
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-469- and _normalized_proof_token(verdict.get("repair_token")) == token
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-470- )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-471- failed = verdict.get("verdict") == "FAIL"
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-472- state["state"] = "verified" if accepted else ("failed" if failed else "unverified")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-473- state["verification_pending"] = False
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-474- state["claim_fixed_allowed"] = accepted
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-475- state["verification"] = {
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909:476: "verifier": "vision_analyze",
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-477- "verdict": verdict.get("verdict"),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-478- "artifact_sha256": state.get("artifact_sha256"),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909:479: "contact_sheet_sha256": state.get("contact_sheet_sha256"),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-480- "session_id": session_id,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-481- "turn_id": turn_id,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-482- "tool_call_id": tool_call_id,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-483- "accepted_at": time.time(),
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-484- "raw": verdict,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-485- "vision_route": outer.get("vision_route") if isinstance(outer.get("vision_route"), dict) else None,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-486- }
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-487- try:
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-497- args: Any = None,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-498- result: Any = None,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-499- session_id: str = "",
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-500- turn_id: str = "",
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-501- tool_call_id: str = "",
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-502- status: str = "",
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-503- **_: Any,
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-504-) -> None:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909:505: if tool_name != "vision_analyze":
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-506- return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-507-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-508- active, _, _ = _production_context(session_id)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-509- if not active:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-510- return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-511- args = args if isinstance(args, dict) else {}
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-512- image_url = str(args.get("image_url") or "")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-513- question = str(args.get("question") or "")
--
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-541- except Exception:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-542- return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-543-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-544- contract_question = _expanded_vision_question_for_receipt(image_path, question)
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-545- _update_repair_state_from_vision(
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-546- image_path, contract_question, result, session_id, turn_id, tool_call_id
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-547- )
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-548-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909:549: if image_path.name != "proof_contact_sheet.jpg":
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-550- return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-551-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-552- pending_path = image_path.parent / "proof_pending.json"
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-553- if not pending_path.exists():
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-554- return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-555-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-556- try:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-557- pending = json.loads(pending_path.read_text(encoding="utf-8"))
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-558- except Exception:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-559- return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-560-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-561- token = str(pending.get("proof_token") or "")
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-562- if not token or f"HERMES_PROOF_GATE::{token}" not in contract_question:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-563- return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-564-
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-565- try:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909:566: expected_sheet = Path(str(pending["contact_sheet"])).resolve()
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-567- if expected_sheet != image_path:
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909-568- return
/home/hermes/.hermes/plugins/shorts-production-guard/__init__.py.bak-pre-delegation-lock-20260909:569: if _sha_file(image_path) != pending.get("contact_sheet_sha256"):
root@213-238-170-219:~#