format-whistleblower — the insider confesses, the mom is cleared
1. Read first
knowledge/ad-formats/_FORMAT-CORE.md(doctrine, lane limits, gates, launch). Binding.references/beat-sheet.md(skeleton + line rules),references/sources.md(reference ads + receipts).output/dawn-combo-map-2026-10-05/MAP.md§1-2A (stake on her; credible person inside the story; vindication payoff).- Stake bank
output/creative-strategy-cooper-2026-10-05/dawn-stakes.md(#3-#7 school/legal rows) and its raw banksstakes-raw-owned.md/stakes-raw-external.md. knowledge/brands/dawnbands/product-truth.md(facts),claims-register.md(claims unlocked, school-staff authority allowed). Thevoc-*.md,root-cause.mdandobjection-map.mdfiles are compatibility pointers with no current content; use the stake bank,knowledge/brands/dawnbands/research/customer-evidence-2026-09-15.mdandknowledge/brands/dawnbands/research/voc-blame-2026-10-04/instead.- Closest built precedent:
output/concept-packs/dawnbands-s2-attendance-office-h1-2026-10-01.md(the Clerk as the explainer, mom narrating; live in ad set 120249989091270232, verdict 10-08). - Sibling:
skills/format-spoken-drama/(the same story with mom narrating is the control arm for this format's test).
2. When to use / when not
- Use to test a new POV on recipe A: the credible person inside the story becomes the narrator. Use it when the concept's strongest asset is an outsider's verdict on the mom ("it was never her"), or when a mom-narrated story is fatiguing and you want a fresh voice on the same proven beats.
- Evidence status: untested on Dawn. Signals: Foreplay #2 (Resilia, 3:42 masked confessional) and #5 (Azure insider exposé, 3:10) are both scaling long-form; REPORT §3 rates the whistleblower "Medium" for Dawn with the attendance-officer insider. Recipe A's authority row (MAP §2A) says a person INSIDE the story pays in story formats (exhibit A's nurse, 2.48 ROAS).
- This changes the "mom first-person" rule. Every Dawn song winner is mom-1st POV; the brand-voice song did 0.72. So the insider POV ships only as a one-variable POV test against a mom-narrated arm (§11), and mom stays the subject: the insider tells HER story, mom is on screen in most body shots, her verbatim line is quoted, and the payoff is her vindication.
- Resolved conflict with
diff_podcast_dialogue.md§2 ("taboo/masked-confessional personas: don't adopt"): the taboo/shock persona is out (mistress, cheater, villain, anyone whose confession is a sin). The insider-confession STRUCTURE with an obscured face is in: a sympathetic professional admits something against her own institution. That is a credibility device, not a shock device, and it carries none of the policy risk the diff flagged. - Don't use for callout/brand-voice angles (recipe B), with a kid or dad as the subject (stake must land on her), as a testimonial ("I recommend this band"), or as a made-up founder/brand insider (REPORT §3: deceptive, skip).
3. The format
- 9:16, 60-180 s (Test 1 target 90-150 s). One narrator: the insider, an EL voice, ~80-95% of the words. Optional: MOM 1-3 short lines in her own voice; optional off-screen interviewer
[Q]with ≤2 questions at the pivots. - Her face is never seen. Silhouette against a lit window, back-lit in a doorway, face in shadow, back of head, hands only. That is the genre (anonymous insider) and it removes the lip-sync problem in both lanes.
- Captions from the script on every word; hook overlay (pack
title:) on frame 0, e.g. a role label; motion end card (optional,--end-card; off by default per Fish 10-06) (end_card:). - Animated (default): cartoon-h3 narrator lane, one style per ad (pixar / disney3d / claymation / paper / bergamot), anchored on a paying winner frame. No gates beyond core.
- Photoreal: ugc-omni is the engine (Fish 10-06): the insider is a silhouette A-roll frame speaking in Omni's native voice; mom is the job's
avatarso her b-roll keeps one identity; gates G0-G4 (§10). Job shape:references/omni-job.example.json(illustrative). "Dramatization" label (Fish 10-06). - Reference shape: Foreplay
02_whistleblower(Resilia): provocative confession hook → reframe → what she sees → the pivot to the hidden cause → product → CTA. Ours keeps the confession hook, the hidden-face staging and the "hidden cause, not a character flaw" turn; it swaps the taboo persona for a sympathetic insider and puts the stake on the mom.
4. Why it sells
- Statement against interest. An insider who admits her own system blames the wrong people is believed more than a brand or a mom defending herself. The confession does the vindication work before the product appears.
- Recipe A with the explainer promoted to narrator: stake on HER (the letter has her name on it) → humiliation she can't argue her way out of → the credible insider says it was never her → root cause → mechanism → mom cleared. The product is how the insider saw that mom's mornings change, not a pitch.
- Problem-aware: lines 1-2 name the mom by an observable symptom (the late slip at 8:20, the robe, the third letter) from the insider's side of the counter. Mom watching recognises herself through someone else's eyes, which is the closest a story format gets to recipe B's recognition opener.
- Concept formula: proven structure (recipe A story beats) + verbatim customer line (mom's line, quoted by the insider) + a belief she holds ("they think I'm a bad mom") + the buyer who converts (mom 35-54, school-age kid, truancy/late-slip pressure). Must fail the competitor-swap test: the insider's vantage and the mechanism are ours, not a rival's.
5. Beat sheet (full rules in references/beat-sheet.md)
| Beat | % runtime | Job | Must contain |
|---|---|---|---|
| 1 Confession hook | 0-8 | Stop the scroll on her | An against-interest admission + the mom named by a symptom; the role is clear by line 2; no backstory |
| 2 What I see every morning | 8-28 | Prove the pattern is real | Concrete counts/times from the insider's vantage; the moms, not the kids, carry it; generic failed solutions the moms tell her |
| 3 The wrongly-blamed parent | 28-50 | Put the stake on HER | One specific mom; the blame lands on her (letter in her name, meeting, CPS mention, family); her verbatim VOC line quoted |
| 4 The real cause | 50-65 | Root cause + clear her | Fish's ruled root-cause line verbatim; "it was never her"; how the insider knows |
| 5 What works | 65-88 | Mechanism + product + payoff | Touch gets through; silent to everyone else; keeps going until he turns it off; product named once; the insider sees that mom on time / cleared |
| 6 Offer | 88-100 | CTA | Product name + 60-night wake-up guarantee; the insider's closing wish (fewer letters to sign); end card (optional, --end-card; off by default per Fish 10-06) |
6. Pack spec
-
Step 0 — combo plan (feedback loop,
workflow-combo-loop):python3 scripts/combo_loop/plan.py --format format-whistleblower --brand dawn→ pick one combo (a paying parent + ONE changed dimension) and paste its block into the pack front matter / job or spec JSON ("combo": {...}; no file →tags.py register --prefix):combo_avatarcombo_anglecombo_povcombo_authoritycombo_stakecombo_stake_oncombo_emotioncombo_root_causecombo_mechanismcombo_payoffcombo_devicecombo_formatcombo_parentcombo_variablecombo_ad_prefix(= the launched Meta ad-name prefix).python3 scripts/combo_loop/tags.py check <pack>must PASS before concept approval; the weekly refresh reads results back by that prefix. -
Front matter:
format: cartoon-h3,format_skill: format-whistleblower,brand: dawnbands,created,status,parent:(the mom-narrated ad this mirrors, with CPA/ROAS),iteration: "POV: mom narrator -> insider narrator, same story",title:(hook overlay,|= line break),overlay:(carried for reskin; the rendered overlay istitle:),end_card:,style,style_key,style_block,visual_negative,style_anchor,cast,envs,product_truth. Copyproduct_truthfromoutput/concept-packs/dawnbands-song-nottardy-2026-10-04.md(display OFF and dark in every shot), never from the 10-01 attendance-office packs ("top face that can glow"). - Narrator-only pack (default): no speaker tags;
elevenlabs_voice_id: <insider voice>(pack.py takes it before anyMOMvoice, then falls back toprofiles/dawnbands.toml, which is the mom voice; so set it). - With MOM or [Q] lines: tag every line,
voices: INSIDER=<id>, MOM=<id>[, Q=<id>], and the dialogue pace keys from core §5 (vo_tempo: 1.08,gap_same: 0.15,gap_turn: 0.3,max_gap: 0.22,seam_gap: 0.25, the 10-01 values that passed vo_check). Dialogue packs are checked on the stricter DIALOGUE profile. - Hooks:
body_start:= first line of beat 2 so 3 confession hooks share one body. ## VO Script:N. "line"orN. [SPK] "line", one sentence per line, 5-14 words.## Scene visual intents:N. **role** — <env>: <who is on screen, doing what, framing>. Every INSIDER line states her obscured staging (silhouette / back / shadow / hands) or a cutaway of what she describes; product lines carry the wrist rule (the band words trigger product handling viaPRODUCT_IN_FRAME_RE).- Cast: INSIDER (role, age 45-65, a silhouette sheet: hair outline, cardigan, lanyard shape, glasses-chain glint, mug) + MOM (35-54, fully lit, the avatar) + KID (11-17, vary age/gender) + optional the accuser (school letter, husband). Keep the insider and mom visually distinct (build, hair, outfit colour); they're not similar-age twins.
- Envs: 4-6 reusable sets: the insider's post (attendance office counter + window, nurse's office, bus driver's seat at dawn, the truancy officer's car), the mom's kitchen, the kid's bedroom, the stairs, the school hallway.
7. Visual grammar
- Insider on camera = obscured, always: (a) silhouette against a bright window with blinds; (b) back-lit in a doorway or at the counter with the hallway lit behind her; (c) over her shoulder from behind, looking out at the mom/parking lot; (d) hands-only inserts (stamping a slip, a stack of letters with a red stamp shape, hands around a mug, the bus door lever); (e) face turned away in profile in deep shadow. Never a lit face, never a close-up with features.
- Keep the frame bright. Silhouette means a dark figure on a LIT background. A dark room fails assemble's luma receipt (
frames_under_yavg8) and clipqa's black-frame check (<8). - Mom is fully lit and readable and carries the emotion: on screen in ≥50% of beat 3-5 shots. Her lines (if voiced) are staged per spoken-drama §7 (listener, back, profile, phone).
- Narration lines = show the thing described, literally (fever-dream literal rule): a line about the robe shows the robe at the counter.
- No lip-sync (core §3) is a non-issue here: the insider's mouth is never visible. Never add "mouth moving" to an INSIDER intent (the 10-01 S2 pack did that for its Clerk; don't copy it).
- Product only from beat 5. Wrist down or resting, band side-on, display dark; the buzz = the kid's eyes opening + small motion lines at the wrist. Never a raised wrist, lit face or smartwatch.
- No readable text: letters = shapes with a red stamp, late slips = pink rectangles, clocks with hands only, no school name, no badge text.
8. Audio
- Insider voice (EL): 45-65, calm, low, a little tired, certain; confiding, not dramatic, not a villain, not a news anchor. Contrasting with the mom voice (warmer, younger). The 10-01 Clerk voice (
BeydSYsiEvkOxDwdvf89) is the first audition; Fish picks. - Pace: narration ≥3.4 wps overall (vo_check NARRATION floor), dead air ≤0.4 s. Hook lines may use
hook_tempo(synthesis speed, never a post-stretch). Never fix a line by speeding it; split it or redo the take. - One ducked music bed (assemble default), low and sparse (confessional room tone, soft piano). No hits, no swaps. One soft buzz SFX on the wake moment only if it doesn't mask words.
- End card (optional,
--end-card; off by default per Fish 10-06) 3 s (end_card:;end_card_secsto change).
9. Production
Animated (free until gate 4):
P=output/concept-packs/<slug>.md # <slug>.args: --char-ref "insider=<png>" --char-ref "mom=<png>" --env "<room>=<png>" --characters "the insider, Mom and <kid>"
A=(${(z)"$(python3 -m scripts.cartoon_h3.packargs $P --storyboard)"}); A=(${(Q)A}) # core §5; re-run without --storyboard once sheets exist
python3 -m scripts.cartoon_h3.run "${A[@]}" --stage vo # EL VO + vo_check gate (EL quota)
python3 -m scripts.cartoon_h3.run "${A[@]}" --stage storyboard # free
python3 -m scripts.cartoon_h3.sheet <out.png> <prompt.txt> [ref.png ...] # each sheet PAID ~$0.15-0.30, after Fish's go
touch output/cartoon-h3/<slug>/storyboard.approved # Fish only
python3 -m scripts.cartoon_h3.run "${A[@]}" --stage canvas # image-gen role (registry), paid ~$0.22/batch
python3 -m scripts.cartoon_h3.run "${A[@]}" --stage gen --prompts-only # Fish reviews motion prompts
python3 -m scripts.cartoon_h3.run "${A[@]}" --stage gen --spend --backend fal --model h3-max --batches 1 # smoke, then the wave
python3 -m scripts.cartoon_h3.run "${A[@]}" --stage assemble # + (optional end card) + gemini_qa
- The insider sheet is a silhouette/back-view character sheet (hair outline, clothes, posture, props), never a face portrait; mom and kid get normal sheets. Product sheet = cartoon product ref + one buyer wrist photo (cartoon-h3 rule 9).
- Cost (animated, 10-04 ledger scale): a 2:00 cut ≈ 12 batches ≈ 160 billed H3 s incl. regens = ~$8-13 H3 ($0.05/s table vs the likely real $0.08/s; read the fal page before quoting) + ~$4 canvases + new sheets ~$0.15-0.30 each + EL quota. Check fal / Higgsfield / kie balances first.
- Shot tiers (core §2b) + draft→final (core §4 gate 6b). Tag every batch A/B/C before approval: run.py does it itself (
scripts/cartoon_h3/tiers.py, alsopython3 -m scripts.cartoon_h3.tiers <run>: A = first batch/hook, reveal/CTA/product beats, 3+ characters in a shot; C = no person in any shot; else B) intoplan.json+<run>/tiers.mdwith the per-batch fal cost; re-tag in review if the word match is wrong. Per-tier models:run.py --tier-models "A=h3-max,B=h3-max,C=h3"(fal only; default =--modelfor every tier, i.e. all H3-max).h3on B/C is a candidate until a one-batch side-by-side passes Fish's eye (registry "How to adopt"). Draft→final:run.py --draft= 480P ($0.05/s vs $0.08/s at 768P, fal page re-read 10-06) into<slug>-draft, seeded from the approved run (VO, plan, approval, canvases), never the shared-body cache, no upscale/end card (optional,--end-card; off by default per Fish 10-06); it prints the native 768P re-render command for the approved batches. Finals re-render natively, never a 480P→--hdupscale (Fish judged native sharper 10-04). A re-render is a new sample: judge staging and prompts on the draft, not the exact take.
Photoreal (ugc-omni; skills/ugc-omni/SKILL.md owns the engine, read it, never edit it; every paid step dry-runs until --spend):
- Job shape (references/omni-job.example.json): style: photoreal, mode: cuts, aroll_model: flash, resolution: 1080p, image_arms: ["gpt2", "sd5"], product_refs: ["@dawn"], product_truth with ugc-omni's display-off sentence, plus core §5 keys and label: "Dramatization".
- Frames: avatar = MOM (fully lit; b-roll uses her as the identity ref, a different outfit per shot, KJ); insider = the silhouette frame (seated before a bright window, face in shadow). Every INSIDER pack line → lines[] entry with frame: "insider", visual: "AI UGC", or "broll:<id>" for the literal cutaway of what she describes (her voice runs under it). MOM's voiced lines (if any) → frame: "avatar".
- prompt.scene: "Static locked-off shot, UGC iPhone footage of a woman seated in front of a bright window, her face in shadow and unreadable, only her outline and hands visible. She stays still and talks quietly, confiding." says: "The woman says:"; rules end "One take, no jump cuts. Same avatar, same location, same camera framing. Do not recompose the shot. No captions, subtitles or on-screen text." Never "mouth moving" or "eye contact" for her.
- Product (beat 5 only): broll.<id> with product: true, display: "off", band worn on the kid's wrist (wrist down/resting, close); gated by pick --name broll_<id> --product; real footage = fallback (copy the clip to <job>/broll/<id>.mp4).
- Hooks: hook + end_frame: "insider" on each hook line.
O=scripts/ugc_omni/omni.py; J=output/ugc_omni/<slug>
python3 $O board --job $J # G0: structure clean ("not picked yet" only) → Fish
python3 $O refscan --job $J --src <real mom creator video>; python3 $O ref --job $J --pick $J/ref/<cand>.jpg
python3 $O avatar --job $J --n 3 --arms gpt2,sd5 [--spend]; python3 $O pick --job $J --name avatar --file $J/avatar/<pick>.png
python3 $O ref --job $J --pick <real back-lit/silhouette frame, picked by eye> # refscan's face detector can't rank silhouettes
python3 $O avatar --job $J --n 3 --arms gpt2,sd5 [--spend]; python3 $O pick --job $J --name insider --file $J/avatar/<pick>.png # G1
python3 $O lock --job $J --line H1-1 --frame insider --n 3 [--spend]; python3 $O lock --job $J --approve $J/lock/<take>.mp4 # G2
python3 $O gen --job $J --lines all [--spend]; python3 $O verify --job $J # G3
python3 $O broll --job $J --id <id> --stage frame [--spend]; python3 $O pick --job $J --name broll_<id> [--product] --file <png>; python3 $O broll --job $J --id <id> --stage anim [--spend]
python3 $O assemble --job $J --hook H1; python3 $O cost --job $J; python3 scripts/meta_preflight.py $J/final/<slug>-H1.mp4 # G4
- Cost (kie): Omni buckets $0.315 / $0.42 / $0.525 / $0.63 for 4 / 6 / 8 / 10 s; images ~$0.05 (gpt2) - $0.075 (sd5). A 2:00 cut ≈ 30 insider lines ≈ $12-14 + ~10 b-roll ≈ $4.5 + frames ≈ $1.5 + lock ≈ $1.3 → ~$25-30 with regens. No draft→final step (the G2 3× lock is the proof); every A-roll take is Omni, tiers only pick b-roll. Pass
--arms gpt2,sd5(omni.py's default still lists nbp).
10. Gates & QA checklist
- [ ] Parent named with CPA/ROAS; iteration = POV only; the control arm exists or is built in the same style (§11).
- [ ] Insider = a role, not a named or real person; no real school, district, hospital or badge text; not a founder; not a taboo persona.
- [ ] Hook = an against-interest admission + mom named by a symptom in lines 1-2; no backstory.
- [ ] Mom's verbatim VOC line quoted (cite file + id); stake lands on her and the mornings caused it.
- [ ] Root-cause line verbatim from Fish's ruled lines; mechanism lines present; product facts match product-truth.md (three alarms, no app, dark LED display, 60-night guarantee); no price spoken unless checked live today.
- [ ] Red-team pass done (who could know what, would an insider really say this, timeline math, product facts).
- [ ] Every INSIDER intent is obscured staging or a cutaway; no "mouth moving"; every frame bright enough (no dark-room silhouettes).
- [ ] Mom on screen in ≥50% of beat 3-5 shots; no product before beat 5; wrist rule in every product intent; no readable text.
- [ ] vo_check PASS; Fish listened. Storyboard approved; motion prompts reviewed; balances checked before
--spend. - [ ] Dramatization, not testimony: the insider is a written character (no verbatim school-employee VOC exists). Never caption, title or primary-text her as a real person ("real school clerk", "anonymous nurse tells all"). Photoreal arm: "Dramatization" label on-screen or in primary text (Fish 10-06), and the insider is never a real creator's likeness (genetic change on the ref).
- [ ] Photoreal only = ugc-omni G0-G4, every gate Fish's: G0 script + hooks +
board(no paid step before it) → G1 mom ref + avatar, insider silhouette ref (by eye) + avatar (face unreadable in every roll) → G2 lock: one insider line good 3× (the 9-30 motion proof) → G3 every line watched (verify), b-roll + band checked by eye (pick --productpassed or real footage) → G4 the assembled cut by eye and ear. - [ ] Every batch tagged tier A/B/C in
storyboard.md; any draft→final pass followed §9's route (drafts never left in a shared-body cache). - [ ] Placement preview (starpop facebook-instagram-ad-sizes-and-safe-zones, how-to-preview-a-facebook-ad-before-publishing): scrub to the hook frame, the reveal frame and the end card (optional,
--end-card; off by default per Fish 10-06) on a 9:16 overlay; header, captions, product and offer sit inside Meta Reels' safe box (top 14 %, bottom 35 %, sides 6 % are UI = keep content in y 14-65 %) and survive the Feed 4:5 centre crop (~15 % lost top and bottom). Remotiontiktok/tiktokbox/dragoncaptions centre at ~68-74 % = inside the Reels bottom band on Meta: flag it to Fish, never re-burn on your own. - [ ] Final: freezes 0, dark 0, captions from script, end card only if
--end-cardwas asked (off by default, Fish 10-06), Fish watched it.
11. Variants & test plan
- Test 1 (the reason this format exists): insider POV vs mom POV, one variable. Same story, beats, stake, style, length (±10 s) and end card (optional,
--end-card; off by default per Fish 10-06); arm A = mom narrates (a format-spoken-drama or narrator cut of the same story), arm B = the insider narrates. Never read the insider cut against a SONG parent: that changes POV and audio form at once. If the control doesn't exist, build both; budget two cuts. - Own ad set per arm in Testing CBO, same settings; read CPA and hold rate (ThruPlays / 3 s views) at 7 days, not CTR alone. Never judge <7 days; never pause, reduce spend.
- 3 confession hooks per body (
body_start): (a) the admission ("I sign the late letters. I send most of them to the wrong parent."), (b) the stake in her name (the letter has the mom's name, not the kid's), (c) the moment she saw it (the mom in her robe at 8:20, crying at the counter). ILLUSTRATIVE. - Then one variable at a time: insider role (attendance clerk → truancy officer → school nurse → bus driver → pediatric sleep nurse), stake (MAP §3 order: truancy letter → CPS → own kid → boss), execution (animated vs photoreal, only after the animated arm reads), interviewer
[Q]on/off. - Graduation per
feedback_graduation_rule; record the launch inproject_launch_<date>_<slug>.md. - AI label as a confound (starpop are-ai-generated-ads-allowed-on-meta): Meta labels some ads with AI photoreal people ('AI info', more prominent beside Sponsored) and is starting to detect third-party AI from file signals.
meta_preflight.pystrips file metadata, so expect detection to miss, not clear, the photoreal arm. Record whether each live arm shows a label before reading animated vs photoreal, or the label is a second variable. - Upload hygiene (starpop are-ai-generated-ads-allowed-on-meta): Advantage+ creative enhancements stay OFF (Meta's tools have added music and altered products on finished ads). The launchers copy
degrees_of_freedom_specfrom a model ad and silently drop it if that post fails, which falls back to Meta's defaults: check the created creative. Day 1: open the live preview in Feed AND Reels for added music, re-crops or altered frames.
12. Failure modes
- Reads as a testimonial ("I recommend…") → testimonial pairings are the weakest Dawn pattern (MAP §2B); she tells a story about one mom, never reviews the product.
- The confession blames the kid or the mom → the stake has to land on her through others' blame, and the insider clears her. Rewrite.
- Insider sounds like a villain or a news anchor → the audience doesn't trust her; calm, tired, kind.
- Insider face drawn or lit by H3 → re-intent to back/silhouette, regen that batch with
--regen N. - Dark-room silhouette → luma fail; put the light behind her.
- Insider identity drifts between batches → no face to anchor; anchor the silhouette sheet (hair outline, cardigan colour, lanyard, mug) and repeat the env.
- Mom disappears from the body → the POV test becomes a brand-voice test; put her back on screen.
- Lit band on the wrist → wrist rule; regen with wrists down.
- Photoreal:
refscanuses a frontal-face detector and finds nothing in a silhouette frame; pick the insider reference by eye (ref --pick). Image arms--arms gpt2,sd5(Nano Banana retired 10-06). Insider's face lit in a take → add one shadow clause toprompt.rulesand re-lock. Never use blur or shadow to sneak a face past a provider's likeness filter; the silhouette is the genre, not a filter workaround (switch route if refused). - Old price in VO → the 10-04 price test changed the price; don't say a price in VO.
- Not built yet (needs Fish's go): an on-camera native-speech mode in cartoon-h3 (not needed here); no Dawn insider VOC is verbatim from a school employee, so the insider's lines are written, and only the mom's quoted line is verbatim.
13. Sources
~/research/davidaistar/REPORT.md §2.5 + §3 rows 2/5; foreplay/02_whistleblower.gemini.md, 05_founder.gemini.md, 08_authority.gemini.md; analysis/diff_podcast_dialogue.md, diff_copy.md, diff_ai_ugc.md; MAP.md; dawn-stakes.md + raw banks; research/voc-blame-2026-10-04/thread_1de6jwp.txt; product-truth.md; claims-register.md; survey-intel 09-04; cartoon-h3 SKILL.md + scripts/cartoon_h3/{run,pack,vo,vo_check,assemble,clipqa,sheet}.py; ugc-omni SKILL.md + scripts/ugc_omni/omni.py; feedback_ai_avatar_broll_lane; 10-01 attendance-office pack + launch memory. Detail in references/sources.md.
Not built yet (needs Fish's go)
- Not built yet (needs Fish's go): an on-camera native-speech mode in cartoon-h3 (not needed here); no Dawn insider VOC is verbatim from a school employee, so the insider's lines are written, and only the mom's quoted line is verbatim