The upstream plan — what gets built, in what order, and how each step is read plan · 2026-09-07phases 0–2 deployed 09-08read 1 done · fix plan set

The build plan that follows from the first read and what the writer reads. Six phases, seventeen items, each with the file it touches, how it is measured, what it costs, and its status. The status chips on this page are updated in the same change as each ship; a step is not done until its chip says so. Three rules govern every item: subtract before adding; a model counts and extracts but never scores; a prompt change is read against its own before, on the same slate.

Subtract, then add. You can do stats; you can't judge quality. Readers are average joes. Examples must be real good essays. 70% in the newsletters' and the Guardian's language, 30% in the New Yorker's, by format.the owner's rulings, 2026-09-06 and 09-07, compressed

0 · The plan at a glance

Phase 0Subtractionsa day · no spend Phase 1The desktwo days · cents a day Phase 2The standardtwo evenings · ~$2 once Phase 3The profilea day · one pair brew ~$1 Phase 4The modela day · one pair brew ~$1.5 Phase 5The editor's briefa day · one pair brew ~$1 READ 1the next box brew READ 2same slate, old vs cut profile READ 3same slate, two models, blind The owner reads three times, about fifteen minutes each. Every other measurement is code: the register floor, the metaphor count, the echo map, the desk's fact counts. Phases 2 and 3 can run in parallel (the bank is harvested while the profile cut is written); the rest are in order because each read decides the next.

0b · After Read 1 — the fix plan, by the weight of the down-votes 2026-09-08 · three days

Read 1 (the first read, §7) grouped the owner's 17 notes into seven groups. Every meter improved on the 09-08 edition and the read got worse (2 up, 4 down against 5 up, 2 down the day before): shape is necessary and not sufficient. The phases below were re-ordered and extended to attack the groups in order of weight, three days, three reads of about fifteen minutes each.

DayGroup attackedItemsThe owner reads
11 · wording too serious, not 口语化 (7 notes) · 3 · pointless pieces (2)Phase 3 whole (3.1 the profile cut · 3.2 the recent block · 3.3 the horizon branch) · 3.4 the 口语化 meter · 5.0 the light slots · deployRead 2: the next morning's edition, thumbs and notes as before
22 · 不知所云, no thread (5) · the largest leverPhase 5 (5.1 the angle names a subject and a question · 5.2 the title from the writer) · Phase 4 (4.1 Gemini 3.8 Flash on the writer seat · 4.2 the pair brew)Read 3: ten blind pairs, two models, same slate
35 · the Chinese renditions (4)Phase 6 (6.1 the 意译 arm with the names-once rule, against the current arm, on the rendition A/B harness)Read 4: five rendition pairs
alongside6 · the piece as a task · 7 · format and tics0.6 shipped (the distance line) · 7.1 the Overheard rendered as dialogue · 7.2 the sign-off tics out of the profiles · 7.3 no age claims in the vantage
undesigned2 · coherence itselfNo test exists and a model judge would not be one. Phase 5 attacks the cause; if 不知所云 survives it, that is the next study.

1 · Phase 0 — subtractions shipped 2026-09-07

Everything here removes something the writer reads or a layer the gate runs. No new instruction, no new model call. Ships as one commit, deploys, and the next box brew is Read 1.

