format-warehouse — the pile is the proof, her morning is the story
1. Read first
knowledge/ad-formats/_FORMAT-CORE.md(doctrine, lane limits, shot tiers §2b, gates, launch) andknowledge/ad-formats/_MODEL-REGISTRY.md(roles → models). Binding.references/beat-sheet.md(skeleton, word budgets, footage-truth table, shot tiers, grounding procedure),references/sources.md(evidence status, what was checked, receipts).- Lane:
skills/vo-broll/SKILL.md(EVOLVE: 3 hooks + 3 bridges, ONE shared hold + CTA, ≤45 s, no talking heads) andskills/vo-broll/references/production-handoff.md(clock + footage laws, runner gaps). EVOLVE structure is binding inside this lane; this skill adds the warehouse layer on top. - Brand:
knowledge/brands/dawnbands/product-truth.md(facts),knowledge/brands/dawnbands/claims-register.md(claims unlocked 10-02),output/dawn-combo-map-2026-10-05/MAP.md§2B (recipe B), copy rulesknowledge/evolve/copywriting-rules.md. - Memory:
reference_dawnbands_packaging.md(POUCH, not a box),project_dawnbands_broll_seedance_playbook.md(b-roll prompt formula),project_vo_broll_lane.md(lane history),feedback_guarantee_positioning.md,feedback_ai_avatar_broll_lane.md(photoreal gates).
2. When to use / when not
- Use to test demand/social proof as the frame of a recipe-B video: brand voice straight to her, her daily burden, root cause + mechanism, social proof + guarantee as the authority, kid-independence payoff. Also when Fish wants a cheap, faceless, product-heavy video that needs no actor.
- Evidence status: UNGROUNDED. Fish's format #11 link was a duplicate of #10 (
foreplay/links.txthas no 11; REPORT.md: "#10 and #11 are the same link"), and10_character_argumentsis the Penrose lotion-vs-cologne debate, not a warehouse ad. This framework is built from how the format commonly runs plus our own data. Ground it with §11's step the moment Fish sends the right link. - What Dawn data says about the parts (MAP aggregates,
aggregate.txt): social-proof authority in statics $17,469, ROAS 1.83 (4 W / 1 L) vs borrowed-person $27,569, 1.50 (5 W / 3 L); in songs social-proof is 1 ad, $182, 0.72. "Proof-led" angle = 1 ad ($468). Guarantee-led headlines lost (feedback_guarantee_positioning). HiStrips saturates "tested on 10,000+" claims, so a demand number alone fails the competitor-swap test. - Don't use for recipe-A stories (accuser, vindication: format-song / format-spoken-drama), for an ad that is ONLY the warehouse (character-less explainer VO = 0 purchases, core §1 don't-build), for fake scarcity, or for any line that presents AI/stock footage as Dawn's real facility or staff.
3. The format
- 9:16, 30-45 s (vo-broll cap 45 s). Brand-voice narrator ("we") talks straight to her. Picture alternates two worlds: the packing room (pouches stacked on wire shelving, hands packing, a counted pile, the band buzzing on the bench) and her morning (the closed door, her third knock, the kid asleep, then the kid up on his own).
- Split rule: packing-room footage ≤50 % of runtime; her morning ≥40 %. The warehouse is the proof, never the story.
- Captions from the script on every word; a hook headline on frame 0 held ≤3 s; end card (optional,
--end-card; off by default per Fish 10-06) ≤2 s under the last "tap below" phrase (handoff clock law 5). - Three executions (pick one per ad; the choice is the test variable, §11):
- W1 faceless packing room (default): hands only, no faces, VO + b-roll on the vo-broll lane.
- W2 animated packing room: cartoon-h3 narrator; reads as illustration, so "this is our packing table" is fair storytelling.
- W3 on-camera packer/founder (test cell): a person says the lines. It's a borrowed person (statics 1.50). Production = ugc-omni (THE photoreal engine, Fish 10-06; gates G0-G4, §10); job shape
references/omni-job.example.json. Unnamed, never a real employee's name, never billed as a real staffer; "Dramatization" label (Fish 10-06). - Reference shape (UNGROUNDED): closest analysed ad is
05_founder(Azure Batana, 3:10: insider spokesperson + fast b-roll, cut back to the speaker every 3-4 s, mechanism, mother-proof, BOGO + guarantee). We keep the fast b-roll and the proof-then-offer close; we drop the talking spokesperson (W1) and the 3-minute length.
4. Why it sells
- Mechanism: volume = other parents already solved this, so she's not the only one and it isn't a gamble. A sophisticated market discounts promises but still responds to proof moments (
feedback_guarantee_positioning). The pile is a proof moment she can see. - Recipe B (MAP §2B): brand voice, her daily burden, exhaustion → relief, authority = social proof + guarantee + science (never a borrowed person in W1), payoff = kid independence or calm mornings.
- Why the warehouse alone isn't enough: "10,000 parents ordered it" is the leader's claim too. The swap-proof part is OUR root cause + mechanism lines over our footage (the band shivering silent on the bench while the room stays quiet). Concept formula still applies: proven structure + verbatim VOC line + her belief + the buyer who converts.
- Awareness: problem-aware. Lines 1-2 name HER by an observable symptom. "We can't keep these in stock" alone is a mystery opener and fails the core awareness gate.
5. Beat sheet (full rules, word budgets, shot list in references/beat-sheet.md)
Budget 30-45 s at ≥3.0 wps (lane floor) ≈ 100-150 words. Slots are ceilings; the voice sets the clock (handoff law 1).
| # | Beat (EVOLVE slot) | Time | Job | Must contain |
|---|---|---|---|---|
| 1 | Hook ×3 (hook) | 0-3 s | Stop her on her own symptom + the pile | 3-7 words; names her situation; demand number optional in the VO; picture = her morning (door, knock, asleep kid). A pouch/band shot at 0 s breaks Fish's 8-15 rule (no product b-roll before the reveal, enforced in vo_broll_runner): Fish-gated variant only |
| 2 | Bridge ×3 (bridge) | 3-8 s | Her morning, the burden | 2-3 problem cuts (door, knock, asleep kid); stake on HER caused by the mornings; no band |
| 3 | Objection (hold) | 8-13 s | Say her doubt | "He sleeps through everything" class objection, verbatim-shaped from VOC |
| 4 | Claim (hold) | 13-22 s | Root cause + mechanism | Fish's ruled lines verbatim: sound doesn't reach a deep-sleeping brain; touch gets through; silent to everyone else; keeps going until they turn it off |
| 5 | Proof (hold) | 22-30 s | The warehouse | 10,000+ parents (claim as written); band shivering silent on the bench; pouches moving; stock line ONLY if true today (§10) |
| 6 | Benefit (hold) | 30-35 s | Kid independence | Kid up on his own, out the door; her morning back |
| 7 | CTA (CTA) | 35-45 s | Offer | Price from the live PDP, 60-night guarantee as risk reversal (not the headline), action; pouch in hand; end card (optional, --end-card; off by default per Fish 10-06) ≤2 s |
6. Pack spec
-
Step 0 — combo plan (feedback loop,
workflow-combo-loop):python3 scripts/combo_loop/plan.py --format format-warehouse --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. -
W1 (vo-broll) = one JSON pack per hook variant (A/B/C) in one batch folder
output/vo-broll/<batch>/, read byscripts/vo_broll_runner.py. Runner keys:ad_slug,pov(aVO_PROFILESkey: defaultnarrator-expressive;narrator-momas a voice test cell), optionalvoice_id+voice_id_overrides_pov,scenes: [{scene_id, vo, shot: {source_pref: "rip"|"gen", search_terms, tags, gen_keywords}}]. Core §5 keys ride along as extra JSON keys the runner ignores but the gates read:format: vo-broll,format_skill: format-warehouse,brand,created,status,parent,iteration,title,overlay,end_card,execution: W1|W2|W3,footage_truth(per scene:real-dawn|stock|ai),stock_check(date + result of the live variant check). - Scene ids:
h1-hook,h1-bridge,hold-objection,hold-claim,hold-proof-reveal,hold-benefit,cta. The FIRST scene id containingrevealmarks the reveal; the runner sinks product-tagged clips in unpinned scenes before it. Pin every cut anyway (<slug>-overrides.json:{scene_id: ["clip-id", "clip-id@sec", {"clip": "clip-id", "at": "word"}]}). Pins skip the pre-reveal filter, so never pin a pouch/band clip beforehold-proof-revealunless Fish has waived his 8-15 "no product b-roll before the reveal" rule for this ad (record it in the pack). - Shared hold + CTA: identical scene ids,
vo, pins and overlays across A/B/C. The runner has no shared-module object; copy A's built shared scene folders + state into B/C per the handoff, then build only hook + bridge. - W2 (cartoon-h3 narrator): markdown pack per core §5 (
format: cartoon-h3,format_skill: format-warehouse,style,style_anchor,cast,envs: packing-room, hallway, teen-room, kitchen, front-door,end_card); untagged narrator lines; build args withpython3 -m scripts.cartoon_h3.packargs <pack.md>. - W3 (ugc-omni job.json,
skills/ugc-omni/SKILL.mdowns the engine: read, never edit):style: photoreal,mode: cuts,aroll_model: flash,resolution: 1080p,image_arms: ["gpt2", "sd5"],product_refs: ["@dawn"],product_truthwith ugc-omni's display-off sentence, core §5 keys +execution: W3,label: "Dramatization".lines[]= the W1 scenes in order: packer linesvisual: "AI UGC"onavatar(packing bench, from a real warehouse-worker creator frame); her-morning scenesvisual: "broll:<id>"(avatar: false); the reveal lineproduct: true+end_frame: "holding"(band resting across his/her palm, close;product_actionlocked; the bench frame picked--productwith the band lying on it); hooks carryend_frame= their own frame. Pouch shots stay real/composite (no pouch in@dawnrefs). - Cast (W1): one hand set for packing shots (same skin tone, same sleeve, no rings), one mom + one kid for her-morning cuts (handoff law 4: one actress, one kid per ad). No faces in the packing room.
7. Visual grammar
- Footage-truth table (full in beat-sheet.md): REAL Dawn packing footage → deictic lines allowed ("today's orders"). Stock or AI photoreal → the line carries the claim and the picture is illustration: no "this is our warehouse", no "meet Sarah from packing", no counted-pile-as-today's-orders, no overlay like "LIVE from our warehouse". Animated (W2) → deictic fine, it reads as illustration.
- Packaging = the stand-up ziplock pouch (blue-to-orange gradient, lowercase
dawnwordmark, band photo, three bubbles). Never a rigid box, never a white box. Legible pouches = real footage or a composite ofassets/dawnbands-pouch-3d-transparent.png(models garble its text). Generated pouches only out of focus, back side, or stacked at distance. Higgsfield element@dawn-packaging(44d7be04-db3a-4366-af74-7df20ea79d63) is the opt-in pouch ref on that backend. - Band: plain matte black ribbed silicone, solid black inside and out, display DARK. Colours only if they're live variants (Black/Blue/Pink/Orange per the PDP JSON) and from real footage/refs. Never a smartwatch, never a lit face.
- Buzz: on the bench it renders as "shivers in place against the wood, rattling with tiny rapid movements" (playbook clip 29), the room silent around it. On a wrist: reaction-primary (arm jolt), wrist down or resting, band side-on (core §3 wrist rule).
- No readable text anywhere except the pouch: shipping labels, order screens, pick lists, whiteboards = blank or turned away (privacy + model garble). No branded outer mailers (we don't know what real orders ship in; ask Fish before showing one).
- Physics anchors on every product prompt: "lies flat on", "resting fully on", "closed fastened loop" (playbook). Hand-held band = closed loop flat in the palm, no face in frame.
- Shot tiers (core §2b): tier A = hands touching pouch/band, band on wrist, CTA, the hook's first 3 s; tier C = shelves, stacked pouches at distance, empty packing room, band on bench, clocks. Her-morning cuts come from footage first (own
dawn-raw→ stock), generated only when nothing fits.
8. Audio
- ElevenLabs via the runner profile (
pov). Brand voice, warm and plain, not salesy; ≥3.0 wps on the final (handoff law 2; runner floorLANE_MIN_WPS2.8), gaps ≤0.40 s on the voice stem. Script changes → rebuild with--force-vo(runner reuses VO without diffing text). - One music bed, whole ad, ducked (runner
master_mix, defaultaudio-library/music-beds/warm-tactile/gentle-piano-ambience.mp3). Muted rip audio. - The silent buzz is the point: no buzz SFX under the bench shot. The quiet IS the demo.
- W2: cartoon-h3 narrator rules (EL VO is the clock, vo_check ≥3.4 wps,
end_card:).
9. Production (free until the first paid generation; every paid step is Fish's)
cd ~/.openclaw/workspace
curl -sL https://dawnbands.com/products/<live-pdp-handle>.js | python3 -c "import json,sys;d=json.load(sys.stdin);print(d['available'],[(v['title'],v['available'],v['price']/100) for v in d['variants']])" # stock + price, read-only
python3 scripts/clip_library.py search --tags product,in-hand,product-pouch --keywords "pouch packing hands" -n 20 # own footage first
python3 scripts/register_dawn_broll.py --dir <folder Fish sends> --dry-run # real packing footage, if Fish films it
python3 scripts/pull_broll_clips.py --packs output/vo-broll/<batch>/<slug>.json --out output/vo-broll/<batch> --sources pexels --dry-run # stock for her-morning cuts
# generated b-roll, vo-broll lane = Higgsfield (Fish's standing 9-15 override in skills/vo-broll/SKILL.md: "do not fall back to fal.ai automatically")
python3 scripts/seedance_broll_runner.py --prompts <prompts.json> --run-id <id> --dry-run --no-discord # cost estimate first (seedance1_5 = tier C)
python3 scripts/seedance_broll_runner.py --prompts <prompts.json> --run-id <id> --phase frames --no-discord # start frames only → Fish picks (the draft)
python3 scripts/seedance_broll_runner.py --prompts <prompts.json> --run-id <id> --phase videos --no-discord # paid, Fish's go; --allow-billing only if he says so
# fal route ONLY if Fish lifts the override for this batch: python3 scripts/seedance_img2vid.py --image <still.png> --prompt "<playbook formula>" --duration 5 --resolution 720p --output <clip.mp4>
python3 scripts/vo_broll_runner.py --pack output/vo-broll/<batch>/<slug>-A.json --no-stitch # VO + scene build; read pace + gaps
python3 scripts/vo_broll_runner.py --pack output/vo-broll/<batch>/<slug>-A.json # stitch + master mix
python3 scripts/gemini_qa.py --asset <final.mp4> --type final --style "photoreal b-roll" # report the score, never adjudicate
python3 scripts/meta_preflight.py <final.mp4> # before any upload
- Model roles: tier C clips → Cheap simple-motion i2v (proven: Seedance 1.5 Pro i2v; in this lane on Higgsfield
seedance1_5viaseedance_broll_runner.py, on fal viaseedance_img2vid.pyonly if Fish lifts the override; candidates in the registry are untested: one-unit proof first, ≤~$2 without asking). Tier A band/hand clips → real footage first; else ugc-omni b-roll through its product gate (broll --stage frame→pick --name broll_<id> --product≥7/10 + display state →--stage anim; display-off wording; worn or resting across a palm, never pinched upright). Seedance 2.5 product shots stay rejected (Fish 10-06). Pouch shots: real footage or the pouch composite. - Provider conflict, flag once:
skills/vo-broll/SKILL.md(9-15) carries Fish's explicit, standing Higgsfield override for generated clips; the registry (10-06) names fal as the general default but did not revoke it. The override wins until Fish says otherwise; ask at gate 1. - Draft → final (core gate 6b): tier C = frames phase first (stills are the cheap draft, Fish picks), then videos; a 720p fal take re-rendered at 1080p is a NEW sample, not the approved motion. Generated tier-A band shots go through ugc-omni's gated exact first frame instead (no draft step: the frame check is the proof). W2: free drafts = storyboard, canvases,
--prompts-only; the paid H3 draft isrun.py --draft(480P), finals re-render natively (480P +--hdunproven, core 6b). - W3 (ugc-omni, every paid step dry-runs until
--spend):O=scripts/ugc_omni/omni.py; J=output/ugc_omni/<slug>→ G0python3 $O board --job $J→ G1refscan --src <real warehouse-worker video>,ref --pick,avatar --n 3 --arms gpt2,sd5,pick --name avatar, thenvariant --name avatar_band --product --arms gpt2,sd5 --prompt "<same person at the packing bench, the band lying flat on the bench. Display off: ...>"→pick --name avatar --product --file <that roll>(ugc-omni's continuous reveal: the band is in shot from line 1);variant --name holding --product ...→pick --name holding --product→ G2lock --line H1-1 --n 3then the reveal line (product_action)--n 3,--approveeach → G3gen --lines all,verify,broll --id <id> --stage frame|anim(+pick --name broll_<id> [--product]) → G4assemble --hook H1,cost,scripts/meta_preflight.py. Cost: Omni $0.315 / $0.42 / $0.525 / $0.63 per 4 / 6 / 8 / 10 s, images ~$0.05-0.075; a 40 s W3 ad ≈ $10-13 with 2 lock rounds and regens. - W2: the cartoon-h3 sequence in format-spoken-drama §9 (vo → storyboard →
storyboard.approved→ canvas →--prompts-only→--spend→ assemble), narrator pack, no voices. - Cost per W1 ad: $0 if own + stock footage covers it; ~6-10 generated tier-C clips at fal Seedance 1.5 Pro i2v pricing (read the fal page before quoting) + EL quota. W2 ≈ 4-6 H3 batches (h3.py
FAL_PRICEh3-max 768P $0.75 per 15 s; the cartoon-h3 SKILL says $1.20 and core says the table may be inverted: read the fal page;run.py --dry-runprints the estimate). Check fal/Higgsfield/kie balances before promising a render.
10. Gates & QA checklist (on top of core §4 and the handoff's final QA)
- [ ] Parent named with CPA (the recipe-B static whose callout + mechanism the hold reuses); ONE variable stated; execution W1/W2/W3 recorded.
- [ ] Lines 1-2 name HER by a symptom; stake on her, caused by the mornings; VOC line cited; competitor-swap test failed (HiStrips couldn't run it unchanged).
- [ ] Root-cause + mechanism lines verbatim; demand claim as written ("10,000+ parents"), no invented order counts, per-day numbers or staff counts.
- [ ] Stock truth: live JSON checked today. All variants available → no sold-out / almost-gone / last-batch / restock lines. A restock or waitlist line only with Fish's confirmation of a real event, dated in the pack.
- [ ] Footage truth: every scene tagged
real-dawn|stock|ai; no deictic place/people/volume line over stock or AI; no real names; no "live" overlays. - [ ] Pouch, not box, in every packaging shot; legible pouch = real or composite; band dark, black, physics-anchored.
- [ ] Packing room ≤50 %, her morning ≥40 % of runtime (measured from the cut list).
- [ ] Price + guarantee match the live PDP; guarantee in the CTA, not the hook.
- [ ] One-unit motion proof on any NEW model before a batch (registry); W3: ugc-omni G0-G4, every gate Fish's (G0 script +
board→ G1 real ref + avatar + gated product frames → G2 the same line good 3×, then the reveal line withproduct_action→ G3 every line + b-roll + band checked by eye → G4 the cut). - [ ] Storyboard per phrase → Fish; generation prompts shown before paid video (
feedback_motion_prompt_approval). - [ ] No pouch/band shot before
hold-proof-reveal(Fish 8-15) unless a waiver is recorded in the pack; generated tier-C clips go frames-first (draft) on the Higgsfield route unless Fish lifted the vo-broll override. - [ ] 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: 30-45 s measured, hooks 3-7 words inside 3 s, wps ≥3.0, gaps ≤0.40 s, freezedetect 0, 1 fps contact sheet eyeballed (label text, box, lit band, faces in the packing room), shared hold/CTA identical across A/B/C, Fish watched it.
- [ ] Ad link = Shop Now = any URL in text, one page (
feedback_meta_link_match;scripts/meta_link_audit.pyafter launch).
11. Variants & test plan
| Cell | The one variable | Status |
|---|---|---|
| Default | 3 hooks × 1 shared hold/CTA, W1 faceless | build first |
| Frame | warehouse proof slot vs the parent static's proof (same callout, same mechanism) | first read: does the pile add anything? |
| Narrator | W1 faceless vs W3 on-camera packer | ugc-omni G0-G4; answers the borrowed-person question for video |
| Style | W1 photoreal vs W2 animated | after the default reads |
| Scarcity | true restock/waitlist line on vs off | only when a real stock event exists |
| Voice | narrator-expressive vs narrator-mom |
cheap; same footage |
| - Hooks (ILLUSTRATIVE, not shipping): (a) symptom + pile "Ten thousand moms stopped knocking twice."; (b) burden callout "Still his alarm at six forty?"; (c) mechanism demo over the silent bench buzz "This buzz wakes him. Nobody else." (product at 0 s: needs Fish's 8-15 waiver). Hooks (a)/(b) run over her-morning footage by default. | ||
- Grounding step (run when Fish sends the real #11 link): python3 scripts/ad_dissector.py "<foreplay share URL>" --slug warehouse-ref --brand-context "DawnBands silent vibrating wake-up wristband" (add --competitor if it's a lane-leader) → read output/ad-dissect/<slug>/dissect.md → update references/beat-sheet.md timings + shot mix from the measured pacing, rewrite references/sources.md, flip evidence status to "grounded on ", log it in memory/learnings.jsonl. |
||
- Launch per core §6: own ad set in Testing CBO, video floor per media-buyer rules, read day 3, verdict day 7 vs the parent CPA; never pause, reduce; record project_launch_<date>_<slug>.md. |
||
| - Feed copy check (starpop how-to-preview-a-facebook-ad-before-publishing): the hooks also run in Feed: read only the primary text visible before 'See more' (the symptom must be there), and make the headline add proof (10,000+ parents, 60 nights) instead of repeating the hook. | ||
- 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_spec from 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
| Failure | Fix |
|---|---|
| Ad is all warehouse, no her (character-less VO) | split rule ≤50 / ≥40; bridge + benefit are her morning |
| Hook is a mystery ("we sold out again") | name her symptom in lines 1-2 |
| Scarcity line contradicts the live store | stock check in the pack; demand lines only |
| VO says "our warehouse" over AI/stock | footage-truth tags; rewrite non-deictic or use real footage |
Box or white box appears (library clip c2b-box-open-palm is a white box) |
pouch only; exclude that clip; composite the pouch PNG |
| Garbled pouch text / fake shipping labels | pouch legible only from real/composite; labels blank or turned away |
| Smartwatch drift, grey lining, glow | playbook fidelity block: diagonal ribbing, solid black inside and out, no module, no glow |
| Bench buzz doesn't read | "shivers in place against the wood, rattling" + silent room; don't amp "vibration" words |
| Hands morph / fused fingers on the pouch or band | tier A → real footage; band shots may use ugc-omni's product gate (pick --product); never Seedance 2.5 product shots (rejected 10-06) |
| Faces sneak into packing shots | "hands only, no face in frame" + crop; reject the clip |
| Runner reuses old VO after a script edit | --force-vo on changed scenes; rebuild shared scenes once, copy to all variants |
| Hold differs across A/B/C | build shared scenes once; hash-check scene inputs (handoff) |
| Gemini scores real footage 4/10 | report it; eyes decide (handoff law 6) |
13. Sources
~/research/davidaistar/REPORT.md (#10/#11 duplicate), foreplay/links.txt, foreplay/10_character_arguments.gemini.md, foreplay/05_founder.gemini.md, analysis/diff_ai_ugc.md, analysis/diff_cloning.md; output/dawn-combo-map-2026-10-05/MAP.md + aggregate.txt; knowledge/brands/dawnbands/{product-truth,claims-register,proof-bank}.md; skills/vo-broll/SKILL.md, skills/vo-broll/references/production-handoff.md; scripts/vo_broll_runner.py, scripts/ad_dissector.py, scripts/seedance_img2vid.py, scripts/seedance_broll_runner.py, scripts/clip_library.py, scripts/cartoon_h3/canvas.py; memory reference_dawnbands_packaging.md, project_dawnbands_broll_seedance_playbook.md, feedback_guarantee_positioning.md, project_vo_broll_lane.md, feedback_ai_avatar_broll_lane.md, reference_dawn_main_pdps.md. Details in references/sources.md.
NOT BUILT (needs Fish's go): a grounded reference ad (link pending); real Dawn packing footage (none in clip-library); hook headline overlay + end card (optional, --end-card; off by default per Fish 10-06) in vo_broll_runner.py (the 9-15 per-batch renderers aren't in output/ any more); a shared hold/CTA module in the runner; a 9:16 still CLI on fal; per-tier model routing (core §2b); an automated stock-truth guard (manual curl today).
Not built yet (needs Fish's go)
- NOT BUILT (needs Fish's go): a grounded reference ad (link pending); real Dawn packing footage (none in clip-library); hook headline overlay + end card (optional, --end-card; off by default per Fish 10-06) in vo_broll_runner.py (the 9-15 pe