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.
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.
| Day | Group attacked | Items | The owner reads |
|---|---|---|---|
| 1 | 1 · 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 · deploy | Read 2: the next morning's edition, thumbs and notes as before |
| 2 | 2 · 不知所云, no thread (5) · the largest lever | Phase 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 |
| 3 | 5 · 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 |
| alongside | 6 · the piece as a task · 7 · format and tics | 0.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 | — |
| undesigned | 2 · coherence itself | No test exists and a model judge would not be one. Phase 5 attacks the cause; if 不知所云 survives it, that is the next study. | — |
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.
| # | Item | Where | Measured by | Status |
|---|---|---|---|---|
| 0.1 | The 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 prompt | the captured prompt | shipped 09-07 |
| 0.2 | 「your images」leaves the exemplar line. The line asks for images; the metaphor complaint starts there. | write_piece, ex_txt | the metaphor meter, day over day | shipped 09-07 |
| 0.3 | The 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 called | the log line exists; no piece carries applied | shipped 09-07 |
| 0.4 | The 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 banks | a lint over every bank: 0 third-person-about-self paragraphs, 0 duplicates | shipped 09-07 |
| 0.5 | The 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.html | grep: no「EVENING PASS」in a new log | shipped 09-07 |
| 0.6 | The 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. | BOUNDARY | openings that announce distance, per day | shipped 09-08 |
| 0.7 | The 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 day | shipped 09-08 |
| 0.8 | The 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 · BOUNDARY | the per-word table, re-run after a brew | shipped 09-08 |
Code only. Removes the bystander's cause: a writer with nothing in the room writes about itself.
| # | Item | Where | Measured by | Status |
|---|---|---|---|---|
| 1.1 | The 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 _sectionish | pegs refused per day, logged; the Hinton peg as the regression case | built 09-08 |
| 1.2 | The 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 flag | notebooks below the floor per day, logged | built 09-08 |
| 1.3 | The 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_one | facts per notebook before and after, on the thin third of a day; cost per notebook | built 09-08 |
| 1.4 | The 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_one | peg fetched (not walled) for the lead, day over day | built 09-08 |
| 1.5 | The 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 guard | real pegs per day (was ~14 of 35); the refused count; a dev pass | built 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.
| # | Item | Where | Measured by | Status |
|---|---|---|---|---|
| 2.1 | The 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 openings | entries per class and band; every entry carries its meters | built 09-08 |
| 2.2 | The 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 tables | the two band tables, published | built 09-08 |
| 2.3 | The 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_gate | the smoketest pin; the brew log shows the band per piece | built 09-08 |
| 2.4 | The shelf trio by band and subject. Three openings from the commission's band, nearest subject first. | register_examples | a Fable is never shown Galloway | built 09-08 |
| 2.5 | The 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 bank | a zh piece carries a floor reading in the brew log; the 09-06 信用的成本 as the regression case | built 09-08 |
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.
| # | Item | Where | Measured by | Status |
|---|---|---|---|---|
| 3.1 | The 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 headings | prompt size (47.6k → ~29k on the specimen); the register meters and the echo map on the pair; Read 2 | built 09-08 |
| 3.2 | The 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 profile | the captured prompt carries it; a living persona's piece can cite its own last stance | built 09-08 |
| 3.3 | The 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_piece | the smoketest pin; long-word rate on the fixed-horizon personas | built 09-08 |
| 3.4 | The 口语化 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 page | the four counts on the study page, Ink against the bank; the flag in the brew log | built 09-08 |
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.
| # | Item | Where | Measured by | Status |
|---|---|---|---|---|
| 4.1 | Gemini 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 editor | one dev piece written on it from the box (Gemini is unreachable from the PC) | built 09-08 |
| 4.2 | The 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 runs | the meters per engine; the metaphor rate per engine; Read 3 | owed |
The commission pre-writes the argument, turn and all. The same subtraction the writer's brief got.
| # | Item | Where | Measured by | Status |
|---|---|---|---|---|
| 5.0 | The 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 validator | unpegged pieces per day: zero; light pieces per day: two | built 09-08 |
| 5.1 | The 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 contract | the echo map: commission → the piece's last paragraph, before and after | built 09-08 |
| 5.2 | The 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_piece | titles beginning with「The」per day | built 09-08 |
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.
| # | Item | Where | Measured by | Status |
|---|---|---|---|---|
| 6.1 | The 意译 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 page | the translationese lint on both arms; Read 4, five pairs, the owner's pick | built 09-08 |
| # | Item | Where | Measured by | Status |
|---|---|---|---|---|
| 7.1 | The 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 format | a speaker-line piece shows as dialogue on the phone | built 09-08 |
| 7.2 | The 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 day | owed |
| 7.3 | No 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 clause | age claims per day | built 09-08 |
| Phase | Build | Model spend | The owner's time |
|---|---|---|---|
| 0 · subtractions | a day | 0 | Read 1, the next box brew, ~15 min |
| 1 · the desk | two days | a few cents a day, ongoing | none |
| 2 · the standard | two evenings | ~$2 once (the metaphor annotation of the bank) | none |
| 3 · the profile | a day | ~$1 (one pair brew) | Read 2, ~15 min |
| 4 · the model | a day | ~$1.5 (one pair brew, Gemini priced) | Read 3, ~15 min |
| 5 · the editor's brief | a day | ~$1 (one pair brew) | none; the echo map decides |
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.