Timeline — beat sheets, milestone truth table, static reconciliation
1. Milestone truth table (what is actually true at each stage)
Dawn has no owned post-use outcome data: no day-14 survey, no reason-coded returns, and Okendo's 2,142 reviews are imported (95% dated before the store's first order, none since Feb 9) (research/bottleneck-diagnosis-2026-10-03.md lines 73, 136). So every milestone is built from one of three sources, never from invention: P = product fact (product-truth.md), S = owned survey (purchase situation and objections, research/customer-evidence-2026-09-15.md), C = category evidence from buyers of other wrist-vibration alarms (research/voc-competitor-reviews-2026-10-02.jsonl, by id). C quotes show what the mechanism does for real users; they are never presented as Dawn buyers.
| Stage | What is true | Source | Video | Static |
|---|---|---|---|---|
| The night before | She is the alarm: waking them herself 142/156 (91%), full-volume phone alarms 124/156 (79.5%); he may refuse to wear it ("Not sure if he'll wear it", S07); wear doubt 18.6% | S | yes, the "before" | headline (her line) |
| Setup / night one | Set on the band, no app, no pairing; three alarms; adjustable buckle strap fits most wrists; display dark when idle | P | he puts it on, she sets it | Stage 1 "Tonight" |
| First morning | Vibration on the wrist that keeps getting stronger until he turns it off; silent to everyone else in the house | P | the buzz, nobody else wakes | Stage 2 (Fish's line verbatim) |
| First morning (honest) | "Wakes me up right away" (q1311) but also "the first time wearing it I didn't get woke up in time... after setting multiple alarms I now have zero issues" (q1382); "On the first day I wasn't starting to feel it but after a next day or two I was starting to get used to it" (q1435); waking is not getting up (Q06 "It wakes me up every time but actually getting out of bed is the hard part") | C, S(Q06 public) | morning one = awake, not up yet; the second alarm is set | no |
| First week | Nobody else woke: "For the first time in almost 3 years, I didn't wake my girlfriend up" (q1404); owned desire "wake up independently without waking up the whole house" (S01) | C, S | little sibling / husband sleeps through | no |
| About two weeks | Battery "up to about two weeks per charge" → the first charge lands here; "I've had it for about two weeks now and I haven't woken up late ever" (q1358) | P, C | he charges it himself | no |
| A month on | Outcomes are claim-unlocked (on time, no late slips, calmer mornings, independence; claims-register.md); parent category line "Wakes my child up all on their own! We struggled for years." (q1372) |
claim + C | payoff on HER, as this family's story | Stage 3, no date |
| Sixty nights | The 60-night wake-up guarantee window | P | CTA only | pill |
Never a milestone: a rate tied to a day ("87% wake on their own by day 3"), a body measurement by a date (cortisol down by week two), grades or attendance numbers by a date, "adjustable strength" (the band ramps by itself; product-truth has no user setting), a lit display, an app. Counter-evidence to keep the story honest: "the first night I tried it out it failed to wake me up" (q1448, FitSleeps 1★); "it has not once woken him up and woken me up every time" (HiStrips, bottleneck-diagnosis line 248).
2. Video beat sheet (cartoon-h3 narrator, 60-120 s ≈ 210-400 words)
Percentages are of runtime; beats are pack-line ranges, never mid-sentence. Single narrator: MOM speaks every line; other people's words are quoted by her.
| # | Beat | % | Lines (90 s) | Job | Line rules |
|---|---|---|---|---|---|
| 1 | Hook | 0-8 | 1-3 | Her situation in action + stake on her + the promise of the month | Line 1 ≤12 words, names HER by an observable symptom; stake from the stake bank (cite #); no backstory; no product; line 2 or 3 states the timeline ("this is what the next month looked like") |
| 2 | Before | 8-22 | 4-9 | Prove she's the alarm | Concrete ritual (knocks, trips, times are fine in video if true to the story); failed solutions generic (louder alarms, phone across the room, lights on), never brand names, never bed shakers; the accuser's line quoted once |
| 3 | Why + arrival | 22-32 | 10-13 | Root cause, product in | ≤2 explainer lines from a person inside the story; root cause verbatim from core §1 ("sound doesn't reach a deep-sleeping brain; touch gets through"); product named once here |
| 4 | Night one | 32-45 | 14-18 | Wear doubt | He puts it on himself (or after one push, never forced); she sets it on the band, no app; she lies awake waiting |
| 5 | The first mornings | 45-62 | 19-25 | Wake doubt, honestly | Mechanism line once ("it buzzes on his wrist and keeps going until he turns it off; nobody else hears it"); morning one = awake, not up; a later morning = she hasn't knocked |
| 6 | Week two | 62-76 | 26-30 | It lasts | One routine detail per line: he charges it, the little one sleeps through, she stops setting her own early alarm |
| 7 | A month on | 76-92 | 31-35 | Payoff on HER | The accuser sees it (his concession quoted by her) + one concrete thing she has back; her one-line reaction last |
| 8 | CTA | 92-100 | 36-37 | Offer | "Dawn Band" + 60-night wake-up guarantee, spoken; end card (optional, --end-card; off by default per Fish 10-06) |
Line rules (video)
- One sentence per pack line, 5-12 words; milestone lines carry label + event ("By week two, he was charging it himself.").
- Said-out-loud test, pronoun-first; numbers spelled with spaces for EL.
- Time moves forward only. Every count must survive the red-team timeline math (battery ~two weeks, the 60-night window, school days vs weekends).
- The family is the same in every beat: same kid, same rooms, same accuser.
- A line that only works as a graphic (a chart, a calendar number) gets rewritten.
Structure example (ILLUSTRATIVE — shape only, not shipping copy; real lines come from the stake bank, VOC and Fish's approval)
- "My husband says I'm the reason our son is late." (hook: accuser quoted, MOM at the teen-room door mid-knock)
- "So I kept track of the next thirty mornings." (timeline promise) …
- "The school nurse said sound doesn't reach a deep-sleeping brain." (why; Fish's line kept verbatim inside her quote) …
- "Night one, he put it on without a word." (night one) …
- "The first morning, it buzzed, and only he woke up." (first mornings)
- "He was awake. He just wasn't up yet." …
- "By week two, he was charging it himself." (week two) …
- "A month in, my husband asked what I'd changed." (a month on) …
- "It's the Dawn Band. Try it for sixty nights." (CTA)
3. Static beat sheet (template C07 timeline-stack, 1:1)
| Order | Slot | Job | Rule |
|---|---|---|---|
| 1 | Headline | Recognition: her burden in her words, read as a callout TO her (you/your; a first-person quote is mom-first POV, MAP §2B) | voc_check ≥1 hit AND the hit's context is a parent of a school-age kid (substring hits include preschool threads; grep -rli the line to see the file, competitor-review jsonl hits don't count); ≤8 words unless her verbatim sentence; or a declared card_item with the survey ref |
| 2 | Root-cause sub | Why | "An ADHD brain tunes out a sound it hears every morning." (adapted from Fish 9-30 "Their brain tunes out…" to carry ADHD; Fish approves at the sheet) |
| 3 | Stage 1 "Tonight" | Setup / wear doubt | "You set it on the band and he puts it on." (P) |
| 4 | Stage 2 "Tomorrow morning" | Mechanism | "Dawn vibrates on the wrist and keeps getting stronger until they press the button." (Fish 9-30, verbatim) |
| 5 | Stage 3 "Every morning after" | Payoff | "He's up on his own and the morning starts calm." (claim-unlocked outcome, no date) |
| 6 | Product + pill | Proof, risk reversal | real cutout, display dark; "60-night wake-up guarantee" |
Reconciling "day 1 / day 3 / day 14" with the qualifier ban
- The ban (dawn-statics lock 4 + copy method 3): no clock times, counts or durations outside a real quote; each one excludes a mother whose morning looks different. "Day 14" is a duration, and C01 in templates.json already lists "time labels (weeks, days, minutes)" under
do_not. - What the code catches: gen_statics' "wrong guarantee" pattern flags "14 days" but not "Day 14", "Night 1" or "week two"; make_prompts lint has no time rule. Tested 10-06: "Day 1. Day 3. Day 14." passes both. So the skill's grep (SKILL.md §9) is the gate.
- Compliant version (proposed, this skill): sequence words, no numbers: Tonight / Tomorrow morning / Every morning after. It keeps the timeline's job (it answers "how long until it works" with "tomorrow morning") without a duration, and stages 1-2 are product facts, true on the first night by construction.
- The quote route (blocked): timing is allowed inside a real quote. When a verified Dawn buyer writes "the first week he...", that line can sit in a stage, credited honestly. No such quote exists today (no post-use survey; Okendo imported). Competitor-buyer quotes (q1358 "about two weeks") are never put on a Dawn static.
Static spec example (ILLUSTRATIVE; headline passed voc_check 10-06 with 1 hit (a commenter in a parenting thread), context to be read before use; alts: "I end up yelling" 7 hits, "Every morning is a battle" 9)
{"slug":"tl-1","layout":"../static-templates/refs/C01.jpg","template":"C07","scene":null,
"lines":{"headline":"Starting your day yelling every morning just sucks.",
"sub":"An ADHD brain tunes out a sound it hears every morning.",
"bullets":["You set it on the band and he puts it on.",
"Dawn vibrates on the wrist and keeps getting stronger until they press the button.",
"He's up on his own and the morning starts calm.","60-night wake-up guarantee"]},
"voc":["Starting your day yelling every morning just sucks"],
"why":"emotion row: the yelling she hates; the stack answers 'how long until it works' with tomorrow morning",
"alts":["I end up yelling.","Every morning is a battle."]}
Gate result on 10-06: one finding, MISSING WRIST-VIBRATION MECHANISM (rule 9, SA2 chain), waived with a written reason as in the 10-04 batch. Since the 10-06 build, gen_statics.py --check / --list read the spec's waivers (and an optional chain) and pass with the waiver printed (SKILL §9); check_gate.py is no longer needed.