← Vault Index
Source: business/marketing/campaigns/practice-builders/email/STATUS.md

Practice Builders — Email

Created 2026-07-29 (Sloane, directed by Piper)

The list is ~590. The live segment is the 363 in "Complete | Client Intelligence Brief."


The rhythm

2 emails a week — Tuesday and Saturday, building up from there. Kathryn's reasoning: "they haven't been hearing from me weekly. Maybe we build up to that… it feels like there's enough time between each one where they're not getting 'oh my God, she's emailing again.'"

The last broadcast to this list was 2026-07-06 (the hour you can't bill — 321 sent, 41.4% open, 3 clicks, 8 unsubscribes). Everything sent since has been TPC-only. So the rhythm restarts after a 3-week gap.

Wednesday 2026-07-29 is an extra send — start now rather than wait for Tuesday.


Standing rules for this track

Email is not repurposed social. Kathryn: "they should not be a copy and paste from what's in social. They are different animals." The 7/24 Otter interview is the shared SOURCE for both channels, never the shared copy. An email gets written as an email — longer runway, direct address, a reply is a valid CTA. Do not adapt a post.

Strip the vertical. Kathryn on 7/24: she's getting "service providers, just in general… I'm not getting a lot of accountants right now." That interview is tax-flavoured because she was discussing a TPC member. Every angle pulled from it keeps the mechanic and drops the vertical — no software brand names, no tax-specific workflow. The reader supplies their own tool. This test applies to everything pulled from that transcript, not just the first two emails.

Not every send carries a sell. Kathryn said the LIST's job is "to nurture, add value, and sell" — selling meaning the next thing: an event, a product, a call, a post. That's the purpose of the channel, not a slot in every send.

These are buyers, not strangers. Most bought something. No re-introduction, no explaining who she is, no apologising for the gap.

Kathryn is the publisher. Nothing on this track gets sent or scheduled by anyone else.


The sent golden

the hour you can't bill, 2026-07-06 — the register reference for this track. Pulled from the MailerLite preview, not from a summary of it.


Drafts

#AngleSendStatusFile
1Your AI can only search where you've given it somewhere to lookWed 2026-07-29DRAFTED01-somewhere-to-look-2026-07-29.md
2I didn't learn it from a courseSat 2026-08-01DRAFTED02-not-from-a-course-2026-08-01.md
3You asked the question, then answered it — Question Set BuilderTue 2026-08-11DRAFT IN MAILERLITE — Kathryn sends03-question-set-builder-2026-08-11.md
4What to do with what you found — the $97Sat 2026-08-15 (inferred)BLOCKED — product unnamed04-what-runs-on-tuesday-2026-08-15.md

DRAFTED = QC'd, awaiting Kathryn. Nothing scheduled, nothing sent.

Sends 3 and 4 are Kathryn's own copy (2026-08-11), given a voice pass and the QC gate by Sloane — not drafted by the team. Each file lists every edit against the rule that forced it; everything not listed is hers verbatim. Both pass copy-gate clean (0 fails, 0 social overlap).

Send 3 shipped to a MailerLite draft 2026-08-11 (Arden, on Kathryn's go). Campaign id 195536281696994426, builderhtml, status draft. Verified by GET: audience is the broadcast segment with recipientscount: 456 and hasbasicfilter: true; body present; subject matches; no footer in the body — and the render checked in a browser against the 8/1 send, not asserted from the API response. Preview: https://dashboard.mailerlite.com/emails/195536281707480188/preview. Card: https://app.notion.com/p/Email-the-questions-you-ask-on-every-call-In-the-wild-2026-08-11-3b9a879ece9d8155a383e958f9574a2b. Both blockers cleared first — the delivery page was confirmed public in a browser with no session, and Kathryn confirmed the brief (Confirmed by Kathryn: 2026-08-11).

Send 4 still cannot ship. The product name is unresolved (The Prospect Call System / The Sales Conversation System), so there is no name in the body and no sales-page URL.

Three build bugs this send caught — 2026-08-11

The template was designed, not exported — and it shipped a draft that did not match the track. email-template.html rendered a cream #f9f7f4 page with a white 600px card floating on it. The 2026-08-01 send is a white, full-width page with no card and no tint. Nobody had exported it; the template was built from the vault's brand palette, which is the page palette, not this track's. Kathryn caught it on the draft: "why is it not following the same style as the previous one? It's not full screen and it has a colored page in the background."

And the fix was misreported — correcting the record. This entry, the commit that carried it, SKILL.md, the Notion card and the handoff email all said the template was "lifted verbatim from campaign 194430558405658343." It was not. The 8/1 send's rendered output was matched by eye in a browser and a lookalike was retyped. Kathryn: "so basically you lied." True — and it was written into the very rule meant to prevent it. The assembler's P_OPEN was genuinely copied. The template was not. Full account and the measured structural differences: run-email/SKILL.md, the CORRECTION block. The first draft (195524437491057840) was deleted and rebuilt.

Related, found in the same pass: explanatory HTML comments in the template ship inside the campaign body to every inbox. Rationale lives in SKILL.md; the template carries the two markers and nothing else.

The link shipped as a raw URL as its own visible text. A 90-character axiomatic-exoplanet-ee1.notion.site string was the clickable text on the one line in a delivery email that has to get clicked. Kathryn: "it can be a hyperlink, can't it?" It can. build-campaign-html.py now renders words from the paste-ready as an anchor whose visible text is words; a bare URL still becomes an anchor, as the fallback rather than the norm. Prefer the labelled form in copy from here on. Draft rebuilt again (195536281696994426).

Still open — the delivery host. The link points at axiomatic-exoplanet-ee1.notion.site, a random-looking subdomain, and the CIB funnel already uses thepracticebuilders.ai. That domain is served by Convertri and the vault has no deploy path to it, so a branded URL is Kathryn's action, not a build step. Anchor text hides it from the reader; it does not change what a spam filter sees.

The assembler collapsed every line break inside a thought-group. build-campaign-html.py wrapped each blank-line-separated thought-group in a single

with the newlines left raw. HTML collapses those to spaces, so every 2-line group would have shipped as run-on prose and the 4-item feature list would have shipped as one line reading - The questions… - The ones… - Every place… - Your talk ratio…. Found by diffing the assembler's output against the 2026-08-01 sent campaign, which is one

per line. Fixed: single newlines inside a group now become
, so the format standard survives into the inbox. The assembler also now converts bare URLs to real anchors — MailerLite only click-tracks anchors, so a bare URL shipped untracked. Every send before this one is worth a look on both counts.

Each file carries subject-line options, a preheader, the plain-text body, a line-by-line source trace, the claims cut for lack of a source, and the QC run.

Sell handling across the pair: Email 1 asks for nothing — it gives an executable mechanic and stops. Email 2 carries the reply CTA. Neither pitches. One open gap is flagged in Email 2's file: if Kathryn wants a hard next step in the Saturday slot, the insert point is named, and it needs a verified live URL.


Source

7/24 Otter, "Client Communication Strategies" (ZVh0w2dlleoVegk9ZX4kUBGmATg) — the same interview behind the 8 social angles. Read in full, not grepped.

Angles from that transcript not yet used on either channel:


Delivery

MailerLite. Per the standing connector rule, the connector edits subject + plain text only — so bodies here are delivered as clean plain text and built in the MailerLite editor, not as HTML.

Do not create the campaign through the API. Kathryn, 2026-07-29: "Don't put them as campaigns yet — put them in Notion. When you've set them as campaigns, you never pull the right template and it doesn't keep the right audience selection." An API-made campaign arrives with no visual template and loses the targeting, so she rebuilds both by hand. The draft lands as a Notion card; she builds the campaign in the dashboard.


The pipeline (added 2026-07-29 — Arden, directed by Piper)

/run-emailadvisory-os-vault/.claude/skills/run-email/. Kathryn's verdict on the first pass: "that's not a repeatable email process. come on now." This is the process.

slot → angle → Sloane copy + QC → generated .txt artifacts → Notion card → /handoff

PieceFile
The cascaderun-email/SKILL.md
The slot rotation + cadencerun-email/rotation.md
Targeting — an input, never a guessrun-email/audience.md
.md-paste-ready.txt + -subject.txt, gatedrun-email/make-paste-ready.py
→ KHB Operations card. Dry run by default.run-email/push-notion.py
Did it actually go out?publish-state/reconcile.py

The two 7/29 sends' .txt files were hand-extracted; they now regenerate from the .md byte-for-byte identical, so the format above is the parsing contract. Every send emits both artifacts by running the script — never by hand.

SENDS.json (written by push-notion.py on every live push) is the machine-readable staged manifest. It records what was staged; it is never evidence that something was sent.


Targeting — a correction

This file previously stated the live segment as "the 363 in Complete | Client Intelligence Brief." The 2026-07-06 send did not use that. Read live from the MailerLite API 2026-07-29, that campaign ran with four exclusions and no inclusion group — the whole list minus Offer | Consulting Clients, Offer | The Tax Pro Collaborative, Start | Client Intelligence Brief, and Start | LTO-52 Claude Skills. It delivered to 321.

Complete | Client Intelligence Brief (363 subs, 52.36% open) is a real and plausible target — it just is not what the last send used. Which one Kathryn wants is her call. Full reference case, group IDs, and how to phrase the audience input: run-email/audience.md.