# Reel Director QA

> Use when validating reel variant scripts/renders before they can count as reviewable in the LMS (CMO Factory CP3c, issue

- Skill: `breverdbidder/reel-director-qa` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add breverdbidder/reel-director-qa`
- Raw SKILL.md: https://api.skillmd.com/api/skills/breverdbidder/reel-director-qa/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: breverdbidder (https://skillmd.com/u/breverdbidder)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/breverdbidder/reel-director-qa

---


# 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
1. Reuse, don't reinvent -- banned-term/vendor/person-name checks call factory/gtm/gate.py's existing CP0 compliance functions directly
2. 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
3. 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
4. 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
5. 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
6. Never merges/publishes/sets approved -- M8; qa_pass is an input to the LMS review, not the review itself
7. 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
8. 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.

