Step by step · 7 August 2026

What to do, what to click, where to go

Generated from the tracked queue, so this page can never disagree with it. 55 tasks · ~1100 minutes. Tick things off — the page remembers. Finished tasks move to the ✅ Done tab automatically.

Nic’s 12 open tasks are now on this page too — 5 waiting on your approval. Only what you approve reaches his brief.

0 of 55 done
Your work
17 High-impact task(s) sit below your top 15 — in · Everything else, 💷 Money, 💸 Paid, 📧 Email, 📱 App, 🔍 SEO & Content, 🔧 Web & DNS. Nothing is lost; they are one click away under their project.
#Task PhaseTimeImpact
1AGA-164💷 MoneyDUE 18 Aug · 5dNOW5m●●●●●
2AGA-170🔧 Web & DNSNOW3m●●●●●
3AGA-146📧 EmailNOW5m●●●●●
4AGA-147📧 EmailNOW5m●●●●●
5AGA-168🔍 SEO & ContentNOW5m●●●●●
6AGA-139🔧 Web & DNSNOW10m●●●●●
7AGA-161📧 EmailNOW12m●●●●●
8AGA-119📧 EmailNOW20m●●●●●
9AGA-129📧 EmailNOW20m●●●●●
10AGA-134📧 EmailNOW20m●●●●●
11AGA-142🔧 Web & DNSNOW20m●●●●●
12AGA-172💷 MoneyNOW30m●●●●●
13AGA-118📧 EmailNOW45m●●●●●
14AGA-103💷 MoneyNOW60m●●●●●
15AGA-157💸 PaidNOW2m●●●●○
16AGA-175💷 MoneyNOW2m●●●●○
17AGA-178🔧 Web & DNSDUE 22 Aug · 9dNOW3m●●●●○
18AGA-180🔍 SEO & ContentNOW3m●●●●○
19AGA-176📱 AppNOW4m●●●●○
20AGA-138💸 PaidNOW5m●●●●○
21AGA-145📧 EmailNOW5m●●●●○
22AGA-128📧 EmailNOW10m●●●●○
23AGA-136📧 EmailNOW10m●●●●○
24AGA-177· Everything elseNOW10m●●●●○
25AGA-174💷 MoneyNOW15m●●●●○
26AGA-101📧 EmailNOW20m●●●●○
27FLEET-74💷 MoneyNOW90m●●●●○
28FLEET-42📧 EmailNOW120m●●●●○
29AGA-127💷 MoneyNOW5m●●●○○
30AGA-120📧 EmailNOW10m●●●○○
31AGA-121📧 EmailNOW10m●●●○○
32AGA-173📧 EmailNOW10m●●●○○
33FLEET-77💷 MoneyNOW60m●●●○○
34AGA-126📧 EmailWEEK 110m●●●●○
35AGA-46🔧 Web & DNSWEEK 110m●●●●○
36AGA-26📱 AppWEEK 15m●●●○○
37AGA-108📊 TrackingWEEK 110m●●●○○
38AGA-130📊 TrackingWEEK 110m●●●○○
39AGA-62📊 TrackingPARALLEL1m●●●○○
40AGA-30🤝 PartnershipsPARALLEL5m●●●○○
41AGA-102📧 EmailPARALLEL5m●●●○○
42AGA-66📱 AppPARALLEL10m●●●○○
43AGA-67🔍 SEO & ContentPARALLEL25m●●●○○
44FLEET-61📧 EmailPARALLEL40m●●●○○
45FLEET-59📧 EmailPARALLEL45m●●●○○
46FLEET-64📧 EmailPARALLEL50m●●●○○
47FLEET-50📧 EmailPARALLEL60m●●●○○
48FLEET-65📧 EmailPARALLEL40m●●○○○
49AGA-96🔧 Web & DNSWEEK 2+10m●●●●○
50AGA-53🔧 Web & DNSWEEK 2+20m●●●●○
51AGA-132· Everything elseWEEK 2+10m●●●○○
52AGA-16🔧 Web & DNSWEEK 2+20m●●●○○
53AGA-156📧 EmailWEEK 2+5m●●○○○
54AGA-09🔧 Web & DNSWEEK 2+10m●●○○○
55FLEET-49🔀 FunnelWEEK 2+45m●●○○○

The step-by-step

Every task below answers the same four questions: what it is, why it matters, how to do it, and how you know it's finished.

1

🔴 By 18 Aug — cancel a duplicate trial before it dunning-mails a paying member

NOW 5 min Critical AGA-164

What

Cancel one Stripe subscription: sub_1U3ABWI6s6pBAbnmVQgr1ADU. Stripe Dashboard → Subscriptions → search the id → Cancel immediately.

Why it matters

Laurent Frejaville (achatnet43@laposte.net) holds two trialing annual $157 subscriptions on two customer records, both with trial_end 18 Aug 2026. One has a card attached; the other has no card.

On 18 August the carded one bills correctly — and the uncarded one attempts, fails, and starts sending dunning mail to a live paying member. He gets chased for money he has already paid. That is a support ticket and a cancellation risk manufactured out of nothing.

How to do it

  1. Stripe Dashboard → Subscriptions → search sub_1U3ABWI6s6pBAbnmVQgr1ADU
  2. Confirm it is the one with NO payment method attached, then Cancel immediately
  3. Leave sub_1U3MTMI6s6pBAbnm9BmlPxJ1 (the carded one) alone — that is his real subscription
  4. Why this is still yours: you said “cancel it” on 12 Aug and the fleet TRIED by API the same minute — blocked by design (our Stripe key is deliberately read-only; no Subscriptions Write). Both subs re-verified right before the attempt: duplicate still uncarded and trialing, the keeper healthy and untouched

CarefulThis is the same class as the 15 customers / $1,662.86 of overlapping paid periods in AGA-159 — and nothing in the estate watches for these forming. This one we caught before it billed.

Done when

Only one subscription remains on that member, and nothing dunning-mails him on 18 August.

↑ back to the list

2

Paste-and-send, 3 min — Sovat answered 1 of ~10 items and skipped Calisthenics Academy entirely

NOW 3 min Critical AGA-170

What

Open marketing/seo/DEV_REPLY_AFTER_SOVAT_CONFIRM_2026-08-13.md, copy everything below the ---, and send it in the same thread. It is written and ready — no editing needed.

It does four things: (1) thanks him and tells him you verified his answer independently, (2) asks for the one forward-looking sentence he still has not given, (3) puts the four Calisthenics Academy items back in front of him with today’s measurements attached, and (4) re-asks the four short migration-file answers as numbered one-liners.

Why it matters

✅ First, the good news — his claim holds, and I verified it rather than believing it. Run 13 Aug: staging_push_guard.py check returns OK — all 3 production sites intact. TMA’s newest page is 11 Aug 16:17, BWTA’s newest post is 12 Aug 19:02, and CA’s newest page is 11 Aug 17:03 (your 44-link ebook repair, still there). A random 14-page BWTA sample carries 26 quiz-root links with the banner on 12 of 14 — against zero across 14 of 14 on staging. The FAQ schema and the /calisthenics-workout/ title change are both intact. Nothing was lost. BWTA is safe.

❌ But he answered one point of ten, and Calisthenics Academy did not appear in his reply at all. Measured live this morning, all three CA items you raised on 12 Aug are still exactly as they were:
Divi is still 4.4.8 (themes/Divi/style.css?ver=4.4.8). He has BWTA on 4.27.7, so this is not difficulty — CA simply has not had it. Divi added PHP 8 support in 4.8, so this is the real blocker on that site.
The copyright line is still missing — the footer still renders only “Designed by Elegant Themes | Powered by WordPress”.
ClickFunnels is still ACTIVE — the homepage loads app.clickfunnels.com/assets/cfpop.js on every page view, for a paused account. WP File Manager and WP phpMyAdmin are still installed (both readme.txt return 200). Credit where due: WP File Manager Pro returns 404 — that one is genuinely gone.

🔴 And the item that hard-blocks the migration is still unanswered: filesystem confirmation over SFTP that both wp-content/mysql.sql files are actually deleted. You cannot check this from outside — WP Engine blocks .sql at the edge whether the file exists or not — and Rocket.net have told you they cannot exclude files by type during a migration. If those files are on disk when you move, both databases become publicly downloadable on the new host.

How to do it

  1. Open marketing/seo/DEV_REPLY_AFTER_SOVAT_CONFIRM_2026-08-13.md
  2. Copy everything below the --- line and send it as a reply in the same thread
  3. When he answers, paste his reply back to me and I will re-measure every claim in it against the live sites, the same way I did today

Done when

He has given the one written sentence that he will not push a staging database to production for the rest of the project, plus answers on the CA restore point, exact PHP per site, redirect rules for BWTA and CA, the SFTP confirmation on both mysql.sql files, and the Fluent Forms settings. Until the mysql.sql confirmation is in, the migration does not get a green light.

↑ back to the list

3

Activation test to the never-worked-out — ✅ GO given 12 Aug · fleet drafting · next: you review the rendered email

NOW 5 min Critical AGA-146

What

You said GO on 12 Aug — nothing to decide here right now. The fleet is drafting ONE activation email (get workout 1 done — no offer, no discount) to a 500-contact test slice of the app-side contacts who finished the survey but never did a single workout. Your next touch is the REVIEW: rendered email + segment-guard PASS, delivered to this page.

Why it matters

The 10 Aug growth-fleet verdict ranked this #1 of five levers. Measured 12 Aug: the live no_workout pool is 5,906 (the 6,813 this row used to quote was the pre-purge figure), and the payer cross-check found 0 paying customers in it. If 5% activate and 7.3% of those pay, that is ~21 paying customers [MODELLED — benchmarks, not measurements, which is exactly why the 500-contact test comes first].

How to do it

  1. Nothing from you until the draft lands — the fleet drafts via /email-fleet (locked footer, lint gate, activation CTA, NO offer)
  2. The 500 segment is built from %TMA_FUNNEL_STAGE% = no_workout; segment_guard PASS comes to you WITH the draft
  3. You approve the RENDERED email; only then does anything send
  4. Day-7 read of clicks + workout-1 completions decides whether the remaining ~5,400 get it

Done when

500 contacts have received the activation email and the day-7 click/activation read exists — THAT number, not the modelled one, decides the full-list send.

↑ back to the list

4

Quiz CTA slot in 758 Nurture Sequence 2 — ✅ GO given 12 Aug (quiz-takers excluded) · fleet drafting

NOW 5 min Critical AGA-147

What