#ItemWhereMeasured byStatus
0.1The tagline leaves the opening line.「You are Geoffrey Hinton, deep-learning pioneer.」The card's hook stays on the card.write_piece, the first line of the promptthe captured promptshipped 09-07
0.2「your images」leaves the exemplar line. The line asks for images; the metaphor complaint starts there.write_piece, ex_txtthe metaphor meter, day over dayshipped 09-07
0.3The plain pass goes off. The metaphor count stays as a meter: one line per piece in the brew log, a day median on the brew-log page. No rewrite.stage_gate, apply_literal kept but not calledthe log line exists; no piece carries appliedshipped 09-07
0.4The exemplar bank is cleaned. Analyst prose filtered out (a paragraph that describes the persona in the third person is not the persona's), duplicates dropped._mine_exemplars + a one-off sweep of the cached banksa lint over every bank: 0 third-person-about-self paragraphs, 0 duplicatesshipped 09-07
0.5The three times replace the two passes in the log, the CLI and the log page: TEXT · ART CUTOFF · PUBLISH.run_evening/run_dawn log lines, the CLI verbs (old ones kept as aliases), docs/ink-brew.htmlgrep: no「EVENING PASS」in a new logshipped 09-07
0.6The no-announcing-distance line, back. Read 1 Cut in 0.1's batch; the next morning three of sixteen pieces opened with「I was not in the room」. Restored in positive form: write from the record as a matter of course and never announce it.BOUNDARYopenings that announce distance, per dayshipped 09-08
0.7The title and the dek are linted. Read 1 The antithesis turn had moved to where the body lint never looked; a title or dek that carries it is retitled on the writer seat. The plain「not X, but Y」in the body is a tell at one, not two.ink_lint.antithesis_hits · retitle · stage_gate「retitled」lines in the brew log; titles with the turn, per dayshipped 09-08
0.8The writer's own AI vocabulary, measured and netted. Read 1 55 Ink pieces against the 267-piece bank: the concrete-noun family (machine ×14, engine ×19, mirror ×27, ledger, arithmetic), the brief's own words echoed back (plainly ×37, genuine ×14), and a set of figurative verbs (sits, belongs, arrives, carries). The echoes are fixed in the brief; the nouns and verbs are counted (ai_echo · ai_nouns) and handed to the plain-words pass, which keeps a literal use. The study, §4.ink_lint · cleanse · BOUNDARYthe per-word table, re-run after a brewshipped 09-08

2 · Phase 1 — the desk built 2026-09-08

Code only. Removes the bystander's cause: a writer with nothing in the room writes about itself.

#ItemWhereMeasured byStatus
1.1The peg guard, by shape. A URL with no article slug, or a fetch that yields no article body, is not a peg; it never reaches the budget meeting.stage_pegs, beside _sectionishpegs refused per day, logged; the Hinton peg as the regression casebuilt 09-08
1.2The thin-notebook floor. An EVENT of one line or fewer than a handful of FACTS sends the commission to the spares, not to the writer.stage_research → the slate's spare flagnotebooks below the floor per day, loggedbuilt 09-08
1.3The second desk round. When the first notebook is thin: search again on its NOT ESTABLISHED items and the event, fetch two more pages, merge.research_onefacts per notebook before and after, on the thin third of a day; cost per notebookbuilt 09-08
1.4The full-text ladder for the lead and the well: peg URL → reader proxy → archive snapshot → the same story on an open wire → four pages._raw_text + research_onepeg fetched (not walled) for the lead, day over daybuilt 09-08
1.5The harvest opens section pages. found 09-08 The shape guard, tested against the 09-07 pegs, refused 21 of 35: TechCrunch's AI category, Reuters China, the NYT science section, Yahoo's tech topic, phys.org's space news. On the 09-08 dev pass it refused 131 of 140; with the opener, the same pass yielded 112 real pegs (102 from 24 opened sections). Most of what the harvest brings the budget meeting has always been section pages, and the meeting commissioned essays on them: the systemic cause behind the Hinton peg, the thin notebooks and the bystander. A section page is not a peg, but it is an index of today's pegs: the harvest fetches each one it would refuse and takes the article links on it (dated or slugged, same host, deduped), so one refused index becomes several real candidates.stage_pegs, a _links_from_section() beside the guardreal pegs per day (was ~14 of 35); the refused count; a dev passbuilt 09-08

3 · Phase 2 — the standard built + deployed 2026-09-08

The bank and the study are one job: the bank is measured as it is built, and the two bands' targets come out of the measurement.

#ItemWhereMeasured byStatus
2.1The shelf bank, harvested. A few hundred pieces from sources open to read and clear to store (Graham, Housel, Urban, Galloway, Aeon, the Conversation, the Guardian's comment page, McSweeney's, the Onion, Ask Polly, Letters of Note; openings only from the walled titles). Each entry: class, band, beat, outlet, date, the first 150 words as the example, the full text outside the repo, its meter readings.a harvest script; <ink_dir>/standard/ outside the repo; lib/ink/register.json keeps only the openingsentries per class and band; every entry carries its metersbuilt 09-08
2.2The register study, two bands. Reading grade, words per sentence, syllables per word, first person, metaphor rate, over the bank by band. The Chinese analogue on 财新 and 三联: sentence length, 四字格 and 文言 markers per hundred characters.exam/register_study.py; a room2 page for the tablesthe two band tables, publishedbuilt 09-08
2.3The band column and the band floor. FORMATS gains band (plain: Essay · Notes · Review · Scorecard · Advice · Dialogue · Riddle; literary: Dispatch · Letter · Shouts · Fable · Overheard · Kicker). The register floor reads a piece against its band's targets, including its own metaphor allowance.FORMATS, ink_lint.register, stage_gatethe smoketest pin; the brew log shows the band per piecebuilt 09-08
2.4The shelf trio by band and subject. Three openings from the commission's band, nearest subject first.register_examplesa Fable is never shown Gallowaybuilt 09-08
2.5The Chinese band, and a blunt reference. Chinese originals have no register floor today, and the calm periodicals (财新, 三联) are the wrong yardstick for what the owner asked of 信用的成本 (劲爆, blunt, a person on the page). The study's Chinese half measures the popular columnists readers actually finish alongside the periodicals, and the Chinese floor is set from that: sentence length, 四字格 and 文言 markers per hundred characters, first person, and the metaphor rate on the annotator's Chinese scale. The two bands apply to Chinese formats the same way.exam/register_study.py, ink_lint.register (the zh branch), a Chinese shelf in the banka zh piece carries a floor reading in the brew log; the 09-06 信用的成本 as the regression casebuilt 09-08

4 · Phase 3 — the profile built 2026-09-08 deploys on the owner's word · Read 2 follows

The largest block the writer reads, cut for the first time. Read 2 is a same-slate pair: the day's commissions written once with the whole profile, once with the cut, the owner reading the pairs blind.

#ItemWhereMeasured byStatus
3.1The writer cut, by heading. The card line, Background, Values & seams, Specific memories, Voice & manner. The frontmatter, At a glance, Timeline, Improvisation framework, Tells & quirks and Anchor & Extrapolation stay out. About half the profile._profile_text → a writer_profile() that keeps named headingsprompt size (47.6k → ~29k on the specimen); the register meters and the echo map on the pair; Read 2built 09-08
3.2The recent block for living figures:「what has happened to you since the record」from personas-recent/<slug>.md, newest first, capped; stances only for fixed-horizon figures.write_piece, after the profilethe captured prompt carries it; a living persona's piece can cite its own last stancebuilt 09-08
3.3The horizon branch. Two versions of the vantage bullet chosen by the card's horizon; the「today's English」line only for fixed-horizon banks.BOUNDARY → two variants; write_piecethe smoketest pin; long-word rate on the fixed-horizon personasbuilt 09-08
3.4The 口语化 meter. Read 1 Seven notes said the wording is too serious and none of the floors can see it: contractions per hundred words, direct address (you, your), mean word length and the share of one-syllable words, each set from the bank's plain band the way the other floors were, and read against the band. Gives the register a number the way the metaphor family got one. Measured 09-08: word length and the one-syllable share are identical between Ink and the bank (4.6 vs 4.7 letters; 59% both), direct address level (0.9 vs 1.0); contractions are the whole difference: the plain band 2.3 per hundred words, the literary 1.6, Ink 0.7. The floor is the band's 25th percentile (1.3 · 1.1); a piece under it is flagged「stiff」and the plain-words pass is told to contract where a person talking would.ink_lint.register, REGISTER_ALLOW, the study pagethe four counts on the study page, Ink against the bank; the flag in the brew logbuilt 09-08

5 · Phase 4 — the model 4.1 built 09-08 4.2 the pair brew: the box + Read 3

The cheapest lever to test and possibly the largest: the article's spread across models was seven to one. Read 3 is a same-slate pair on the box, two writer models, the owner reading blind.

#ItemWhereMeasured byStatus
4.1Gemini 3.8 Flash joins the writer seat. An option on the console card, a price row (0.75 / 3.75 per million now, doubling 2027-01-01, thinking billed as output).TASKS["writer"], cost.PRICES, the Gemini seam already used by the editorone dev piece written on it from the box (Gemini is unreachable from the PC)built 09-08
4.2The pair brew. One slate, two engines, the same notebooks (paid once), both editions kept on the dev shelf of the box.ink_brew.py brew --model or the console's seat switch between two runsthe meters per engine; the metaphor rate per engine; Read 3owed

6 · Phase 5 — the editor's brief built 09-08

The commission pre-writes the argument, turn and all. The same subtraction the writer's brief got.

#ItemWhereMeasured byStatus
5.0The light slots earn their place. Read 1 Dylan's kicker「came from nowhere and is 100% unnecessary」and the fable was「for primary students」: the slate fills four light slots a day by quota and lets them peg to「the day itself」. The allowance goes, a light piece needs a why-now like any other, and the light slots drop from four to two. A policy line, not a prompt.policy_text, the slate validatorunpegged pieces per day: zero; light pieces per day: twobuilt 09-08
5.1The angle names a subject and a question, never a thesis with its ending. The budget meeting's JSON asks for「the question this persona is best placed to answer, and why them」; the antithesis lint runs over the slate too.stage_slate, the slate JSON contractthe echo map: commission → the piece's last paragraph, before and afterbuilt 09-08
5.2The title comes from the writer, not the meeting. The meeting keeps a working subject line; the writer's title rule already asks for a verb.stage_slate, write_piecetitles beginning with「The」per daybuilt 09-08

6b · Phase 6 — the Chinese renditions 6.1 built 09-08 Read 4: five pairs

Outside the original plan, which was about the English originals. Four of the seventeen notes: Feynman's rendition「直译 not 意译」, Dylan's「the Chinese translation ruined all these」, Banksy's「中文翻译也很奇怪」, and Kurosawa's names rule.

#ItemWhereMeasured byStatus
6.1The 意译 arm. The current cheap arm (09-04's winner on fluency) against a re-authoring brief that asks for the meaning in Chinese sentences, never the English sentence in Chinese words, and carries the translate-once names rule (詹妮弗 (Jennifer) the first time, Jennifer after). On the rendition A/B harness, five pairs. run 09-08 Five pieces of the 09-07 and 09-08 dev shelves, the shelf's old rendition against the 意译 arm: the machine judge (Gemini Flash, both orders) preferred the OLD in three, the new in one, one tie; the translationese lint reads both clean (old 1.0, new 0.8 mean). The judge is not the decider, by the owner's rule: the five pairs are on the rendition page for Read 4, and the arm stays selectable (ZH_ARM) so the owner's pick ships, whichever it is.ZH_BRIEF, ZH_NAMES, exam/rendition_ab.py, the rendition pagethe translationese lint on both arms; Read 4, five pairs, the owner's pickbuilt 09-08

6c · Phase 7 — alongside 7.1 + 7.3 built 09-08 7.2 watched

#ItemWhereMeasured byStatus
7.1The Overheard renders as dialogue. Banksy's piece「应该以对话形式给出」: the format is written as speaker lines and the reader shows it as prose.the reader's body renderer, the Overheard formata speaker-line piece shows as dialogue on the phonebuilt 09-08
7.2The sign-off tics out of the profiles. Stan Lee's「Excelsior… 'Nuff said」is a catchphrase the profile demonstrates and the piece repeats as a closing. 09-08 The profile cut (3.1) dropped Tells & quirks, where the tics were listed as tics; the catchphrase also lives in the sources and the memories, which stay. Watched, not edited: if it survives the cut, the line comes out of the memory.the persona profiles, the profile cut (3.1)catchphrase closings per dayowed
7.3No age claims. Churchill wrote that he is eighty. The vantage is「alive now」; a stated age is the one fact that vantage cannot carry.BOUNDARY, one clauseage claims per daybuilt 09-08

7 · What is deliberately not in the plan

8 · The bill

PhaseBuildModel spendThe owner's time
0 · subtractionsa day0Read 1, the next box brew, ~15 min
1 · the desktwo daysa few cents a day, ongoingnone
2 · the standardtwo evenings~$2 once (the metaphor annotation of the bank)none
3 · the profilea day~$1 (one pair brew)Read 2, ~15 min
4 · the modela day~$1.5 (one pair brew, Gemini priced)Read 3, ~15 min
5 · the editor's briefa day~$1 (one pair brew)none; the echo map decides
statusPlan recorded 2026-09-07. Phase 0 shipped the same day (the owner:「go ahead with Phase 0」): the opening line is name + role, the exemplar line no longer asks for images, the metaphor count is a meter with the plain pass off, 54 dev banks and the box's banks swept of analyst paragraphs and duplicates, the log and the CLI speak the three times. Read 1 is the box brew of 09-08 03:00, on Phase 0 alone. Phase 1.1–1.4 were built the same night; testing the peg guard against real pegs found that most harvested pegs are section pages (1.5), so the harvest now opens them (1.5: 9 pegs became 112 on the dev pass) and Phase 1 deployed as a whole before the 09-08 03:00 brew — Read 1 therefore covers Phases 0 and 1 together, by the owner's choice (「why wait until tomorrow?」). Phase 2.1–2.4 built the same night: a 144-piece bank (102 openings shipped), the register study with the two bands' targets set from it, the band column and floors, the shelf trio by band; 2.5 the same day: the owner named 六神磊磊读金庸 and 兽楼处, 46 articles measured, the Chinese floor set from them (25 characters a sentence, not 财新's 41). Phase 2 deployed at 02:31 on the owner's word, before the same 03:00 brew — so Read 1 covered Phases 0, 1 and 2 together. Read 1 happened 09-08 (the first-read page, §7): 2 up, 4 down; the fix plan (§0b) re-orders what follows into three days — day 1: Phase 3 + the 口语化 meter + the light slots, then Read 2; day 2 and day 3 were built the same evening on the owner's word (「build what we can build」): Phase 5 whole, 4.1 the seat, 6.1 the 意译 arm, 7.1 the dialogue rendering, 7.3 no age claims — all on main; 4.2 the pair brew needs the box and Read 3; Read 4's five rendition pairs are on the rendition page; Phases 3 and 4 each end in a read the owner has agreed to. Siblings: the first read · what the writer reads · the loop (the standard corpus this plan's Phase 2 builds).

