Kid mode đź§’

This page is Plan to stop shipping drafts. It is one of the projects Brandon built and put online. The grown-up details are below, tap Grown-up mode to read them the normal way.

Plan to stop shipping drafts

2026-06-20 · the fix for trade-proof-for-words, drop-the-last-mile

Stop shipping drafts. Make “linked, kid-moded, live on Vercel, proven, with a next step” the automatic end of every task, enforced by one command, so you never again catch the gap I left.

Plain version: The helper keeps doing most of a job and stopping right before the part that makes it usable. This plan builds one button-press that finishes the job and shows proof, so it can’t skip the end anymore.
Keystone: one command, ship.py, that does the last mile (button, deploy, link, proof, next step) and exits non-zero if anything is missing. Doing it right becomes easier than hand-waving.

The three phases

Phase 1

Build the one-command closeout gate

A single script ~/.claude/skills/_shared/ship.py FILE… that runs the whole last mile and refuses to pass if any step is missing.

  1. Resolve the output path (output_paths.py), no ~/Desktop writes.
  2. Inject + verify a REAL kid button (grep class="mode-btn">0, force-insert past the toggleKid-in-text false positive).
  3. Ensure a sibling .md exists next to every HTML.
  4. Deploy via deploy_htmls_lean.py, then curl each route + the .md for 200.
  5. Emit a PROOF BLOCK: per artifact -> live URL + http code + open -R path + button count + a required NEXT line.
  6. Exit non-zero on any miss, so a done-claim is impossible without green.
Phase 2

Wire it into the habit and the gates

Make the gate the default closeout, not an optional nicety, and point the existing hard gates at its output.

  1. Add a /ship skill so any chat ends with /ship .
  2. Point the done-claim gate at ship.py’s proof block; bare 'done' stays blocked.
  3. Add an ask-mapping pre-flight: restate each ask, bind each to an artifact before closeout (kills 'undermines what I asked').
  4. Write the convention into CLAUDE.md + memory so it loads every session.
Phase 3

Run it on the backlog and showcase

First real run clears the existing kid-mode debt and proves the gate on live pages.

  1. Run ship.py across the ~290 non-corpus content pages (skip yt-corpus, dashboards, stem players, fleet dirs).
  2. Deploy once, curl a sample for 200 + button.
  3. Ship this board + a before/after coverage panel; run session_fraud_check --hard-only and hand to you to grade.

Each failure you named, and what kills it

“Bullshit instead of a link”ship.py prints the literal URL + http code + open -R path. Prose can no longer stand in for proof.
No kid-mode buttonInject + verify a real class="mode-btn" marker, not a string match on quoted text.
Built but never liveDeploy + curl 200 is part of the task. A local file is treated as unfinished.
No link to the work productAn open -R line is printed for every artifact, every time.
No next stepsA NEXT: line is required, or the gate exits non-zero.
Undermines the very thing I askedAsk-mapping pre-flight binds each of your asks to a real artifact before closeout.