You said GO on 12 Aug, with your condition recorded: people who already took the quiz are EXCLUDED. ONE slot in 758 Nurture Sequence 2 gets the quiz-root CTA (https://quiz.themovementathlete.com/, UTMs per the link rule) — a single-slot change under the Evolution Law, not an arc rewrite. Your next touch is the review of the rendered email.

Why it matters

The growth fleet's lever #2 ('fix the tap before the bucket'): email produced 0 of the new quiz's first 14 sales while owned surfaces are its best-converting source. Measured 12 Aug: 11,392 contacts in flight; quiz-taker overlap 34.9% by your two markers, 58.1% counting the old quiz-import list — so the exclusion uses all THREE markers, leaving ~4,775 genuine non-quiz-takers. The slot being replaced: “Adam was 35 and felt like he was 75.” — the arc's worst (0.65% unsub, verdict STRUCTURAL).

How to do it

  1. Nothing from you until the draft lands — the fleet drafts the single-slot change via /email-fleet
  2. Exclusion built from all three markers (NEW quiz-* tags · been-in-750 · the Oct-2025 quiz-import list)
  3. Collision + segment checks run against the live automations; results attached to the approval
  4. You approve the RENDERED email; day-7 read: email-sourced quiz leads vs the ~0.1/day baseline

Done when

One live slot in 758 Nurture Sequence 2 carries the quiz-root CTA and email-sourced quiz leads move off zero.

↑ back to the list

5

One decision, 5 min — a page with 232 visitors/28d has no way to take an email

NOW 5 min Critical AGA-168

What

Pick one of three for themovementathlete.com/get-started-with-calisthenics/: (a) I wire it — build the destination (ActiveCampaign via API, UTM hidden fields from day one) and then switch the form back on, so it captures with source attribution from the first submission. (b) Move it to Leadpages, matching your other 9 magnets — one consistent rail. (c) Leave it off and let the quiz-root CTAs do the work; I retire the dead form so nobody re-discovers this in three months. Reply with a, b or c.

Why it matters

This page gets 232 sessions in 28 days (442 in 90) and cannot capture a single email. Measured live on 12 Aug in a real browser at 1280px and 390px: the opt-in form’s container is switched off on desktop, tablet AND mobile — the block source has UAGHideDesktop/Mob/Tab all true, so that is deliberate, not a responsive glitch. The only visible form on the page is the site search.

🔴 It cannot simply be switched back on. The form has no destination at all — none of its 36 attributes carry an after-submit action, a confirmation, a webhook or an email target, there is no entry store, and no submission has ever reached hello@ (the only 4 ‘Spectra’ emails there are WP Engine vulnerability notices). Unhiding it alone would show visitors a form that silently throws them away — worse than today, where they at least see three working quiz CTAs.

⚠️ Size it honestly: at a typical 20–40% magnet opt-in that is [MODELLED] ~45–90 leads/28d. That rate is an industry assumption, not measured on this page — the page has never captured once, so we have no rate of our own.

My recommendation: (a) if you want the email list to grow from content. (c) if the quiz is the only funnel you want to maintain — the honest case for (c) is that the page already routes people to the quiz, and a second capture path is one more thing to keep alive.

How to do it

  1. Read the three options above and reply with a single letter — a, b or c
  2. If (a): I build the AC destination + UTM hidden fields, then show you the form working on a draft before it goes live
  3. If (b): I spec the Leadpages swap to match the other 9 magnets and bring it back for approval
  4. If (c): I retire the dead form block so this cannot be re-discovered as a bug in three months
  5. Whichever you pick, nothing goes live on this page without you seeing it first — page_class returns DRAFT, so it is on the draft-and-approve path

Done when

You have chosen a, b or c, and the page either captures emails with attribution or has its dead form removed on purpose. No third state where a hidden form sits there half-built.

↑ back to the list

6

Tell the dev to update Divi BEFORE touching PHP on Calisthenics Academy

NOW 10 min Critical AGA-139

What

One message to Sovat with a single instruction: on calisthenicsacademy.co, update Divi before anything touches PHP — and confirm the Elegant Themes licence is still live, because the updater needs its API key.

Why it matters

The assessment he is working from is wrong. CA's active theme is Divi 4.4.8, and Elegant Themes only added PHP 8 support in Divi 4.8 — the theme predates PHP 8 support by four minor versions, so upgrading PHP first breaks the site. Page Builder Everywhere is real but is the smaller blocker: its entire footprint was one copyright line in one widget area.

The likely cause of the wrong read: BWA runs Divi 4.27.7, so a check done there looks clean — CA was never separately verified. Re-measured 12 Aug and it still holds: his report said the theme was updated and ‘Divi version verified’, and the live theme is still 4.4.8.

How to do it

  1. Message Sovat: update Divi on CA first, then PHP — never the other way round
  2. Ask him to confirm the Elegant Themes licence/API key is still active (the updater needs it)
  3. Ask him which PHP version CA is on today — we cannot read that from outside WP Engine
  4. Ideally the whole job moves onto Rocket staging rather than being done on WP Engine at all

CarefulThis one is order-of-operations, not opinion. If PHP goes first on a Divi 4.4.8 site, the site breaks — and CA has already been damaged once this week.

Done when

The dev has confirmed the Divi-before-PHP order in writing, and we know what PHP version CA is actually running.

↑ back to the list

7

One builder visit — the workout-1 email + 2 conditions

NOW 12 min Critical AGA-161

What

Three things in one ActiveCampaign sitting, about 10 minutes: build one small automation, add one ending-condition to ONE welcome arc, and the promo-opt-out condition you already have queued.

Why it matters

The highest-intent moment in your whole funnel currently carries no email at all — the morning after someone finishes their FIRST workout. About 48 people a day reach it. Someone who trained yesterday is a different person from someone who just downloaded an app: they have felt the product, so the ask stops being “buy something” and becomes “keep doing what you did yesterday”. Everything on my side is built and running. A nightly job reads the app’s data out of Intercom, finds everyone whose workout count went from 0 to 1, excludes payers four separate ways, and puts the label workout1-yesterday on them by about 03:30. That label is the bridge — ActiveCampaign never has to see the app. What ActiveCampaign will not let me do is create an automation or add a condition. That is the whole of your 10 minutes.

How to do it

  1. PART 1 — the new automation (about 6 clicks).
  2. Automations → Create an automationStart from scratch.
  3. Trigger: choose “Tag is added” → pick workout1-yesterday (it is already in the list — I created it) → set Runs: Once, not “multiple times” → Add start trigger.
  4. Click the +Wait → set it to wait until 8:00am in the contact’s time zone. If your screen only offers a plain duration, set 5 hours and tell me — the label lands at ~03:30 so that arrives ~08:30, and I will re-time the job to make it exact rather than guess at your screen.
  5. Click +Send an email. 🔴 Use a placeholder and do NOT open the designer. Pick any template, type W1 morning after as the subject, save and close. I write the real email into it by API — the same thing I did to about sixty emails this week. Designing it is the part that would eat your time; it is not your job.
  6. Leave the automation Inactive. Copy the automation ID out of the URL (…/app/builder/XXXX) and send it to me. I put the real email in, check it renders, push one test contact through the whole chain, and switch the nightly job on. Then you flip it Active.
  7. PART 2 — stop one arc double-asking (about 2 min). 🔴 This is ONE arc, not two — I had this wrong first time.
  8. Open 750 TMA | Welcome Sequence After Quiz. It already contains a goal block called “If customer - END” — add a second one just like it, with the condition has tag workout1-done. That ends the automation for anyone who has trained.
  9. Why only this arc: its entire job is getting the person to workout 1, so once they train the job is done — and two of its emails turn false (W3 “how did your first workout feel?” and W4 “have you pressed start yet?” would be asking someone who trained yesterday whether they have started), while W7’s trial ask would repeat the morning-after email days later.
  10. Why NOT 992 or 967: doing a workout is not the same as being measured. Someone can finish the app’s generic example workout without ever taking the quiz — so those arcs’ “get measured free” argument is still true after they train, and neither of them contains a “have you started yet?” nudge. Leave both alone.
  11. PART 3 — while you are in there (about 2 min). On 993 SALES SEQUENCE, add the condition Tag promo-opt-out does not exist to its entry. That is AGA-145: every email in that arc promises “reply STOP to promo emails” and the label gets applied — but nothing reads it, so someone who opts out today keeps receiving it. The arc is live with 121 people in it.

The job is deliberately switched OFF until the automation exists — it would otherwise label people with nowhere to send them. 🔴 One honest flag: the wait-until-a-time wording differs between ActiveCampaign accounts. If your screen does not match, do not wrestle with it — screenshot it and I will give you the exact path for your version instead of guessing.

Done when

The automation exists (still Inactive) and you have sent me its ID; 750 ends for anyone carrying workout1-done; 993 excludes promo-opt-out. Then I write the email, verify a test contact end to end, arm the job, and tell you to switch it on.

↑ back to the list

8

The annual offer to the engaged — ✅ unblocked 12 Aug: your shells found, the 'halving' explained, rewrite GO'd

NOW 20 min Critical AGA-119

What

Sell the annual plan to the engaged tier. All three blockers moved on 12 Aug. (1) The Engaged 'halving' is SOLVED — it was mechanical: the tag is a rolling 28-day window and the July sale wave aged out with zero broadcasts since 12 Jul to refill it. Nobody was lost — they sit in Disengaged with July dates. (2) The email DOES exist — your six P1 ANNUAL shells were found and reviewed (E1 The Honest Math · E2 Heath · E3 The Quiet Close, finished copy since 21 Jul, plus your three 12-Aug clones awaiting content); you gave GO for the fleet rewrite the same day. (3) Only the 967 unsub gate (0.51% vs 0.5% hardstop) still needs to clear.

Why it matters

Annual buyers churn 9.1%/mo vs monthly's 36.7%, and no broadcast at this scale has ever gone out. Honest audience numbers: ~2,350 = engages even with no sends (the floor) · ~6,000 = broadcast-reachable engaged, buildable as “opened since 1 July” — the recommended denominator. The formal pick goes through the deliverability + segment-integrity seats (FLEET-53's last open piece).

How to do it

  1. Nothing from you right now — the fleet is rewriting the six shells (white canvas, formatting law, fresh UTMs, real plaintext, the three clones given their slots)
  2. Audience built as “opened since 1 Jul” (~6,000), excluding buyers via the ever-paid set; segment-integrity PASS attached
  3. Collision-checked — never the same week as the 50%-off falsifier (FLEET-38) or the warm pool (AGA-118)
  4. Then it comes back to you, and your decision is ONE thing: read the rendered emails and pick the week
  5. Day-7 read lands on the scoreboard: sends → clicks → annual starts, reconciled to Stripe

Done when

The engaged tier has been made the annual offer against an audience number we can defend, the day-7 read exists, and the mix shift (annual share of new sales) is measured against the 36.8% baseline.

↑ back to the list

9

The weekly quiz-root send — ✅ GO given 12 Aug · it will be the FIRST weekly send (none was running) · fleet drafting

NOW 20 min Critical AGA-129

What