6d · Phase 8 — the harvest and the pitches built 09-09 · deployed 09-09 01:55

The owner's course after the budget-meeting study: not better beat queries but coverage — read the free sources that already span the world, search a checklist that touches every sub-field daily, fold one story to one peg with its counts, flag the front by breadth, select a balanced 160 and keep the rest tagged. Design and the build record on coverage and the pitch; one real day on the specimen. Built as lib/ink_harvest.py + lib/ink/harvest.json, wired into the brew's pegs stage with the Serper path as the fallback; the desk decodes the commissioned Google News stubs. The selection ranks by attention with diminishing returns on sameness, never a proportion (the owner's three corrections, 09-09). The pitches: every persona reads the pegs as itself through one cheap call and raises a hand or not; the meeting commissions from the pitches and owes a reason for every assignment; the writer reads its own pitch back. Deployed at 01:55 on 09-09; the 03:00 pass failed at the meeting (the editor's answer cut mid-JSON), the fix was deployed at 14:04 and the meeting rerun by hand; the same evening the meeting was rebuilt as the quick meeting (a shortlist in code, one fast pick with thinking off, the questions in parallel, repairs in code: 24 s instead of 9 min) and deployed at 23:40 (box cb878899). The 03:00 pass of 09-10 is the first under it. Record: the first box meeting.

plan 2026-09-07 · updated in the same change as each ship · siblings: what the writer reads · the first read · the brew