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.
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.
| Area | Before | Now |
|---|---|---|
| Who decides "winner" | Three systems with three rules: ledger $ thresholds, Matrix lifetime CPA ($41.59), rotation 2 purchases ≤$37 | One Evolve label everywhere: hub, sheet, planning |
| Purchases counted | Meta default (click + view) | 7-day click only. View-throughs shown in brackets, never counted |
| Measured against | Lifetime CPA, or its own campaign | Its 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 judged | Lifetime totals | First 7 days from its first day of delivery; every later week can still upgrade it (never downgrade) |
| "Starved" | Under $150 lifetime spend | Under 1,000 impressions in its first live week (Meta's own verdict) |
| Which ads belong to a row | Matrix cell listed the first 4 IDs | Every ad that ran that body, including archived and deleted copies |
| What to make next | Ad hoc | A fixed Evolve menu per label (fix lists, 9 script and 15 format iterations), plus retry counts by ad type |
| Logging a launch | Typed into the sheet by hand, often skipped | /new/ form, one field per screen; writes the Matrix row + Roadmap row; why/what/how memo required |
| Learnings | Mostly 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 |
| Iterations | Unnamed, uncounted | Parent recorded, ITER#N_BATCH#ORIG assigned, planned-vs-actual checked on day 7 |
| Valence & intensity | Not tracked | Every ad tagged Zone 1 Calm / 2 Thrill / 3 Annoyance / 4 Fear |
| Comments | Only purged | Mined weekly for objections, untargeted buyers, uses, proof |
| Image iterations | When someone remembered | Weekly queue of winners due a new image batch, with 20 ideas each |
| Swipes | Manual TrendTrack browsing | Weekly: 10 direct + 10 indirect scaling brands, their 21+ day ads, imitation briefs |
All numbers are from the 7-day window the ad is judged on, 7-day click only.
≥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.
≥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.
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.
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.
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.
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.
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.
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).
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.
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).
| Label | The job | Menu | Retries (by where the idea came from) |
|---|---|---|---|
| Breakthrough | Study 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 one | Iterate all types, always |
| Spend winner | Find 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 winner | Leave it running. Iterate only if a good idea was executed wrong. | Loser menu #1-#8 | 2-3 tries, unless it was a deliberate offer ad |
| Loser | Diagnose 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 offer | Research 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.
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.
| Evolve step | How it happens now |
|---|---|
| 1-3 Batch, outcome, ad type | Form at launch; label lands automatically on day 7 with ad and account spend |
| 4 Hooks verbatim + hook / hold rate | Hook 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 actual | Every 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 Hypothesis | Day-7 learning form; winners write a hypothesis |
| 9 Pick the iteration | The card's menu for its label |
| 10 Name and track | Pick 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 loop | When 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 |
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.
| Step | Rule | From |
|---|---|---|
| Where it goes | Every new test goes to the Testing CBO. SCALE holds proven winners only. | Your 10-03 restructure |
| How many at once | Max 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 set | One variable per batch. Angle discovery = same format and body, only the hook changes. | 9-01 ruling (MARKSMAN) |
| Ads per concept | 3 hooks × 5 images = 5 ads, multi-text, plus 2 headlines. | Your 9-24 rule |
| Spend floors | None on tests. Forced minimums buy sales Meta would have got anyway. | Removed 10-04/10-06; Spencer's data |
| Video vs image | Separate ad sets. Videos never enter the statics SCALE CBO without a floor (their CPMs lose the auction). | Zak; graduation rule |
| Image iteration | Same copy, 5 new images, a NEW ad set, nothing else changed. | Justin; weekly image queue |
| Log it | Every launch goes through /new/ (batch, ad type, parent, components, memo). Name iterations ITER#N_BATCH#ORIG. | Evolve §07.02 |
| Days 1-6 | Watch, 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 7 | Label lands (from first delivery day). Log the learning; the card shows the next move. | Evolve |
| Graduate | Copy 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 spend | Optional spin-out: its own small ABO ad set ($60-100/day) to see if it scales alone. | Spencer, your 9-01 ABO allowance |
| Bad week | Reduce spend, never pause. A breakthrough gets a bad week before you touch it. | Your rule, Evolve |
| Input | What it does | First read (Dawn) |
|---|---|---|
| Comment miner | Reads every comment on the top 15 posts (FB + IG, hidden included), sorts into objections / untargeted buyers / uses / proof / questions, verbatim | Didn'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 gap | Who buys (survey) and who comments vs who the ads speak to | Independence 18.5% of buyers / 12% of spend; deaf/HoH 0 ads; daily fights and adult self-buyer overserved |
| Hook library | Every labelled hook as a fill-in template, with V&I zone | Winners lean Annoyance / Calm; 44% of losing hooks are Fear vs 18% of winners |
| Image cadence | Winners still spending with no new image (by image hash) in 14 days → 20 ideas, pick 5, one new ad set, copy frozen | 5 due, incl. COLLEGE-02-01 and evolve-sa2-s5 |
| Port queue | Winning bodies × the formats they haven't run (native, static, song, cartoon VO, UGC) | On each brand page |
| Swipes | 10 direct + 10 indirect brands, their 21+ day ads by reach, imitation briefs | Lysa "Mothers picking [X] … consider two things" (= wake / wear doubts); Glowco "From X to Y" (518 days) |
| Moments calendar | Dated urgency without a sale, with launch-by dates | Q1 report cards (launch by Oct 30), Thanksgiving-return Monday, first school morning 2027, spring forward Mar 14 |
| Curvelle mashup lane | 86 shots from the proven 2-26 videos in the b-roll library, for new VO scripts on proven footage | Ready for the next Curvelle video script |
| When | What happens | Who |
|---|---|---|
| Daily 08:40 | Meta pull (read-only) → sheet RESULT sync → labels → Iteration HQ rebuilt | Automatic |
| Monday 09:10 | Comments, persona gap, hooks, image queue, swipes refreshed | Automatic |
| Planning a concept | dawn-native-brief shows the cell's history, objections and moments; the concept is logged at /new/ | You + Claude |
| Launch day | Ads go to Testing, no spend floors, one concept per ad set | You |
| Day 7 from first delivery | Label lands on the hub and the sheet; you log the learning at /new/ → Day-7 learning; the card shows the next move | Auto label, you log |
| After a breakthrough | Study it, then the script and format iterations; Evolve says another breakthrough usually follows within 1-2 weeks of doing this properly | You + Claude |
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.
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.
| Setting | Now | What it does |
|---|---|---|
share_bar | 0.15 | Share of account spend for spend winner / breakthrough |
breakthrough_roas | Dawn 2.00 · Curvelle 2.30 | Click ROAS a breakthrough must clear |
breakeven_roas | Dawn 1.31 · Curvelle 1.5 | Dawn from the 30-day P&L; Curvelle is a placeholder |
kpi_min_click_purchases | 2 | Stops one lucky sale making a KPI winner |
min_impressions | 1,000 | Under this in the live week = starved |
misleading_roas | 0.50 | Spend winner under this gets the misleading flag |
late_upgrade | any | "any" lets later weeks upgrade to any higher label; "breakthrough_only" is Evolve literal |