Dawn + Curvelle · October 13, 2026

The new testing framework, and what changed

Every ad now gets one label, judged one way, against the whole account. Each label comes with a set menu of what to make next, and every learning lands in the Growth Guide, which daily planning reads. Below: the rules, what they replaced, and how a week runs now.

01Why it changed

Three things labelled ads before, each with its own rule. The learnings ledger used dollar thresholds (a "breakthrough" was $2k spend at $35 CPA or less). The Native Matrix used lifetime CPA against $41.59 and called anything under $150 "starved". The rotation script graduated ads at 2 purchases under $37. None of them asked the only question that scales an account: did this ad take the money away from our proven ads, at real margin, and let the budget grow?

The new system is Spencer Pawliw's Evolve iteration playbook (the four outcomes, the 9 components, the numbered fix menus). Zak's media-buying rules sit on top: 7-day-click only, the click-share gate, persona × desire × awareness diversity, and "extract the angle, don't revive the ad". The bars are yours, set on October 12.

02Before vs now

AreaBeforeNow
Who decides "winner"Three systems with three rules: ledger $ thresholds, Matrix lifetime CPA ($41.59), rotation 2 purchases ≤$37One Evolve label everywhere: hub, sheet, planning
Purchases countedMeta default (click + view)7-day click only. View-throughs shown in brackets, never counted
Measured againstLifetime CPA, or its own campaignIts share of the whole account's spend that week, so it has to compete with the proven SCALE ads
Breakthrough bar$2k+ spend at ≤$35-41.59 CPA, any time≥15% of account spend + click ROAS ≥2.00 (Dawn; breakeven 1.31) + account $/day up the next week
When it's judgedLifetime totalsFirst 7 days from its first day of delivery; every later week can still upgrade it (never downgrade)
"Starved"Under $150 lifetime spendUnder 1,000 impressions in its first live week (Meta's own verdict)
Which ads belong to a rowMatrix cell listed the first 4 IDsEvery ad that ran that body, including archived and deleted copies
What to make nextAd hocA fixed Evolve menu per label (fix lists, 9 script and 15 format iterations), plus retry counts by ad type
Logging a launchTyped into the sheet by hand, often skipped/new/ form, one field per screen; writes the Matrix row + Roadmap row; why/what/how memo required
LearningsMostly missing (Roadmap row 2: "NO LEARNINGS + NOT DONE")Day-7 learning per ad, prompted in Discord; hypotheses get CONFIRMED / NOT CONFIRMED by the iterations built on them; daily planning reads them
IterationsUnnamed, uncountedParent recorded, ITER#N_BATCH#ORIG assigned, planned-vs-actual checked on day 7
Valence & intensityNot trackedEvery ad tagged Zone 1 Calm / 2 Thrill / 3 Annoyance / 4 Fear
CommentsOnly purgedMined weekly for objections, untargeted buyers, uses, proof
Image iterationsWhen someone rememberedWeekly queue of winners due a new image batch, with 20 ideas each
SwipesManual TrendTrack browsingWeekly: 10 direct + 10 indirect scaling brands, their 21+ day ads, imitation briefs

03The four labels

All numbers are from the 7-day window the ad is judged on, 7-day click only.

Breakthrough

≥15% of account spend, click ROAS ≥2.00 (Curvelle 2.30), and the account's average $/day the following week is higher than the week before. The only label that scales you.

Spend winner

≥15% of account spend but misses the breakthrough bar. Meta wants to spend on it; it doesn't convert at margin yet. Under 0.50 ROAS it's flagged misleading.

KPI winner

Click ROAS at or above the higher of breakeven and the account's own ROAS that week, with at least 2 click purchases, but Meta won't give it spend.

Loser

Everything else that got a fair read, plus starved: under 1,000 impressions in its first live week.

Pending means under 7 days live. Legacy on the hub means the ad launched before the data window, so it's judged on its later weeks only.

Labels are sticky and only move up. A week-1 KPI winner that takes over the account later becomes a breakthrough; a breakthrough that has a bad week stays a breakthrough (Evolve: "your ads earn respect").

04How an ad gets read

  1. Find its live week. The window starts on the first day it delivered, not the day it was created. Copies are often made paused and switched on later.
  2. Check it was seen. Under 1,000 impressions in that week = starved loser.
  3. Share of the account. Its spend ÷ the whole account's spend in the same 7 days. ≥15% means it competed with the proven ads.
  4. Click ROAS. 7-day-click revenue ÷ spend. Compared to the breakthrough bar (2.00) and to the KPI bar (breakeven 1.31 or the account's own ROAS that week, whichever is higher).
  5. Did the budget grow? Account $/day the next 7 days vs the 7 days before.
  6. Keep watching. Every later 7-day window is checked again; a higher label replaces a lower one.

Three real cases

Counted as a breakthrough

slop 7 Copy, week of Aug 5: 41% of account spend at 2.41 click ROAS, account went from $1,579 to $2,096 a day. The only breakthrough on the hub's 75-day window.

Old rule said loser, new rule says breakthrough

static 12, week of Feb 4: 44% of account spend at 2.08, account $491 → $610 a day, $46.6k lifetime. The lifetime-CPA rule buried it.

Not a breakthrough (your call)

sl0919-h2 took 33% of the Testing CBO at 1.55. Only 18% above breakeven, and only inside Testing, not against the SCALE statics. That's why the bar is account share and 2.00.

Slow first week

Coffee Shop Exile: $16 and 375 impressions in its live week, then $3,286 later. Strict Evolve would leave it "starved"; the late-upgrade switch lets it count (Zak: don't kill at 7 days).

Why click-only matters

View-throughs were flattering ads Meta never really scaled: COLLEGE-02-01 on the B page read 1.43 with views and 0.84 on clicks; UNAWARE-06-03 1.85 → 0.96; DORM-02 1.89 → 1.11.

05What each label gets

Straight from Evolve's iteration playbook. The hub highlights the items the numbers point at (e.g. a CTR far below the account flags the hook).

LabelThe jobMenuRetries (by where the idea came from)
BreakthroughStudy it before anything else. Never turn it off over a bad week.9 script iterations (components rewrite, emotional hook, bridge remake, in media res, extended problem, awareness test, objections, negative framing, new sub-avatar) + 15 format iterations; watch lifespan risks: small TAM, easy to copy, product looks like a cheaper oneIterate all types, always
Spend winnerFind which ROAS input lags the account (usually conversion), fix it in the same format first#7 belief / authority · #9 urgency · #10 stakes · #11 funnel congruence · #12 misleading (reduce spend, never pause)Ideas from research: 3-5 more tries · imitations: 2-3 more executions
KPI winnerLeave it running. Iterate only if a good idea was executed wrong.Loser menu #1-#82-3 tries, unless it was a deliberate offer ad
LoserDiagnose in order#1 hook · #2 TAM too small · #2.5 too broad · #3 valence/intensity · #4 hook doesn't tell Meta who it's for · #5 empty claims · #6 bridge · #7 belief · #8 offerResearch ideas: 2-3 tries with new evidence · losing imitations: none

Zak's check on every iteration: if it keeps the same persona, desire and awareness, it's a variation, not new diversity. Move at least one.

06Logging: the Growth Guide is the memory

New launch at /new/ (passcode in ~/iteration-hq/.form_passcode): one question per screen. Concept, batch #, ad type (ideation / imitation / iteration, and which ad it iterates), file and image type, desire, sub-avatar, narrator, kid, awareness, emotion, V&I zone, angle, hook type, verbatim hook, stake, old belief, mechanism, authority, failed solutions, positioning, urgency, image, offer, the why / what / how memo, ad IDs, links. Dropdowns read Native Lists live. It writes a Native Matrix row (RESULT = Pending) and an Ad Roadmap row.

Day 7: same page, "Day-7 learning". Pick the row, one line for a loser, a hypothesis for a winner, fill missing components. It also copies the learning to that batch's Roadmap row.

Sheet changes: six new Matrix columns (V&I ZONE, AUTHORITY, POSITIONING, URGENCY, AD TYPE, HYPOTHESIS), new Native Lists for V&I zones and ad types, and RESULT now carries the new label. CLASS and Native Coverage follow automatically.

Planning reads it: dawn-native-brief now pulls the picked cell from the live Matrix (what won and why, what died and why), the top comment objections, and the moments coming up, before proposing anything. It won't re-propose what a logged loser already tried without new evidence.

06bThe closed learning loop (Evolve §07.02)

Evolve stepHow it happens now
1-3 Batch, outcome, ad typeForm at launch; label lands automatically on day 7 with ad and account spend
4 Hooks verbatim + hook / hold rateHook logged at launch; for videos the card shows hook rate (3s plays ÷ impressions; under 30% = fix the hook first), hold rate, hook-to-hold and average watch time against the account's videos (counts past $1K spend)
5 Planned vs actualEvery launch logged at /new/ is marked "pending". On day 7, Claude reads the live ad (copy + full image) and checks it against the plan on all components. PLAN CHECK says MATCH n/10 and names each gap ("awareness: planned Problem Aware, reads Unaware"): an execution issue, not an angle issue
6 HypothesisDay-7 learning form; winners write a hypothesis
9 Pick the iterationThe card's menu for its label
10 Name and trackPick the parent at launch; the form returns ITER#N_BATCH#ORIG (traced to the original, counted) and the ad / ad set / file name to use
Closing the loopWhen an iteration gets its label, its parent's HYPOTHESIS STATUS updates: CONFIRMED by X if one won, NOT CONFIRMED if all lost, OPEN while pending. 30+ iterations on one original with no new breakthrough raises Evolve's warning
Prompting you"Learnings due" list on the Dawn page; new ones ping #pipeline-qa daily with a link that opens the form on that row

06cHow we launch

The launch side of the system. Most of these are rules you'd already settled; the new pieces are the slot count, the form, and the day 1-6 watch list.

StepRuleFrom
Where it goesEvery new test goes to the Testing CBO. SCALE holds proven winners only.Your 10-03 restructure
How many at onceMax live concepts = Testing daily budget ÷ 7-day click CPA (today $480 ÷ $58 = 8). The hub shows live vs readable; the form warns when a launch goes over.Your 9-01 ruling, Spencer
One concept = one ad setOne variable per batch. Angle discovery = same format and body, only the hook changes.9-01 ruling (MARKSMAN)
Ads per concept3 hooks × 5 images = 5 ads, multi-text, plus 2 headlines.Your 9-24 rule
Spend floorsNone on tests. Forced minimums buy sales Meta would have got anyway.Removed 10-04/10-06; Spencer's data
Video vs imageSeparate ad sets. Videos never enter the statics SCALE CBO without a floor (their CPMs lose the auction).Zak; graduation rule
Image iterationSame copy, 5 new images, a NEW ad set, nothing else changed.Justin; weekly image queue
Log itEvery launch goes through /new/ (batch, ad type, parent, components, memo). Name iterations ITER#N_BATCH#ORIG.Evolve §07.02
Days 1-6Watch, don't judge. Early-signals list: CTR, CPM, add-to-cart, hook rate vs account; dead-ad flag from the 8-28 rotation rule.Evolve, your 7-day rule
Day 7Label lands (from first delivery day). Log the learning; the card shows the next move.Evolve
GraduateCopy reuses the winner's post. The original stays on until the copy spends ≥50% of its 7-day average two days running.Your graduation rule
KPI winner that won't spendOptional spin-out: its own small ABO ad set ($60-100/day) to see if it scales alone.Spencer, your 9-01 ABO allowance
Bad weekReduce spend, never pause. A breakthrough gets a bad week before you touch it.Your rule, Evolve
The first slot count found Testing running 20 concepts against 8 readable, and Curvelle 5 against 2. Until that's back under the line, new launches mostly starve what's already running.

07New inputs that feed the tests

InputWhat it doesFirst read (Dawn)
Comment minerReads every comment on the top 15 posts (FB + IG, hidden included), sorts into objections / untargeted buyers / uses / proof / questions, verbatimDidn't work ×30 · won't wear it ×26 · turns it off, back to sleep ×14. Deaf / hard of hearing and grandparent buyers. Daytime reminders as a use.
Persona gapWho buys (survey) and who comments vs who the ads speak toIndependence 18.5% of buyers / 12% of spend; deaf/HoH 0 ads; daily fights and adult self-buyer overserved
Hook libraryEvery labelled hook as a fill-in template, with V&I zoneWinners lean Annoyance / Calm; 44% of losing hooks are Fear vs 18% of winners
Image cadenceWinners still spending with no new image (by image hash) in 14 days → 20 ideas, pick 5, one new ad set, copy frozen5 due, incl. COLLEGE-02-01 and evolve-sa2-s5
Port queueWinning bodies × the formats they haven't run (native, static, song, cartoon VO, UGC)On each brand page
Swipes10 direct + 10 indirect brands, their 21+ day ads by reach, imitation briefsLysa "Mothers picking [X] … consider two things" (= wake / wear doubts); Glowco "From X to Y" (518 days)
Moments calendarDated urgency without a sale, with launch-by datesQ1 report cards (launch by Oct 30), Thanksgiving-return Monday, first school morning 2027, spring forward Mar 14
Curvelle mashup lane86 shots from the proven 2-26 videos in the b-roll library, for new VO scripts on proven footageReady for the next Curvelle video script

08How a week runs now

WhenWhat happensWho
Daily 08:40Meta pull (read-only) → sheet RESULT sync → labels → Iteration HQ rebuiltAutomatic
Monday 09:10Comments, persona gap, hooks, image queue, swipes refreshedAutomatic
Planning a conceptdawn-native-brief shows the cell's history, objections and moments; the concept is logged at /new/You + Claude
Launch dayAds go to Testing, no spend floors, one concept per ad setYou
Day 7 from first deliveryLabel lands on the hub and the sheet; you log the learning at /new/ → Day-7 learning; the card shows the next moveAuto label, you log
After a breakthroughStudy it, then the script and format iterations; Evolve says another breakthrough usually follows within 1-2 weeks of doing this properlyYou + Claude

09What the first run showed

Dawn click ROAS, last 7d1.02breakeven 1.31
Breakthroughs, 75 days1slop 7 Copy, Aug 5 week
Spend / KPI winners4 / 23hub, 75-day window
Click share of purchases83%Zak: scale only ≥70%

Growth Guide, before → after (93 native rows): Breakthrough 10 → 4 (slop 9, neveralarm-pdp, Fable v10, static 12); Spend Winner 4 → 4; KPI Winner 21 → 23; Loser 11 → 49; Starved 47 → 13. Coverage went from W35 L11 S47 to W31 L49 S13. Most old "starved" rows actually delivered and lost.

The honest read: no ad launched since August has taken 15% of account spend. The account runs on a few aging ads. That's what the queue, the image cadence and the swipes are aimed at.

10Your switches

All in ~/iteration-hq/config.json. Change a bar there, delete data/labels_state.json so old labels re-judge, and the next daily run applies it everywhere.

SettingNowWhat it does
share_bar0.15Share of account spend for spend winner / breakthrough
breakthrough_roasDawn 2.00 · Curvelle 2.30Click ROAS a breakthrough must clear
breakeven_roasDawn 1.31 · Curvelle 1.5Dawn from the 30-day P&L; Curvelle is a placeholder
kpi_min_click_purchases2Stops one lucky sale making a KPI winner
min_impressions1,000Under this in the live week = starved
misleading_roas0.50Spend winner under this gets the misleading flag
late_upgradeany"any" lets later weeks upgrade to any higher label; "breakthrough_only" is Evolve literal

11Limits to know