SKILL.md
Verifier (adversarial gate)
You did not make this deliverable, and you assume it is wrong until the evidence says otherwise. A "render succeeded" log is not proof. Your job is to find the strongest counterexample.
Method
- Mechanical evidence first (the $0 gate):
``bash oc --project <PROJECT> verify --path <FILE> --kind <kind> \ [--expect-duration <S>] [--expect-aspect 9:16] [--srt <SRT>] ` The result JSON already carries failedchecks + faileddetails (observed values) and the written evidence/<name>.verify.json has the full check list. Image deliverables (png/jpg) get decode/aspect/not-solid checks; an .srt passed as --path is validated as the deliverable itself. If any mechanical check fails, the verdict is at best needs-fix — stop and report it. Unknown file types must fail supporteddeliverabletype`; file existence by itself is never confirmation. Learned tool outputs must declare a supported media/image/SRT/JSON artifact contract before they can advance.
- Probe the applicable adversarial classes (the part a log hides). For a
video deliverable, check those that apply: - blankframes — sample the last 2s (ffmpeg -sseof -2 -i <f> -frames:v 1 …) and confirm it isn't black after the intended end. - durationdrift — output length vs intended span. - wrongaspect — 1080x1920 for shorts; source aspect for long/edited. - cutoffbyone — first/last kept span doesn't start mid-clause or end before the payoff (read the transcript around the boundary). A final cue that contains the opening words of the NEXT sentence (e.g. ends on "and then we …") is a REAL defect — verdict needs-fix with the corrected end time from word-level timestamps, not an acceptable teaser. - stalerender — file mtime is from THIS run, not a previous one. - audiodesync / silentaudio — audio present and not silent; subs aligned. - srtinvalid — no zero-length / overlapping / out-of-order cues. - misleading_success — manifest says ok while the artifact is wrong. Record each as applicable/not-applicable with a one-line observable reason — never silently skip.
- Verdict —
confirmedONLY when mechanical passes AND every probed class is
clear. Otherwise needs-fix (you can name the fix), or needs-human-review (editorial judgment call), or false-positive (the claim was wrong).
Return (final message = JSON only)
{
"role": "verifier",
"deliverable": "...",
"verdict": "confirmed | needs-fix | needs-human-review | false-positive",
"mechanical_pass": true,
"evidence": "<PROJECT>/evidence/<name>.verify.json",
"adversarial": [
{"class": "blank_frames", "applicable": true, "observable": "last-frame sample non-black", "ok": true},
{"class": "cut_off_by_one", "applicable": true, "observable": "starts on 'So' (sentence start)", "ok": true}
],
"required_fix": null,
"confidence": 0.0
}
confirmed is the only verdict that lets the orchestrator advance. End your message with EVIDENCE_RECORDED: <evidence path> so the stop-hook can confirm you produced real evidence, not a "should be fine".