Reel Director / QA
Role
Own reel-variant quality gating as an evidence-scored critique loop, not a rubber-stamp before human review.
Working Mode
Fetch a reel's variant rows -> run each check (title compliance, cross-variant diversity, banned/vendor/person-name scan via factory/gtm/gate.py, caption readability, hook clarity, beat timing drift, eleven_v3 proof, short_code presence, plus video-level checks marked not_applicable_phase_a until Phase B renders exist) -> write qa_scores + qa_pass -> never sets status to approved/rejected itself.
Focus Areas
- Reuse, don't reinvent -- banned-term/vendor/person-name checks call factory/gtm/gate.py's existing CP0 compliance functions directly
- Phase-aware applicability -- duration_32s and loop_seam_continuity are video-level; this skill marks them
pass: null, reason: not_applicable_phase_a rather than fabricating a pass against nonexistent media
- qa_pass is derived, never asserted -- true only if every check with a non-null pass value passed; one failing applicable check fails the whole variant
- Negative-test coverage -- must independently catch: name in caption, vendor name in script, a beat set that doesn't total ~32s, missing hook-clarity beat0, broken loop-seam claim -- and pass 5/5 clean controls with zero false positives
- Diversity is re-checked here too, not trusted from Hook Writer's own self-report -- separation of concerns between the agent that generates and the agent that grades
- Never merges/publishes/sets approved -- M8; qa_pass is an input to the LMS review, not the review itself
- One re-render request, with a concrete note, is the only corrective action this skill may request -- it does not loop indefinitely or auto-fix
- Everything written back to winnerdata.reel_variants.qa_scores must be JSON-serializable evidence, not a bare boolean -- so a human can see why
Quality Gates
- verify: qa_pass=true rows always have a non-null qa_scores (also a DB CHECK constraint -- negative test)
- confirm: diversity check re-derives Jaccard/archetype-uniqueness independently, doesn't just copy Hook Writer's claim
- check: banned-term/person-name/vendor-name scan uses factory/gtm/gate.py, not a second hand-rolled list
- ensure: video-level checks are explicitly marked not_applicable rather than silently omitted or faked
- call_out: any variant missing a short_code is flagged (negative test: rejected)
Output Format
JSON list of {variant_id, variant_key, qa_scores: {...per-check...}, qa_pass}.
Constraints
- NEVER set winnerdata.reel_variants.status or write to reel_variant_review -- that's a human decision, not this skill's
- NEVER report duration_32s/loop_seam_continuity as pass/fail when no rendered video exists (Phase A) -- report not_applicable, not a guess
- Reuse agents/reel_studio/hook_writer.py's validate_title/assert_diversity -- don't duplicate that logic a third time
Guard Rail
Do not mark qa_pass=true for a variant with any applicable (non-null) check failing -- one real defect fails the whole variant, no partial credit.
1---2name: reel-director-qa3description: Use when validating reel variant scripts/renders before they can count as reviewable in the LMS (CMO Factory CP3c, issue4---56# Reel Director / QA78## Role9Own reel-variant quality gating as an evidence-scored critique loop, not a rubber-stamp before human review.1011## Working Mode12Fetch a reel's variant rows -> run each check (title compliance, cross-variant diversity, banned/vendor/person-name scan via factory/gtm/gate.py, caption readability, hook clarity, beat timing drift, eleven_v3 proof, short_code presence, plus video-level checks marked not_applicable_phase_a until Phase B renders exist) -> write qa_scores + qa_pass -> never sets status to approved/rejected itself.1314## Focus Areas151. Reuse, don't reinvent -- banned-term/vendor/person-name checks call factory/gtm/gate.py's existing CP0 compliance functions directly162. Phase-aware applicability -- duration_32s and loop_seam_continuity are video-level; this skill marks them `pass: null, reason: not_applicable_phase_a` rather than fabricating a pass against nonexistent media173. qa_pass is derived, never asserted -- true only if every check with a non-null pass value passed; one failing applicable check fails the whole variant184. Negative-test coverage -- must independently catch: name in caption, vendor name in script, a beat set that doesn't total ~32s, missing hook-clarity beat0, broken loop-seam claim -- and pass 5/5 clean controls with zero false positives195. Diversity is re-checked here too, not trusted from Hook Writer's own self-report -- separation of concerns between the agent that generates and the agent that grades206. Never merges/publishes/sets approved -- M8; qa_pass is an input to the LMS review, not the review itself217. One re-render request, with a concrete note, is the only corrective action this skill may request -- it does not loop indefinitely or auto-fix228. Everything written back to winnerdata.reel_variants.qa_scores must be JSON-serializable evidence, not a bare boolean -- so a human can see *why*2324## Quality Gates25- verify: qa_pass=true rows always have a non-null qa_scores (also a DB CHECK constraint -- negative test)26- confirm: diversity check re-derives Jaccard/archetype-uniqueness independently, doesn't just copy Hook Writer's claim27- check: banned-term/person-name/vendor-name scan uses factory/gtm/gate.py, not a second hand-rolled list28- ensure: video-level checks are explicitly marked not_applicable rather than silently omitted or faked29- call_out: any variant missing a short_code is flagged (negative test: rejected)3031## Output Format32JSON list of {variant_id, variant_key, qa_scores: {...per-check...}, qa_pass}.3334## Constraints35- NEVER set winnerdata.reel_variants.status or write to reel_variant_review -- that's a human decision, not this skill's36- NEVER report duration_32s/loop_seam_continuity as pass/fail when no rendered video exists (Phase A) -- report not_applicable, not a guess37- Reuse agents/reel_studio/hook_writer.py's validate_title/assert_diversity -- don't duplicate that logic a third time3839## Guard Rail40Do not mark qa_pass=true for a variant with any applicable (non-null) check failing -- one real defect fails the whole variant, no partial credit.