You said GO on 12 Aug. One send to the engaged tier carrying the quiz-root CTA (https://quiz.themovementathlete.com/, UTMs per the link rule). Premise corrected by measurement: no weekly send was actually running — nothing has broadcast since 12 July — so this email is the FIRST instance of the weekly rhythm the cadence doctrine calls for, not a link swap in an existing one. Quiz-takers excluded per your condition; your next touch is the review.

Why it matters

Email produced exactly 1 quiz lead in 8 days — and it landed on the DEAD 2026-v2-3 build (via 967 TMA | Welcome Sequence After LEAD MAGNET E7/E2, which still links the old URL). Meanwhile ~14,600 sit in 758 Nurture Sequence 2 with no priced offer, and 4 of the 8 provable $97 buyers came from our own surfaces — owned traffic is the highest-converting source the $97 funnel has, and it is free. Rough sizing: 6,000 reached × 1–2% CTR ≈ 60–120 best-qualified visitors ≈ 1–3 × $97 sales per send [ESTIMATE].

How to do it

  1. Nothing from you until the draft lands — the fleet drafts via /email-fleet (locked footer, lint gate, cadence collision check)
  2. Audience: the engaged tier per the cadence doctrine, quiz-takers excluded by all three markers (their overlap on the live engaged tag measured at 0.3–34.2% depending on marker)
  3. You approve the RENDERED email (nothing sends unseen) — and this send starts the standing weekly rhythm that keeps the Engaged window from draining again
  4. Day-7 read: email-sourced quiz leads vs the current baseline of ~0.1/day

Done when

One weekly send to the engaged carries the quiz-root CTA, and email-sourced quiz leads move off ~zero on the scoreboard.

↑ back to the list

10

Read the “Your decisions” tab — 4 open calls in one 10-min sitting (incl. this row's own fate)

NOW 20 min Critical AGA-134

What

The journey page now has a dedicated “Your decisions” tab (you asked for it 12 Aug — built and live the same day): every call that is genuinely yours, open ones on top, settled ones collapsed below as your ruling history. One read covers the four open calls — J5-NEXT (GO the rewrite of slot 2985, the welcome arc's worst — now flagged as needing re-measurement, since YOUR 10 Aug arc rebuild replaced the slots it was scored on) · WB6 (reinstate PAUSE — for annual members it is freeze-the-term) · WB7 (ask WHY on the cancel screen before any offer). W-D5 shows as done — you executed it yourself in the 10 Aug rebuild.

Why it matters

This row began as “approve the welcome-rebuild design (W-D1–D4)” — but your own 10 Aug ruling (“we have a spine, why create a new one? we can personalise the current emails”) superseded that design: evolve, don't rebuild — the spine is shelved, and the tab's W-D1–D4 card records exactly that. So the likely outcome of your read is that THIS row closes as superseded — say “close 134” and it moves to your Done tab. The personalisation work continues slot-by-slot regardless (J5-NEXT is its first move).

How to do it

  1. Open the “Your decisions” tab (second tab on the journey page)
  2. Rule on the open cards — a word each is enough (“WB6 yes”, “WB7 yes”, …)
  3. If you agree the rebuild-GO is superseded by your own evolve-don't-rebuild ruling: say “close 134”
  4. Bonus 30 seconds, next time you are in the AC builder anyway: open 754 Part 1 - Engagement Tagging and tell me whether ENGAGEMENT means opens or clicks — the one fact about the Engaged tag the API cannot read (FLEET-53's last confirmation)
  5. The fleet executes what you rule and every ruling lands on the tab as history

Fallback remains the heart of whatever personalisation ships: every personalised slot has a floor sentence, so an email rendered with ZERO data is simply a great generic welcome.

Done when

You've read the tab and ruled (or explicitly deferred) on the 4 open calls — and this row is either closed as superseded or re-scoped to whatever you kept alive.

↑ back to the list

11

Rotate 3 leaked passwords — one is a live WordPress admin on Calisthenics Academy

NOW 20 min Critical AGA-142

What

Three passwords are sitting in plaintext in a repo file, and one of them belongs to an account that is currently an administrator on calisthenicsacademy.co. Rotate them, and tell me whether to remove the stale admin user.

Why it matters

Found 10 Aug in SUPPORT/Ca SUPPORT SOPs.txt (~20 password lines from the Calisthenics Academy era). ✅ Contained: I verified the file is tracked locally but was never pushed to origin — same shape as the July token find. I have added SUPPORT/ to .gitignore, which stops it reaching a remote but does not fix an already-committed secret. Only rotation does, and rewriting git history is forbidden here.

🔴 The live exposure is #1: jeffcowancc@gmail.com — its password is in the file and that Gmail is an administrator on CA (WP user calisthenicsacademy-2). Anyone with that password can password-reset their way to full control of the site.

How to do it

  1. Change the jeffcowancc@gmail.com Gmail password — this is the one that actually matters
  2. Tell me whether to REMOVE that WordPress admin account — it is the old CA support person, and I would not delete a user without your word
  3. The Drift and UserEcho logins for hello@calisthenicsacademy.co are both services we no longer use — cancel them rather than rotate

CarefulCA already had a compromise in 2020, and the plugins behind that CVE family are still active on it today. A leaked admin route into that particular site is not theoretical.

Done when

The leaked Gmail password is changed, the stale WordPress admin is either removed or explicitly kept, and the two dead services are cancelled.

↑ back to the list

12

The biggest pile of certain cash we have — and the emails are already written

NOW 30 min Critical AGA-172

What

Say GO on sending the recovery notes to 39 members whose renewal payment failed, and tell me who sends them — you or Leih. The emails already exist: both recovery lanes run every morning and write the drafts. Nobody has ever pressed send.

Why it matters

Measured live on 12–13 Aug against Stripe. Of 100 failed charges in 30 days, ZERO are new-checkout declines — every one is a renewal on an existing paying member. Deduped past Stripe’s automatic retries: 44 invoices · 39 customers · $2,969.76 at risk · 6 recovered · $2,759.92 still unpaid.

🔴 That unpaid figure is roughly 40% of the entire monthly cash gap, and it is sitting in people who already chose us and never chose to leave. The top decline reason is insufficient_funds (43) — a timing problem, not a rejection. Most of them do not know it happened.

There is no clever fix left. Stripe’s own recovery is already configured as well as it can be — Smart Retries four times a month, every recovery email on, the card-updater on. I checked, so there is no toggle for me to flip and no automation for me to build instead. Our two lanes are drafts-only by design: today they read in_window 22 · actioned 0 · recovered 0. The machinery works perfectly and stops one inch from the finish line.

⚠️ Honest sizing: our recovery has roughly halved (13.6% now vs 30.3% over the prior year), and outside benchmarks put layered recovery near 70% against ~47% for retries alone. Expect a share of $2,759.92, not all of it — but every week unsent turns recoverable invoices into dead ones.

How to do it

  1. Reply GO — and name the sender: you, or Leih
  2. I hand over the exact list (39 people, amount, decline reason, how long it has been failing)
  3. They go as plain 1:1 notes from hello@ — no template, no marketing footer; the rail already exists
  4. I read the recovery at 14 days and tell you what actually came back, measured in Stripe, not in opens

Done when

The 39 drafted notes have been sent by a named person, and I have a measured recovery figure at 14 days. No state where the lane keeps writing drafts nobody sends.

↑ back to the list

13

The warm pool (saw the paywall / clicked buy) — catch-up send still real; audience re-cut 12 Aug, fleet drafting

NOW 45 min Critical AGA-118

What

Approve emailing the two warmest segments we own: the people who reached the paywall and did not click buy, and those who clicked buy and never paid (90-day pools). Premise re-verified 12 Aug: PARTLY TRUE and the send survives — no at-scale send has ever gone to them, and the paywall-seen cohort still gets nothing targeted. What changed: abandoners since 7 Aug DO get Nic's 1-hour email + a daily personalised draft, so the audience gets re-cut before sending: exclude buyers, the 39 personally noted on 7 Aug, the 1-in-5 holdout, and anyone inside the live 0–7-day abandonment window.

Why it matters

The revenue plan calls this the best paid audience in the business and orders the FREE version first — email before retargeting. Re-verified 6 Aug in the AC campaign log: nothing at this scale has ever been sent (newest real broadcast: 24 sends). The fleet drafts through /email-fleet, runs send_collision_check.py, and shows you the rendered emails; your part is the yes and the cadence slot.

How to do it

  1. Drafting proceeds under the 12 Aug plan (drafts are always safe — nothing sends unseen): paywall-seen → objection-answer; buy-clicked → finish-checkout, via /email-fleet, AFTER the four packages ahead of it in the build queue
  2. Review the rendered emails when they land (you see them open in the browser, per the email rule)
  3. BOTH collision checks run (send_collision_check.py + abandon_collision_gate.py); results attached to the approval
  4. You pick the send slot inside the weekly-cadence doctrine — never the same week as the annual offer (AGA-119) or the 50%-off falsifier (FLEET-38)

Done when

Both segments have received their email, opens/clicks/purchases are read at day 7, and the paid-retargeting version of the same pools inherits proven copy.

↑ back to the list

14

The cut list — ~1h of clicking for ~$1,650–2,180/mo of certain cash

NOW 60 min Critical AGA-103

What

Cancel a ranked list of subscriptions. Tier 1 is six clean kills; Tier 2 needs one question each; Tier 3 needs your ruling.

Why it matters

This is the only item on your board that is CERTAIN. Everything else is a rate we hope will move — this is money already leaving your account every month. ~$1,650–2,180/mo is 29–38% of the $5,667 gap, closed by clicking. It exists because all 17 fleets point at revenue and none points at cost: the 5 Jul CFO report found £2.9–4.3K/mo recoverable 'without cutting people or growth', then sat in a folder called RESCUED_TEMP_DOCS for a month and generated zero tasks.

How to do it

  1. TIER 1 — six clean kills, £533/mo, zero repo references. Kajabi £187 · Atlassian £130 · The One Percent £74 · Envato £71 · Paddle Retain £37 · Typeform £34. No question needed on any of them.
  2. TIER 2 — £700–1,100/mo, one question each. 🔴 Start with AWS £296/mo — probably your best-value five minutes anywhere: the app runs on DigitalOcean and nothing in the repo references AWS. Confirm what it is before killing it.
  3. TIER 3 — Intercom £221/mo: your ruling. The CFO report says kill; your settled ruling says "don't drop Intercom". That ruling was made without the cost number in front of you, which is why it is back.
  4. 🔴 Confirm every cut on the NEXT STATEMENT, never on the cancellation screen. A cancellation screen says what it intends; a statement says what happened.

Three CFO verdicts were overturned before this reached you: Tapfiliate £66 = KEEP (it returns ~£275/mo net — killing it would have destroyed 4× its cost) · WP Engine is superseded by the Rocket.net decision (~£260/mo, its own track) · Intercom escalated rather than actioned.

Done when

Each cut confirmed absent from the following month's statement — not merely cancelled on screen.

↑ back to the list

15

🟡 HOLD until 13 Aug — then a 2-minute GO/NO-GO on Google hardware negatives

NOW 2 min High AGA-157

What

A 2-minute read-then-decide. If you say GO, the fleet executes it by API — you are not clicking anything in Google Ads. The change is set-level negative keywords on Quiz Funnel | Competitive Non-Branded | US.

Why it matters

30-day totals: £235.89 / 32 clicks / 0 conversions — and zero all-conversions — while both siblings converted (Competitors Branded £311.57 → 24; Non-Branded £241.33 → 6). All 60 still-enabled keywords are equipment phrases, and the campaign carries zero negatives and zero shared negative lists. The money has been buying ‘backyard calisthenics setup’ £9.94, ‘outdoor calisthenics gym’ £8.46, ‘wooden parallettes’ £7.91, ‘dip bar for home’ £3.26 — hardware shoppers, and we sell a programme.

This also corrects an argument we have made ourselves: ‘never pause, 59 of 66 keywords are untested’ is right in general but does not transfer here — the untested 60 are the same equipment-intent class that has already spent £235.89 for nothing.

How to do it

  1. Do nothing until 13 Aug. Read the campaign then
  2. If spend is still ~£6–9/day on hardware search terms → the set-level fix is needed. Say GO
  3. If there is a material sustained drop → Nic's round worked. Stand this row down and let the campaign have its clean fortnight to the 24 Aug gate
  4. On GO the fleet adds campaign-level hardware negatives: bar, bars, parallettes, equipment, gear, machine, station, vest, kit, setup, buy, for sale, cheap

Careful🔴 Do not run this before 13 Aug. Nic did the keyword surgery on 11 Aug — bid changes on 5 keywords at 14:36, the 3 remaining spenders paused at 20:15. Writing negatives on top of that makes his round unreadable. 12–13 Aug belong to him.

Done when

Either the negatives are live and the 24 Aug gate reads a clean campaign, or the row is stood down because Nic's surgery already fixed it.

↑ back to the list

16

2 min — we quote a monthly member two different prices for the same annual plan

NOW 2 min High AGA-175

What

Pick which annual-upgrade price is the real one. Your email engine 990 Monthly→Annual Upgrade Engine (Jul 2026) offers monthly members the year at $129 (your 21 Jul recognition offer, yearly2). The new in-app upgrade screen can only render the store price — $159.99. A member who gets the email and then opens the app sees both, and the app’s is $30.99 worse.

Why it matters

Verified live 13 Aug against the App Store Connect API ($159.99) and the Stripe API (yearly2 $129, active, wired into the 990 engine’s tagging). Same defect family as the cancel downsell showing annual leavers a worse deal than our standing offer — two of our own surfaces undercutting each other. The upgrade screen ships either way; it renders whatever the product costs on the member’s rail.

How to do it

  1. Option (a) — match the app: the RN team adds a ~$129.99 store price point (one ASC/Play act, on RN-02’s pile)
  2. Option (b) — match the email: the 990 offer moves up to $157/$159.99 (one automation edit, weaker offer)
  3. Option (c) — scope each offer to its own rail and accept a member can see both
  4. Reply with a / b / c — anything else about the screen is already decided and in the spec

Done when

One reply (a, b or c) recorded; the losing price is scheduled to change or the overlap is explicitly accepted. No state where both surfaces keep quoting different prices undecided.

↑ back to the list

17

⚖️ 2 min — the COPYTRACK image is already down; open the draft in hello@ and press send

NOW 3 min High AGA-178

What

Open the hello@ Gmail thread with COPYTRACK (subject “Regarding your publication on themovementathlete.com”). A reply is sitting there as a draft, ready to send. It tells them the image is removed and asks them to close case F28C3D. Read it, and if you are happy — send. That is the whole task.

Why it matters

COPYTRACK (for Panther Media Global) claims one image on /gain-muscle-with-calisthenics/, deadline 22 Aug. The fleet identified it from the thumbnail in their own email: 2019/06/white.jpg — a stock photo of a man breathing, uploaded 27 Jun 2019 with no caption, no alt, no licence record anywhere in the repo or WP. Already done on 13 Aug: the image block is out of the live article, the file is deleted from WP (both URLs now 404), an evidence copy is archived, and the reply is drafted in the thread. Only the send is yours — it is outward legal correspondence.

⚠️ One honesty flag before you send: removing the image stops the ongoing use but does not legally erase the past use — COPYTRACK may still come back asking for a retroactive licence fee (typically a few hundred euros). If they do, that is a new decision for you — do not negotiate by email, and do not pay anything without deciding deliberately. Often they close quietly once the image is down; sometimes they don’t.

How to do it

  1. Open the hello@ inbox → Drafts (or the COPYTRACK thread itself) — the reply is the draft at the bottom of the thread
  2. Read it — it confirms no licence was found in our records, states the image and file were removed 13 Aug, and asks them to close the case
  3. Send it. Nothing else to write
  4. If they reply demanding a fee: forward it to the fleet BEFORE answering anything

Done when

The draft is sent before 22 Aug. Case either closes or their next move comes back to the fleet for a deliberate decision — never an email negotiation.

↑ back to the list

18

⏱️ 3 min in Search Console — Google is showing searchers a URL that ends in “-test”

NOW 3 min High AGA-180

What

Open Google Search Console, pick the Bodyweight Training Arena property, and use URL Inspection (the search bar at the top) on two addresses, one after the other. For each: paste it, wait for the check to finish, then click REQUEST INDEXING. That is the whole task — you are not changing anything, just asking Google to come and look again.

Why it matters

On the phrase “calisthenics workout” — the single biggest search term this site has — Google is currently showing people the wrong address. Instead of our proper page it lists a duplicate whose URL visibly ends in -test, which then bounces them to the real one.

Here is the part that makes it worth your three minutes: almost the same number of people are seeing us as before, but far fewer are clicking. Combined visits to that page fell from about 254 a week to about 76, while the number of times we appeared barely moved. A result that looks like a test page is a very plausible reason people scroll past it.

Nothing is broken and nothing needs fixing — I checked all of it live today. The redirect works, the page tells Google it is the original, and no link anywhere on the site still points at the old address. Google simply has not come back to re-read any of that yet. Asking it to is the only lever that speeds this up, and it is the one lever I do not have: our Search Console access is read-only, so I can look at the data but cannot press this button.

How to do it

  1. Go to search.google.com/search-console and choose the Bodyweight Training Arena property
  2. Paste https://bodyweighttrainingarena.com/best-calisthenics-workout/ into the inspection bar at the top, press enter, wait for it to finish
  3. Click Request indexing — then wait for the little confirmation box
  4. Do exactly the same for https://bodyweighttrainingarena.com/calisthenics-workout-a-simple-way-to-get-started-with-calisthenics-test/ so Google re-reads its redirect too
  5. That is it — close the tab

Done when

Both addresses show “Indexing requested”. Google usually acts within days to a couple of weeks; the fleet is watching the weekly numbers and will tell you when the “-test” address stops appearing.

↑ back to the list

19

Paste two ready-made Jira tickets to the RN team (4 min, nothing to write)

NOW 4 min High AGA-176

What

Open marketing/aso/RN_JIRA_TICKETS_2026-08-13.md and paste the two tickets into Jira. Both are written in full — title, body, priority. There is nothing left to compose.

Why it matters

⚠️ First, a side-effect of your own ruling I have to flag. When you said the build is the RN team's job and not Nic's, I moved NIC-111 to RN-03 — correct — but that also took it off Nic's board, and RN-owned rows render on no page anywhere in our estate (both to-do generators skip non-Nic owners by design). So the single act that ships the whole staged App Store package currently has no route to anyone except through you. I have no Jira credential and there is no Jira client in the repo, so I genuinely cannot file these myself.

Ticket 1 is the one that matters — attach a build to iOS 1.70.72 and submit. It has sat in “Prepare for Submission” since 30 July with no build, which greys out the Submit button, and it is holding four finished things hostage: the corrected keyword field (the live one wastes ~86 of its 100 characters on beachbody, butt and a duplicated diet), the support-URL fix (the live one 404s — a known App Review rejection reason), and the title + subtitle you approved on 12 Aug. Roughly 87–96% of our iOS installs come from App Store search, so the keyword field and subtitle are precisely what we rank on. It also blocks any non-branded Apple Search Ads test, because Search Match targets off listing metadata.

Ticket 2 — a ~45-minute capture session on the current build. We have 0 of 3 App Previews, Apple requires real in-app footage, and there are zero app screen recordings anywhere in our asset estate — so the preview videos cannot be made without it. It also asks them to fix two typos visible in our live store art right now: the workout screen renders “Dumbells”, and the app mixes “personalised” and “personalized” on the same screen.

How to do it

  1. Open marketing/aso/RN_JIRA_TICKETS_2026-08-13.md
  2. Paste Ticket 1 (attach a build to 1.70.72 and submit) — mark it High
  3. Paste Ticket 2 (the capture session) — Medium
  4. Ask for one thing back on Ticket 1: the submit date, or what it is stuck on

Done when

Both tickets are in Jira and you have a submit date for 1.70.72. Until that build ships, nothing in the staged App Store package — keywords, title, subtitle, support URL, or any new screenshots — reaches a single user.

↑ back to the list

20

Decide the Remarketing Playbook — two calls left (item 1 is struck)

NOW 5 min High AGA-138

What

Read the playbook (~5 min) and rule on two things: how far to un-pause Meta, and the shape of the Google abandoner ladder.

Why it matters

(2) Meta un-pause is DEMOTED to a small experiment. The ‘10 purchases at £2.41’ that justified a bigger un-pause was double-counted AND window-cropped; the honest figure is 5 purchases at £67.48 full-life — and all of them bought a $297 offer that ended 12 Jul. So the case for scaling it is much weaker than it first read.

(3) The Google abandoner ladder at £12/day — rung 1 is fine; rung 2 must move to days 17–30 so paid does not undercut the welcome email's only full-price ask on day 10. Two of our own channels bidding against each other for the same person is the thing to avoid.

How to do it

  1. Read the playbook — it is one page: https://docs.themovementathlete.com/remarketing-playbook/
  2. Rule on Meta: run it as the small experiment, or leave it paused
  3. Rule on the Google ladder: confirm rung 2 moves to days 17–30
  4. Execution is Nic's lane (your 11 Aug ruling: the ad accounts are his job) — and he is already moving: Google audiences BUILT (web-visits + cart-abandoners × 7/14/30d), Meta 6 audiences in progress, swipe deck due 13 Aug. Building audiences does not decide these two calls — they are still yours

Item (1) is struck and will not come back. Its two halves are both dead: the $297 lifetime price measured gone from /start-training/ on 12 Aug (0 occurrences in the served page), and the other half was the rating defect you backlogged on 11 Aug. It was sitting inside this row where the row's own status could not show it.

Done when

Meta has an explicit run-or-stay-paused decision sized on the honest number, and the Google ladder no longer competes with our own day-10 email.

↑ back to the list

21

993: build the promo-opt-out exclusion — 5 min, the arc is live and promises it

NOW 5 min High AGA-145

What

One condition in the AC builder: add Tag does-not-exist promo-opt-out to the standing exclusion on every promo send path — 993 SALES SEQUENCE’s entry first, then any promo broadcast segment.

Why it matters

Every email in 993 SALES SEQUENCE promises “reply STOP to promo emails” and tags the replier promo-opt-out. The tag exists (I created it, id 63977) — but nothing reads it yet, so a member who opts out keeps receiving the arc. That was tolerable while it was paused; you armed it, 115+ are in flight, so the promise is now live and unkept. The exclusion condition lives in automation segment logic the API cannot write — genuinely builder-only.

How to do it

  1. ActiveCampaign → Automations → 993 SALES SEQUENCE → entry/segment settings
  2. Add condition: Tag · does not exist · promo-opt-out
  3. Same condition on any promo broadcast segment you send to (the broadcast-cadence doctrine list)
  4. Tell me it’s in — I’ll verify a tagged test contact is actually skipped

Found by the new tma-ac-upload-integrity gate on its second run — the same sweep also proved both of today’s content writes landed intact.

Done when

A contact carrying promo-opt-out cannot receive a 993 email or a promo broadcast; verified with a test contact.

↑ back to the list

22

Add the split step in 991 — 10 min, and the test runs

NOW 10 min High AGA-128

What

In the ActiveCampaign builder, add a 50/50 Split to 991 NEW Re-Engagement so half get the current first email and half get the new one. It is the only thing left.

Why it matters

You said “split it” — this is that, and I genuinely cannot do it: POST /api/3/automations/991/blocks returns 405 Method Not Allowed, so automation steps can only be built in the UI. I checked the ways round it too — cloning to a parallel automation is equally builder-only, and a standalone broadcast would skip R2/R3 and the suppression logic and break the arc. Everything else is done: the challenger is written and through every QA gate (including a flow gate it failed first and was fixed, not waved through), 8,765 contacts are cleaned, and the bounce circuit-breaker is armed. The current email gets 2 clicks per 478 sends — 0.42%, while 28% open it. This settles whether an easier ask fixes that, for every re-engagement email we send after this one.

How to do it

  1. Open 991 NEW Re-Engagement - For people who stopped opening Before Sunset in the automation builder
  2. Add a Split action immediately after the start, BEFORE the first email — set it 50/50
  3. Leave path A on the existing R1 (“You’ve ignored my last 19 emails. Fair.”, campaign 4109)
  4. Point path B at the new challenger — the HTML is at marketing/email-sequences/991-r1-challenger-3choice-2026-08/R1B-three-choices.html (already open on your screen)
  5. 🔴 Keep the subject IDENTICAL on both arms. Deliberate — the subject earns 28.24% opens and is not the problem; changing it too would confound the only thing being tested
  6. Let both paths rejoin afterwards so R2, R3 and the suppression logic are untouched
  7. Tell me it’s live and I start the feed and read it at 7 days

Done when

Both arms are running on the same 8,765 people, and in about a week we know — on CLICKS, never opens — whether an easier ask wakes a dormant list. Either answer is worth having.

↑ back to the list

23

Approve three wording fixes in the live T+1h abandon email — they ship to Nic as one

NOW 10 min High AGA-136

What

Say yes to three corrected wordings. They then go to Nic as one small deploy, alongside NIC-94 which already touches the same estate.

Why it matters

The email is ‘Try the app on us — your results are ready’ — the ~1h post-checkout send doing about 30 in 4 days at 29.3% open. Read live 7 Aug, its copy publishes:

(1) the retired 4.9★ — the published figure is 4.8. FLEET-14 swept the whole estate to 4.8 and missed this one because it lives in Django, not in AC or WordPress.
(2) ‘Backed by Lead Sports Accelerator — led by Adidas and ex-Red Bull executives’. Canon is ‘the LEAD Sports Tech Accelerator — run by the Adidas family and ex-Red Bull executives’. It drops ‘Tech’ and turns ‘run by the Adidas family’ into ‘led by Adidas’ — a corporate endorsement we cannot evidence.
(3) the T+0 results email additionally promises ‘goodbye to that annoying joint pain in just 30 days’ to every quiz finisher — a dated outcome claim we cannot stand behind.

How to do it

  1. Read the rendered copy — the SendGrid group at the top of the review doc
  2. Say yes to all three wordings (or amend any of them)
  3. They ship to Nic as one deploy with NIC-94, which already covers the "[Chosen Password]" literal in the same estate

This is a different surface from the checkout/landing-page rating rows you backlogged — this one is rendered by Django and has never been swept.

Done when

The live abandon and results emails carry the published rating, the accelerator's real name, and no dated outcome promise.

↑ back to the list

24

One decision, 10 min if you choose to act — a YouTube token with delete rights over all 869 videos is in git history

NOW 10 min High AGA-177

What

Decide between two options and tell me which:

(a) ROTATE (recommended). Open Google Cloud console for the TMA Google account → APIs & Services → Credentials → revoke the OAuth token, then tell me and I re-run tools/youtube-analytics/youtube_write_auth.py to mint a fresh one. About 10 minutes of your time, and it ends the exposure completely.

(b) ACCEPT. Leave it. The repo is private with two collaborators. Costs nothing today and leaves a live credential recoverable from history.

Why it matters

What the token can do: token_youtube_tma_write.json carries the youtube.force-ssl scope — edit and delete rights over all 869 videos, their descriptions and their comments. It was committed to git in the master repo, whose remote is the GitHub repo calisthenicsacademy/AIwebapp_sandbox.

What I already did (13 Aug): untracked both YouTube tokens and extended .gitignore to the whole token_youtube*.json family, so they can never be re-committed. I also verified via git ls-files on the shared git-dir that neither token ever reached Nic’s repo.

🔴 Why it is still your call: untracking does not erase history. Anyone with access to that repo can still recover the credential from an old commit. Revoking an OAuth token needs the Google Cloud console UI, and rewriting shared git history is destructive — neither is the fleet’s decision to make.

Not urgent, not ignorable. Private repo, two people, no evidence of misuse — but the blast radius is the entire YouTube channel.

How to do it

  1. Choose: rotate, or accept and close this row.
  2. If rotating: revoke the token in Google Cloud console (TMA Google account → APIs & Services → Credentials).
  3. Tell me it is revoked — I mint the replacement and re-verify the YouTube tools still run.
  4. If accepting: say so and I close the row with your ruling recorded.

Done when

Either a fresh write token is minted and the old one is dead, or you have ruled ACCEPT and the row is closed with that decision on the record.

↑ back to the list

25

81 people in the cancel queue have never been contacted at all

NOW 15 min High AGA-174

What

Say GO or NO on sending the save email to segments B and C of the cancel-save queue — 81 members who have had nothing.

Why it matters

Live today: the queue holds 107 members / $1,506.17 of MRR — A 26, B 60, C 21. Segment A has been sent (59 emails). B and C both read sent: 0 and have been waiting on your authorisation since 20 July.

The honest read on A first, because it should shape your answer: 59 emails produced 2 saves / $34.96 of saved MRR, with 32 now expired — a 3.4% save rate. This is a modest lever, not a rescue, and I am not going to dress it up. The case for doing it anyway is that 81 people currently get nothing, and the emails and segmentation already exist.

🔴 The cockpit had been showing you this wrong. Its task table said ‘Seg A sent 20 Jul, 30 emails, 0 saves’ while the live band on the same screen said 59 sent / 2 saved. That contradiction is one of the stale things now removed — the tab no longer carries its own task list.

How to do it

  1. Reply GO or NO for segments B and C
  2. If GO — they send from hello@ as plain 1:1 notes, the same rail segment A used
  3. I report saves and saved MRR against the 3.4% baseline A set, so you can see whether it is worth continuing

Done when

B and C have either been sent and measured, or explicitly ruled out — not left unsent in a queue for another month.

↑ back to the list

26

BWTA has no SPF, no DKIM and no DMARC — publish all three

NOW 20 min High AGA-101

What

Publish three TXT records on bodyweighttrainingarena.com and flip one switch in Google Admin.

Why it matters

🔴 Proven on a real message header, not inferred. Mail claiming to be from BWA carries no authentication a receiver can check — spf=none, and the only DKIM signature belongs to the host (mail1.wpengine.com) rather than to us, so it doesn't align. Two consequences on our biggest property (1.9M impressions): inbox placement rests entirely on IP reputation, and anyone can send mail as this domain with nothing to stop them. All three records are free and none of them change mail routing.

How to do it

  1. You do NOT need a new Cloudflare account — the zone is already there (heather.ns/zeus.ns.cloudflare.com). You need the login to the existing one
  2. Full click-by-click, either for you or to hand to the external dev: the BWTA email authentication work order
  3. Record 1 — TXT on @: v=spf1 include:_spf.google.com ~all
  4. 🔴 Record 2 (DKIM) is the one that matters and only you can generate it — it needs Workspace super-admin. Google Admin → Apps → Google Workspace → Gmail → Authenticate email → select the domain → Generate new record (2048-bit) → publish the value as google._domainkeycome back and click Start authentication, which is the step everyone forgets
  5. Record 3 — TXT on _dmarc: v=DMARC1; p=none; rua=mailto:hello@bodyweighttrainingarena.com; fo=1;
  6. 🔴 Publish at p=none, never reject. The site's contact-form mail currently goes out unaligned through the host — at reject you'd start bouncing your own form notifications. Tighten it in a separate job after a fortnight of reports

Nic has the TMA half of this as NIC-79 on his brief (different domain, different fault — themovementathlete.com's SPF hits a permerror because a dead include sits where _spf.google.com should be). Related but separate: AGA-46 is the wider SiteGround/DNS exit. Offer standing: give me a scoped Cloudflare token (Zone→DNS→Edit, that one zone, with an expiry) and I'll publish records 1 and 3 and verify them live — record 2 stays yours either way, so the saving is ~5 minutes.

Done when

A real test email to Gmail shows spf=pass, dkim=pass with header.i=@bodyweighttrainingarena.com, and dmarc=pass. The header.i domain is the bit that decides it — any other domain means the platform signed it, not us.

↑ back to the list

27

Fleet work: the price-story sweep — every surface tells the $97 / $78.50 story you ruled

NOW 90 min High FLEET-74

What

Nothing from you — this is the propagation of your 12 Aug ruling (AGA-114, option c). The fleet sweeps the offer ladder, every live sequence and every page quoting an annual price so they all tell ONE story: $97 is the quiz-window price (paywall + in-window re-pitch) · $78.50 is the email second-chance price, reached only through 993 SALES SEQUENCE (the evergreen 50% event).

Why it matters

Until your ruling, the two prices were inherited rather than decided, so every new page or sequence guessed. The ruling is now law in OFFER_LADDER.md §2b; this sweep makes the live estate match it. Hard rule travelling with it: never $78.50 inside the quiz window, never $97 inside the 50%-off event.

How to do it

  1. Fleet: sweep pages + sequences, list every annual-price mention with its surface
  2. Fleet: fix mismatches — single-slot edits only on live automations (Evolution Law)
  3. Exceptions that need a call come back to you as one short list

Done when

Every live surface quotes the right price for its place in the journey, and the ruling's WHY travels with it so no future session re-opens the question.

↑ back to the list

28

Fleet work: rebuild the 756/757 arc E1–E4 with quiz-data personalisation

NOW 120 min High FLEET-42

What

The fleet (not you) runs /abandon-fleet → /email-fleet to rebuild the four abandonment emails with the new quiz data — persona conditional content, obstacle line, stakes echo — before Nic uploads them (E11).

Why it matters

The existing E1–E4 passed lint on 3 Aug but were written before the lead-signal data existed; uploading them as-is would waste the personalisation edge the NIC-54 ship just created.

How to do it

  1. Fleet runs the loop: data brief → owner strategy → specialist copy → full gate stack
  2. Finished HTML lands beside the old set with scorecards; you see the rendered emails before anything uploads
  3. Then E11 (Nic/you): upload into 756/757, add steps/waits, activate — and the QA gate + your sentinel arm enrolment

Done when

Four gate-passed personalised emails on disk, rendered set shown to you, E11 unblocked.

↑ back to the list

29

Comp Pablo Mendoza free premium — Jesse's drafted reply promises it

NOW 5 min Medium AGA-127

What

Pablo (pmendozacaballero@gmail.com) left over rebuild bugs + the price, and offered us a detailed bug list. Jesse's reply is drafted in his thread and promises full premium, free, until the bugs are fixed — 'nothing for you to do'. Someone has to actually switch that on.

Why it matters

The reply engine's first draft answered only the price line of his 8-paragraph email; the real reply is now drafted (send it from hello@ Drafts). But its comp promise has no owner — an unfulfilled promise to the exact member who offered to help us debug is worse than no reply.

How to do it

  1. Send Jesse's drafted reply in Pablo's thread (hello@ → Drafts → search mendozacaballero)
  2. Comp his account: admin access grant, or one line to Nic to set it in the backend
  3. When he sends the bug list, it flows to hello@ — the reply-watcher will surface it

Done when

Reply sent, premium active on his account without charge, and he's confirmed he's in.

↑ back to the list

30

Rule the day-5 trial reminder: keep/change/kill — and make Nic name the rail

NOW 10 min Medium AGA-120

What

One ruling plus one question. Rule whether the day-5 trial reminder stays; ask Nic which rail actually sends it (Django, ActiveCampaign or Stripe).

Why it matters

The checkout page promises buyers a pre-renewal reminder, and you verified a day-5 reminder exists (10 Jul) — but nobody has ever established which system sends it, so we cannot say whether trial-enders are actually covered. Killing it would break a promise printed on the checkout; keeping it unverified leaves a silent gap. I searched the AC automation list via the API — no day-5 automation exists there, which makes the rail question real, not paranoia.

How to do it

  1. Ruling: keep (recommended — the promise is on the page)
  2. One line to Nic: “which rail sends the day-5 trial reminder — Django, AC or Stripe?”
  3. I verify the answer against the named system and close the row

Done when

The rail is named and verified, or the reminder is consciously rebuilt where we can see it.

↑ back to the list

31

Exclude the 766 lead-form list from promo broadcasts — the cold band that bled July

NOW 10 min Medium AGA-121

What

Add the 766 Facebook Lead Form | LM: Building Muscle After 40 audience as an exclusion on promo broadcast segments.

Why it matters

Re-verified 6 Aug: 766 is ACTIVE with 913 entered — cold lead-form contacts. July’s burst unsubscribed at 0.451%/send, 4.8× worse than May on the same shape, and the damage came from exactly this cold band being included in promo sends. Audience exclusions on future broadcasts are a builder setting the API cannot preset.

How to do it

  1. AC → the promo broadcast segment/template → add exclusion: contacts from the 766 lead-form list (or its tag)
  2. Tell me the segment name — I verify the next promo’s audience count drops accordingly

Done when

The next promo broadcast’s audience provably excludes the 766 cold band; unsub-per-send is compared against July’s 0.451%.

↑ back to the list

32

10 min — but read my warning first, the sample is far smaller than planned

NOW 10 min Medium AGA-173

What

The 990 Monthly→Annual Upgrade Engine (Jul 2026) hits 14 days on 17 Aug. Decide whether to read it then as a directional hint only, or let it keep running until the numbers mean something.

Why it matters

⚠️ The read is much weaker than expected when this was scheduled. Measured live 13 Aug: only 21 people have entered in 10 days. Its predecessor, 980 Monthly→Annual Upgrade (Jun 2026), reached 851. It currently shows upgrade_eligible 7 · tagged 0 · converted 0.

At n=21 there is no statistically meaningful conversion read, and I would rather say that plainly than hand you a percentage built on a handful of people.

Why it still matters: 980 pulled 26.7–29.2% opens and 3.44–4.93% clicks across 3,310 sends but never captured a single conversion tag — so to this day nobody knows whether it made money. 990 exists specifically to capture the number 980 never did. Do not let it be read as a failure on volume alone — low entry is a question about the trigger, not about whether the offer converts.

How to do it

  1. Decide: read it directional on 17 Aug, or let it run to a real sample first
  2. If read now — I pull entries, tags and conversions and label it DIRECTIONAL, n=21
  3. If let run — I set a new read date and investigate why entry volume is 21 rather than hundreds

Done when

You have either a labelled directional read or a new read date, and nobody quotes a conversion rate off 21 people.

↑ back to the list

33

🤖 Mine, not yours — find how the double-subscriptions happen so the next one doesn't

NOW 60 min Medium FLEET-77

What

Nothing from you. This is on my side and is listed only so you can see it is being chased. I diagnose which path in the checkout lets one person end up paying two subscriptions at once.

Why it matters

You ruled on 12 Aug (AGA-159): leave the 15 existing double-payers alone, no refunds. That ruling is about money already taken — it does not close prevention, which is fleet work and continues without you.

The finding: of 3,478 customers since 2024, 370 hold more than one subscription and 15 paid for overlapping periods ($1,662.86; the worst ran 314 days). 355 of the 370 resolved cleanly — so this is a narrow path, not a broken system, and finding which path is the whole job.

How to do it

  1. I compare the 15 against the 355 on created-at, which checkout family produced each (quiz-checkout vs checkouts-v3 vs legacy /register/), plan-change vs fresh purchase, and whether the prior sub carried cancel_at_period_end
  2. Outcome is either a named defect for Nic WITH evidence, or an honest "not knowable from Stripe" plus what would be needed
  3. 🔴 Read-only on money throughout — no refunds, no credits, no member contact. Your standing rule, reinforced by this ruling

Done when

Either Nic has a named defect with evidence attached, or it is on record that Stripe alone cannot tell us and what else would be needed. Nothing is charged, refunded or messaged either way.

↑ back to the list

34

Two rulings on the rebuilt old arc — nothing gets wired until you say so

WEEK 1 10 min High AGA-126

What

Twelve old 50%-off emails have been rebuilt and are sitting as files. They are not an automation, nobody is receiving them, and nothing happens until you answer two questions.

Why it matters

I did everything that was mine: built all 12, passed the lint gate 18/18, checked every image loads, and put them in a viewer. What is left is genuinely yours. (a) is a positioning call — one email (Free Shoulder Mobility Week with Ricky Warren) sells Bulletproof Your Shoulders, which is a different product from the Academy, so it may not belong inside an Academy discount arc at all. (b) is a send to real members, and I never arm one of those without your yes.

How to do it

  1. Open the viewer on your Mac — it is a local file, not a website: marketing/seasonal-campaigns/memorial-day-2026/index.html. Double-click it, then click the 🗄️ OLD tab.
  2. Read OLD-11 (the Ricky Warren shoulder one). Answer (a): does it stay in the 50%-off Academy arc, or move to the 984 Shoulder Mobility Week lane where the shoulder product already lives?
  3. Answer (b): do you want these 12 wired into ActiveCampaign at all — and if yes, which list enters them? They currently have no entry trigger and no day order.
  4. Tell me both answers. I build the automation; you approve the arming before a single email sends.

Done when

Both answered. Either the arc is scheduled to be built to your spec, or it is parked — and nothing has sent.

↑ back to the list

35

DNS cleanup — exit SiteGround completely

WEEK 1 10 min High AGA-46

What

Send the dev brief that finishes the hosting exit.

Why it matters

Sale-readiness: a buyer's technical diligence will look at where DNS and email actually live. 4 of 5 decisions are already confirmed.

How to do it

  1. Brief ready to send: the DNS/email dev brief
  2. 5–7 hours of dev time, in 3 phases
  3. Analysis behind it: docs/company/HOSTING_MIGRATION_2026-08/DNS_EMAIL_ESTATE_ANALYSIS_2026-07-31.md

Done when

The brief is with the dev and the phases are scheduled.

↑ back to the list

36

Two rulings on the App Store screenshots (the spec is written)

WEEK 1 5 min Medium AGA-26

What

Two short decisions. The design work is no longer yours — the full production brief now exists at marketing/aso/APP_STORE_SCREENSHOT_SPEC_2026-08-13.md: 10 slots with exact caption copy, three App Preview storyboards, craft rules, Apple's specs fetched live, and real asset paths. Only §5 needs you.

Why it matters

🔴 Decision 1 — I recommend pulling the 4.8★ from the App Store art. Apple prints its own rating — 4.53★ from 297 ratings — inches above our screenshots on the same page. Our standing rule says never attribute the blended 4.8★ to a single storefront, and a store screenshot is the most literal case of that. Proof would be carried by member quotes and “100,000+ athletes” instead. 4.8★ stays correct everywhere else — this is about one surface.

🔴 Decision 2 — “100,000+ athletes” on the proof slot. You approved it in the 6 Aug canonical block, so it is usable. But it traces only to an internal doc, is almost certainly cumulative across 8 years and all platforms, and Apple can ask us to substantiate a claim in the art. Keep it, or swap for “47 countries” plus member quotes?

What the spec fixes, for context: the live set ships “STRENGHT” misspelled in ~40pt, a caption promising “NO SPACE OR EQUIPMENT NECESSARY” over an app screen listing dumbbells and a wall, the assessment shown on a laptop in a phone listing, and the injury/pain proof stranded at slot 8 — which roughly three in four installers never reach, because they install straight off the search card.

How to do it

  1. Read §5 of the spec — it is two paragraphs
  2. Ruling 1: pull the 4.8★ from the store art, or keep it?
  3. Ruling 2: keep “100,000+ athletes”, or swap it for “47 countries” + quotes?
  4. Reply with both — the fleet writes them into the brief and the designer starts

Done when

Both rulings given. ⚠️ This does NOT put new art on the store: screenshots are version-bound, so nothing ships until the RN team attaches a build to 1.70.72 (RN-03). Still needed after your ruling — a designer, and an app capture session on the current build (no screen recordings exist anywhere in the estate, which blocks the preview videos entirely). Honest ceiling: even doubling search-card conversion is ~+88 downloads/mo ≈ +4–6 purchasers/mo [MODELLED] — a credibility fix, not a gap-closer.

↑ back to the list

37

GTM-PPGJXHH — is that container yours under a different Google login?

WEEK 1 10 min Medium AGA-108

What

One login check: is Google Tag Manager container GTM-PPGJXHH owned by an account of yours (agency, old account, a previous contractor)?

Why it matters

The legacy checkout page app.themovementathlete.com/register/yearly3/ is still live (verified 5 Aug: HTTP 200, titled “Register and pay”, carrying a live Stripe key) and it loads two GTM containers — GTM-TKGDZR9 (ours, readable) and GTM-PPGJXHH (not in the account our credentials can see). ✅ The urgency is low and that is measured, not assumed: Stripe subscriptions created in the last 30d split v3 115 / quiz_checkout 58 / unattributed 48, and the unattributed cohort ran 1–4/day all July then stopped — last one 2 Aug, zero on 3, 4 and 5 Aug. The money has already moved off that door; your redirect worked. What is left is simply not knowing who is firing tags on a page that holds a live payment key.

How to do it

  1. Sign in to tagmanager.google.com — try each Google account you have, including any old or agency one
  2. Look for container GTM-PPGJXHH
  3. If it is there: Admin → User Management → add google-analytics-claude-access@the-movement-athlete.iam.gserviceaccount.com as a Viewer. The whole question closes and the fleet can read it
  4. If it is not there: tell me — that means a third party is firing tags on our checkout, which is the version worth acting on

Done when

You can say either “it is mine, access granted” or “it is not mine”. Nothing else depends on this today.

↑ back to the list

38

Pick how we measure clicks on the transactional emails — A or B

WEEK 1 10 min Medium AGA-130

What

Right now we measure zero clicks on any transactional email. Click tracking in SendGrid is switched OFF at the account level, so all 1,106 emails delivered in the last 14 days recorded no clicks by construction — there is nothing to look at.

Why it matters

The one that matters is the abandon email 'Your login is in this email' — it goes out 11–14 times a day, gets opened 29.3% of the time, and its entire job is walking someone back to the checkout. We cannot say whether a single person has ever clicked it. That is money we can neither prove nor improve. I did not just switch tracking on, because doing so rewrites the links in password-reset and activation emails too — and a mail-security scanner that pre-fetches a rewritten one-time link can burn the token and lock a real member out of their account. That risk is yours to accept or decline, so it is a decision, not a chore.

How to do it

  1. Option A — recommended, zero risk, no SendGrid change. We put UTMs on that email's links pointing at the quiz root, and read the clicks in GA4. It measures what we actually care about — people arriving at the checkout — not pixel fires. Costs one Django template change from Nic.
  2. Option B. Flip SendGrid → Settings → Tracking → Click Tracking to ON. One click, covers every transactional email at once — but carries the lockout risk above.
  3. If you want B anyway, the safe form is click tracking on the abandon email only, not account-wide. That is also a Nic change, so it is no faster than A.
  4. Reply A or B. I write the brief and hand it to Nic the same day.

Done when

You have said A or B, and the corresponding change is on Nic's approved list.

↑ back to the list

39

Do not read August's numbers yet — a note, not a job

PARALLEL 1 min Medium AGA-62

What

Nothing to do. Just do not quote August's mix to anyone until around 13 August.

Why it matters

Annual share currently reads 57.1% against July's 13.8%, which looks like the new pricing page working beautifully. It is 4 sales out of 7, on day 3 of the month. At that size the number is equally consistent with “no change at all” and “huge win”. The same applies to retention's “4 cancel-ends” against July's 110. The direction is encouraging and the pricing page did ship on 31 July, so this is genuinely its first read — it is just not a result yet.

How to do it

  1. Do not put these figures in front of Nic, the board, or any buyer
  2. At roughly 30–40 sales — about 13 August at the current 2.3/day — it becomes decision-grade
  3. I will bring you the real number then

Done when

13 August passes and the number is read properly.

↑ back to the list

40

Watch hello@ for listicle replies

PARALLEL 5 min Medium AGA-30

What

Keep an eye on hello@ for three outbound pitches.

Why it matters

Three went out today (fitbudd, gymnasetips, thehybridathlete), each offering free full access plus an optional commission arrangement. If one says yes we need to provision the free account promptly — a slow reply to an inbound yes wastes the placement.

How to do it

  1. Watch hello@themovementathlete.com over the next few days
  2. Forward me any reply and I'll draft the response + provisioning steps

Done when

Each pitch has a reply or is aged out. Log: marketing/seo/listicle_outreach_log.json.

↑ back to the list

41

Ruling: strip the affiliate-programme links from a nurture sequence?

PARALLEL 5 min Medium AGA-102

What

One decision — should the BECOME AN AMBASSADOR / affiliate-programme links stay in the nurture emails?

Why it matters

They send a subscriber who is being nurtured toward buying away from the offer and into a programme that pays out. Whether that trade is worth it is a judgement about the business, not a number I can settle.

How to do it

  1. Reply strip them or leave them.
  2. If strip: the email fleet removes them and the lint gate keeps them out.

Done when

One answer, and the sequence matches it.

↑ back to the list

42

Make a free test account — 10 minutes, unblocks a whole audit

PARALLEL 10 min Medium AGA-66

What

Create an ordinary free account on the app and send me the login.

Why it matters

Three questions cannot be answered from outside a login, and they all matter: which upgrade prompts a free member actually sees, what the paywall looks like from inside, and whether the $9.99 step-down is even reachable. Until the account exists the free-member audit cannot start at all.

How to do it

  1. Sign up as a normal free user with any address you control
  2. Send me the email and password (or add me to a password manager entry)
  3. I run the audit from inside

Done when

I can log in as a free member and the audit report follows.

↑ back to the list

43

Hide the staging and beta sites from Google — Cloudflare, no deploy

PARALLEL 25 min Medium AGA-67

What

Add one Cloudflare rule so test sites stop appearing in search, then clear what is already indexed.

Why it matters

staging. and beta. are being served to Google like real sites. Neither has a working robots.txt, and both return a normal 200 with nothing telling search engines to stay away. Test copies of your site competing with the real one is bad; indexed promo pages are worse.

How to do it

  1. Cloudflare → RulesTransform RulesModify Response Header
  2. Add X-Robots-Tag: noindex, nofollow for hostname staging.themovementathlete.com, then the same for beta.
  3. That is step 1 done — instant, no deploy, one click to undo
  4. 🔴 STOP — wait for Nic before the next step. It removes app.themovementathlete.com/, which depends on Nic's noindex header on app. (NIC-43) — not the Cloudflare rule you just set, which only covers staging and beta.
  5. Then Search Console → Removals → “Remove all URLs with this prefix” → app.themovementathlete.com/ as ONE entry

Order matters. Removals are temporary (6 months) — they hide things fast. The noindex header is what makes it permanent. Do the header first, or the removal expires and they come back. 🔴 And you cannot do app. from Cloudflare at all. Verified 3 Aug by response headers — app. returns Server: nginx with no cf-ray, so it is not proxied and Cloudflare never sees its traffic. Only Nic can set that one.

Done when

Both hosts return the noindex header, and the already-indexed promo URLs disappear within about a day.

↑ back to the list

44

🤖 Fleet: the 5 'B' variants in 967 use a non-canonical footer

PARALLEL 40 min Medium FLEET-61

What

Fleet work — no action from you. Messages 13549, 13551, 13553, 13555 and 13557 in 967 TMA | Welcome Sequence After LEAD MAGNET fail two lint checks that their A variants pass.

Why it matters

They are missing the locked social-proof row (badge image + ‘100,000+ members · 4.8 stars’), and their body/P.S. repeats the footer's proof, so the reader is told the same social proof twice. Pre-existing and inherited from whatever builder produced the B arm — the 11 Aug E1 rewrite took 13549 from 4 lint failures down to these 2 but deliberately left the shell untouched.

How to do it

  1. Paste the locked footer into all 5 messages
  2. Remove the duplicated proof line from the body
  3. Plaintext regenerated in the same PUT, then the upload-integrity gate
  4. Bundled with FLEET-59 — same messages, one pass

Done when

All 5 B variants pass the footer and duplicate-proof lint checks, and read back correct from the API.

↑ back to the list

45

🤖 Fleet: 12 of 15 messages in 967 have a preview line that contradicts the email

PARALLEL 45 min Medium FLEET-59

What

Fleet work — no action from you. In 967 TMA | Welcome Sequence After LEAD MAGNET, the preheader_text field and the baked hidden preview div disagree on 12 of 15 live messages.

Why it matters

Several disagree materially. 13555's field promises ‘Marcus… 100 burpees destroyed Gareth's spine (here's what saved him)’ over a body about 20-minute sessions; 13549's promises ‘Your exact roadmap to abilities you thought were years away’; 13557's ‘Heavy weights make you weaker (I have proof)’.

This is the false-promise class — a preview promising what the body cannot deliver. It is pre-existing, not caused by the 11 Aug repair.

How to do it

  1. Per message, decide which line is actually true of the body
  2. Write ONE line into both surfaces — the API field and the baked div
  3. Re-run the integrity gate

Found by the upload-integrity gate on 11 Aug 2026.

Done when

Every live message in 967 has one preview line, and it is true of the email underneath it.

↑ back to the list

46

🤖 Fleet: all 17 messages in 992 carry a preheader from a different sequence

PARALLEL 50 min Medium FLEET-64

What

Fleet work — no action from you. In 992 TMA | Welcome Sequence AFTER APPSIGNUP AB TEST Aug4th, the baked preview and the API preheader field disagree on every single message — and the field text is 967 lead-magnet copy.

Why it matters

13651's field reads ‘Fifty-two and starting over, forty-seven and unfit…’ against a body about your workouts being everyone else's. 13638's reads ‘A warm hello, and the real reason bodyweight training never stuck.’

The preview line is the most-read copy in an email after the subject, so 17 readers' first impression is a promise the email never makes. Verified pre-existing against the pre-write backups — neither the door repair nor its round-2 fix touched this third surface.

How to do it

  1. Per message, decide which line is true of the body
  2. Write ONE line into BOTH surfaces (field + baked div)
  3. Plaintext regen in the same PUT, then the integrity gate

Sister to FLEET-59, which covers 967 only.

Done when

All 17 live messages in 992 carry one preview line that matches their own body.

↑ back to the list

47

🤖 Fleet: 18 of 24 live messages in 750 fail the email formatting gate

PARALLEL 60 min Medium FLEET-50

What

Fleet work — no action from you. A formatting-only pass over 750 TMA | Welcome Sequence After Quiz.

Why it matters

18 of its 24 live messages fail the mandatory formatting gate — missing bold and italic emphasis, no underline, and W7 has no visual-break block. Proven pre-existing: the pre-write backups fail identically.

It was invisible until 10 Aug because email_lint.py --ac had a short-circuit bug that linted exactly one message per series — a guard reporting success over work it could not see. That bug is now fixed, which is why the real number appeared.

How to do it

  1. Run the formatter seat over the live arc
  2. ONE Evolution-Law-clean formatting-only pass — no copy changes
  3. Upload through the integrity gate

CarefulFormatting only. The Evolution Law still governs 750's copy — single slot, worst eligible slot first.

Done when

All 24 live messages in 750 pass the formatting gate, with no copy altered.

↑ back to the list

48

🤖 Fleet: 992 reports itself as up to three different campaigns in GA4

PARALLEL 40 min Low FLEET-65

What

Fleet work — no action from you. One convergent pass over the UTM tags in 992 TMA | Welcome Sequence AFTER APPSIGNUP AB TEST Aug4th.

Why it matters

Three different utm_campaign values live inside single emails: the 45 quiz links and 2 checkout links carry 992-tma-welcome-after-appsignup (stamped by the door repair); the ~34 site links still carry the retired 968-app-signup-activation-jul2026; and neither matches the registry-derived slug the tagging tool would mint, 992-tma-welcome-sequence-after-appsignup-ab.

So one email reports itself as up to three campaigns, and the arc cannot be read as a unit. Partially pre-existing, partially introduced by the repair.

How to do it

  1. One convergent pass settling on the registry slug across every link in the arc
  2. Re-run the UTM checker in --check mode
  3. Same class exists on 967, whose footer links carry utm_content slugs naming the RETIRED subject lines — fold it in

Done when

Every link in 992 carries the registry slug, and the arc reads as one campaign in GA4.

↑ back to the list

49

Revoke the external dev's WP Engine SFTP — the day his work signs off

WEEK 2+ 10 min High AGA-96

What

Delete his SFTP user on three environments, once the PHP upgrade is finished.

Why it matters

He holds live SFTP to three production sites and is mid-upgrade, so his access is correct right now. A contractor's access outliving the job is the commonest way a fixed breach quietly returns — so this is dated, not urgent.

How to do it

  1. Ask him for a completion date and tell me — I set the reminder from his answer, so this does not sit here rotting.
  2. On that day: WP Engine → Sites → each environment → Users and SFTP → delete. Three times, once per environment.

Done when

No contractor SFTP user remains on any of the three environments.

↑ back to the list

50

Own the WordPress dev workstream — 69 outdated plugins, two slow sites

WEEK 2+ 20 min High AGA-53

What

Brief the external WordPress developer and hold four items, none of which you do yourself.

Why it matters

You took this from Nic on 2 Aug. It is a coordination job: 69 outdated plugins across three environments and 11 outdated themes, plus a mobile speed score of 48/100 on two sites. Neither is urgent enough to rush and both are the kind of thing that quietly gets worse.

How to do it

  1. Plugins — ask the dev to triage first, not update everything: security releases now, live environments only, and Divi / Yoast / Redirection / WP Rocket handled carefully because those four break things
  2. Speed — the mobile-48 fix and the WP Rocket Delay-JS task are the same sitting; give them together or the second undoes the first
  3. 404s — WP Engine had a live wp-admin incident, so rule that out before anyone diagnoses a 404 on our sites
  4. Bandwidth — just eyeball it next cycle: 401 of 550 GB used with visits up 63%

PHP is a separate brief and a separate dev — target 8.2, not higher, because Divi 4.27.7 is only tested to 8.2. It is written up in marketing/seo/DEV_BRIEF_bwa_php_upgrade_2026-07-29.md. A falsifiable thing to watch on bandwidth: the 51-hop BWA redirect loop was fixed, so next cycle requests should fall with no drop in traffic. If they do not, the loop was not the cause.

Done when

The dev has a triaged plugin plan, the speed work is scheduled as one job, and bandwidth is checked once.

↑ back to the list

51

⏳ Not now, by your own ruling — approve the 48h enforcement when Nic's queue clears

WEEK 2+ 10 min Medium AGA-132

What

This is a reminder, not a task. You ruled the $97 window binding on 7 Aug and said Nic is not to be interrupted for it. This row exists so it reaches him later rather than getting lost.

Why it matters

What he'll do (~45 min): enforce the window at charge time, not just in the UI — once an email has had a window, it never gets a second one. Acceptance test: an address 48h+ old sees $157 and Stripe charges $157.

What it unblocks: until it ships, no recovery email may claim the deadline — the server never returns expired today, and a lapsed visitor simply gets a fresh 48 hours. That is why the abandonment arc's E3 ‘your window closes tonight’ beat cannot ship at all.

How to do it

  1. Leave it until Nic's queue clears — that was your call and it still stands
  2. When it clears, approve it and it goes onto his brief
  3. Approve → the abandonment arc gets its third email. Leave it → the arc runs E1-E2-E4 honestly, which is a perfectly good sequence

Not urgent, by your own ruling. It is here so it is not forgotten, not so it is done this week.

Done when

Either the window is enforced at charge time and E3 can ship, or E3 stays retired and the arc runs as three honest emails.

↑ back to the list

52

Two redirect plugins are running at once — BWA

WEEK 2+ 20 min Medium AGA-16

What

Consolidate onto one redirect plugin and delete three dead SEO plugins.

Why it matters

Redirection (19 rules, 17 taking live hits) and SEO Redirection are both active, and I cannot read the second one's rules. Two redirect engines racing is how you get loops — and a loop takes a page out of Google entirely.

How to do it

  1. Open SEO Redirection, screenshot its rule list, send it to me.
  2. Wait — I will tell you which of its rules are unique and actually needed.
  3. Migrate those into Redirection, then deactivate SEO Redirection.
  4. Delete SEOPress, All in One SEO and 301 Redirects. Keep Redirection and Yoast.

Careful🔴 Do not click the banner offering to "import 18 redirects." That is the failure mode — it duplicates rules across both engines and creates the loop you are trying to avoid.

Done when

One redirect plugin active, its rules complete, and the three dead SEO plugins gone.

↑ back to the list

53

Go/no-go: bulk-delete 4,464 junk ActiveCampaign tags so the tag manager is usable

WEEK 2+ 5 min Low AGA-156

What

A yes or no. If yes, I scope it and show you a dry-run list first — nothing is deleted without your sign-off on the actual list.

Why it matters

4,464 of 5,846 AC tags (76.4%) are one-person junk — the result of the add_tag_to_quiz_contact() bug that concatenated a field value into the tag name. 5,621 of them were minted in a single day, 29 Oct 2025.

Nothing is getting worse — the writer has been quiet since Nov 2025. This is purely about making the tag manager navigable again, which matters every time anyone builds a segment and has to find the real tags among the noise.

How to do it

  1. Say go and I scope it
  2. I produce a dry-run list of exactly what would be deleted
  3. You sign off on that list — then, and only then, anything is removed

Low urgency by design — it is hygiene, not cash. It is on the list so it does not vanish.

Done when

The tag manager shows roughly 1,400 real tags instead of 5,846, and every deletion was on a list you approved.

↑ back to the list

54

Turn on WebP and bulk-convert — BWA

WEEK 2+ 10 min Low AGA-09

What

Enable WebP in WP Rocket, then run a bulk conversion.

Why it matters

Zero WebP on the site today. 30–50% off every image, on the property with the most traffic. Same WP Rocket screen as the redirect work, so do them together.

How to do it

  1. WP Rocket → Media → enable WebP compatibilitySave.
  2. ShortPixel or Imagify → Bulk convert. Let it run; it takes a while and needs no supervision.

Done when

WebP served on BWA and the bulk conversion has finished.

↑ back to the list

55

🤖 Fleet (deferred by you): sweep the accelerator wording to canon — 32 occurrences

WEEK 2+ 45 min Low FLEET-49

What

Fleet work, and you already deferred it. 32 occurrences across 25 files read ‘Lead Sports Accelerator — led by Adidas and ex-Red Bull executives’.

Why it matters

Canon is ‘the LEAD Sports Tech Accelerator — run by the Adidas family and ex-Red Bull executives’. The live wording drops ‘Tech’ and turns ‘run by the Adidas family’ into ‘led by Adidas’ — a corporate endorsement we cannot evidence.

🔴 I told you this was a one-line fix and it is not. It spans the free-workouts email, the buyer welcome email, the no-quiz welcome and the page.

How to do it

  1. Deferred by you — it runs when the higher-value rows are clear
  2. Shipping blocker to resolve first: tma-paywall-spec is NOT in the deploy estate, so the corrected page cannot ship via the sanctioned path — either add it to the estate, or Nic copies canon by hand
  3. Do NOT fold the 3→[N] change into this pass — that number is your decision, separately

AGA-136 fixes the same string in the live Django abandon email — that one is separate and is on your list because it needs your yes.

Done when

All 32 occurrences read the canonical accelerator line, and the page shipped through a sanctioned deploy path rather than by hand.

↑ back to the list

Nic — waiting on your approval

These are written and ready but Nic cannot see them yet. Nothing here has reached his brief. Say the word on any of them and it moves across; say no and it comes off. Keeping them here is deliberate — so he only ever opens a list you have already agreed to.

#TaskStateTimeImpact
1🔴 BWA's ENTIRE PAGE SITEMAP RETURNS A 500 — Google cannot read the page list for the whole site. https://bodyweighttrainingarena.com/page-sitemap.xml …NIC-114awaiting you45m●●●●●
2🔴 MAKE THE IN-APP CANCEL DOWNSELL PLAN-AWARE — annual leavers are shown a WORSE deal than our own standing offer. Measured 11 Aug: 84 of the 115 in th…NIC-101awaiting you90m●●●●●
3🔴 ONE-STRING DEPLOY — the LIVE checkouts-v3 pages publish '★ 4.9 average rating' and 4.9 is the RETIRED figure (Aga's ruling, 4-6 Aug: 4.8 is the publ…NIC-113awaiting you10m●●●●○
4⏱️ FIX THE QUIZ DURATION ON THE LIVE PAGE — it states three different numbers, and the headline one is wrong. AGA RULED 13 Aug: the web quiz is **3 MI…NIC-115awaiting you15m●●●○○
5BACKLOG (Aga: park it, not to be raised again) — checkouts-v3 header renders '4.9 average rating'. House rule is 4.7/4.8; 4.9 is retired. Aga has seen…NIC-107awaiting you5m●○○○○

Nic — approved and live on his brief

You have released these. They appear on his brief and nowhere else, so there is still one list per person.

#TaskStateTimeImpact
1🔴 REPOINT 'QLG | ADV+ OFF | MC | Control' TO THE QUIZ ROOT — 5 min in Ads Manager. All 4 of its live ads still land on https://quiz.themovementathlete…NIC-106on his brief5m●●●●●
2🍎 SHIP THE STAGED iOS KEYWORD FIELD — the LIVE one wastes ~86 of its 100 characters, and the good one is ALREADY WRITTEN and sitting unsubmitted. Read…NIC-102on his brief10m●●●●○
3💷 NIC — CUT 'Quiz Funnel | Competitors Branded | US' FROM £10/DAY TO £5/DAY, AND DO IT AFTER NIC-108 LANDS. It bids on rivals' brand names (mostly 'be…NIC-110on his brief10m●●●●○
4🔴 REMOVE THE THIRD-PARTY GTM CONTAINER FROM THE CHECKOUT — GTM-PPGJXHH is hardcoded in app/apps/templates/base.html and is NOT ours. Aga checked all 7…NIC-105on his brief15m●●●●○
5🔴 NIC — STOP PMax BUYING PLACEMENTS THAT HAVE NEVER CONVERTED. 'Quiz Funnel | PMax | US | Sales OBJ' is the only LIVE campaign breaching the settled '…NIC-108on his brief15m●●●●○
6🟡 BUILD THE $97 WARM RETARGETING TEST — sequenced AFTER the 45-min sitting (keyword surgery + NIC-97 + MOF pause) and the 17-Aug CPL report. Spec: ONE…NIC-99on his brief60m●●●●○
7🍎 NIC — WHICH REPORT DID THE $2,277 COME FROM? Your Slack note reads '$404 spend across June and July → $2,277 revenue → 5.6 ROAS'. THE SPEND RECONCIL…NIC-109on his brief5m●●●○○