← Design notes

The brew — how Ink is made, nightlyproposal

The operating half of Ink, answering the owner's audit (2026-09-02):「do we have all the design decisions?」— the reader-facing half is decided (the essays · the look); this page proposes the four that weren't: the nightly pipeline, the slate policy (how many · which beats · which formats · who writes how often), where editions live, and the console's Ink tab. Recommendations are marked; the owner's calls are collected at the foot.

The decision audit

DecisionStateWhere
Feed layout + the day-seeded composerdecided · builtink-design · lib/ink_compose.py
Article ceremony · peg strip + in-app peg card · ⋯ menudecided · builtink-design · v1042–v1044
Formats (9, likeliness not assignment) · triggers (8 + the why-now contract)decidedvibes-essays
First-hand boundary · vantage (alive now, remembering then) · anecdote budget + memory bankdecidedvibes-essays
Tone gate (both-language antithesis meter) · author = DeepSeek V4 Pro thinking, Gemini failoverdecidedspecimens · chat 09-02
Hero art: DeepSeek art-directs → flash-image, batch modedecided · provenink-design
Language: one essay, frozen renditions, switch in the ⋯decided · mockedink-design §Language
The door = a room seeded by the essay + the essay as a SPECIAL BUBBLEdecided · unbuilt (step 1.5)vibes-essays
The nightly pipeline (stages · timing · failure rules)open → proposed belowthis page
The slate policy (count · beats · formats · cadence · language)open → proposed belowthis page
Where editions live on the boxopen → proposed belowthis page
The console's Ink tabopen → mocked belowthis page

1 · The nightly pipeline

Two passes, not one: an evening pass writes and gates the edition on DeepSeek's off-peak clock and hands the art to Gemini's batch queue; a dawn pass collects the art, composes the layout and publishes by 06:00. A brew never leaves a blank day — if anything fails, yesterday's edition stays current and the console shows why.
20:00 CST · off-peak begins 18:00 05:30 06:00 · published pegs8 triggers · SERP budget meetingslate N+2 · deks · hints writersV4 Pro · dealt anchors tone gatefail → runner-up renditionszh ⇄ en · gated art director → batchprompts · submit 50%-off overnight collect artmissing → sync paint (4.4¢) composeink_compose · seed publishdated file → pointer flip on any failure: yesterday stays current the console shows the stage that failed · Brew now re-runs commission N+2 · ship N (the gate's spare) · every stage idempotent · a re-run resumes from the last frozen artefact cost/day at N=8: authoring ~$0.18 · renditions ~$0.04 · art ~$0.18 batch · searches ~$0.04 → ≈ $0.45/day · ≈ $14/month
Why two passes: DeepSeek's off-peak window is the writing hour; Gemini's batch queue promises art「within 24h」but usually delivers overnight — the dawn pass paints the stragglers synchronously so no edition ships without its heroes. Every stage writes a frozen artefact (slate → drafts → gated → renditions → prompts → art → edition), so a failed run resumes rather than restarts, and the owner can inspect any stage from the console.

2 · Where editions live

ProposalContent is not code: on the box, editions + heroes + pegs live in /var/lib/mad/ink (beside rooms/ and the built personas), served by the existing /ink mount pointed at MAD_INK_DIR (default lib/ink for dev, which keeps the specimen editions in-repo as fixtures). Retained forever — the archive is the product's memory, and the threshold needs it. A nightly brew writes ~1 MB (8 heroes + JSON); a year is ~400 MB.

3 · The slate policy — how many, of what, by whom

Recommend 8 pieces a day at launch (floor 6, ceiling 12): enough for the composer's full rhythm (the well needs 5+, a compact run 7+), ~30 minutes of reading — a finite morning, not a feed — and a cast of 86 writing at most twice a week can supply 24, so eight leaves room for the gate to drop pieces without thinning the day. Scale on one number: rooms opened per slate.
AxisPolicy (the validator enforces; the editor is briefed)
Count8/day (6–12). Commission N+2, ship N.
Beats (8 house beats)World · Science · Tech & AI · Markets · Culture · Sports · China · Life & relationships. A day covers ≥5 beats, no beat more than 2 pieces; the beat least covered over the trailing week gets priority.
FormatsThe plain essay ≤ 3 of 8; ≥3 distinct other formats a day; fable and notes ≤ 1 each per day; ≥1 dialogue a week, ≥2 advice columns a week once reader letters exist; the response (商榷) whenever a piece has provoked rooms.
TriggersPer 8: ~4 breaking · ~2 calendar · ~1 reply/continuity · ~1 appointment column (the running-title recurring slot).
Language≥1 zh-original piece a day when a zh-voiced persona fits (the Ink Well's natural tenant); every piece gets its renditions.
Cadence≤2 pieces per persona per week · every public persona writes ≥1 a month (the whole cast stays exposed) · a new public persona debuts within 7 days · the used-anchor ledger caps repetition.
LeadThe editor's #1 by significance + art strength; never the same persona two days running; a zh lead at least weekly.

The mechanism is the house one: these are constraints in the editor's brief (so it composes toward them) and checks in code (so a miss is caught, not hoped against) — one re-ask, then runner-up swaps. All numbers are console knobs, not constants.

4 · The console's Ink tab

The admin console gains an Ink tab in its own list-row grammar. Six sections down the left; the landing is today's edition with the brew's health strip on top. Everything the pipeline froze is inspectable here, and every policy number above is a knob.

-ish consoleRoomsModels & APIsSettingsInk
Editions
The brew
Slate policy
Cast & beats
Sources
Metrics
published 06:00 art: 7 batch · 1 sync gate: 8 of 10 passed Brew nowHold editionKill switch · ON today $0.47 · Sep $12.30
Tuesday, September 2 · 8 piecesgate · art · zhrooms
Notes on a Chokepoint
Churchill · World · Notes · lead
0.4 · batch · ✓3 roomsopen · regenerate hero · hold
The Part Grown Outside the Body
Da Vinci · Science · Dispatch
0.6 · batch · ✓1 roomopen · re-translate · hold
《互惠算法》
刘慈欣 · China · Fable · well
0.3 · batch · orig5 roomsopen · hold
The booth is a safe
Banksy · Culture · Letter
0.9 · sync · ✓0 roomsopen · regenerate hero · hold
Eleven things about this market
Munger · Markets · Notes · gate-dropped (antithesis 4/300w)
1.8 · — · —read draft · re-run

Rows are pieces; the trailing verbs are the owner's hands on the edition: open (the reader, as users see it), regenerate hero (another batch/sync paint), re-translate, hold (unpublish one piece — the composer re-flows), read draft (a gate-dropped piece, with its meter score). The dot is the tone-gate score; the strip is the brew's health and the day's spend.

SectionWhat it holds
EditionsEvery edition by date: pieces, gate scores, art status (batch/sync/missing), renditions, peg ok, rooms spawned; per-piece verbs above; whole-edition hold/re-publish.
The brewSchedule (evening/dawn times, timezone), the kill switch, Brew now, the last run's stage log with timings and the stage that failed, per-stage models (editor · writer · translator · art director · painter · failover) drawn from the Models tab's roster, retry.
Slate policyEvery number in §3 as a knob: pieces/day, beat quotas, format quotas, weekly minimums, cadence caps, language minimums, gate threshold, length floors per language.
Cast & beatsPersona × beat affinities (editable), last-written date, pieces this month, opt-out (a persona that shouldn't write), debut queue for new personas.
SourcesQuery recipes per beat, the calendar file (data days · anniversaries), blocked domains, the SERP engine chain — the same engines the dispatch uses.
MetricsThe four that matter: engaged reads (30s+), doors opened, rooms spawned per slate (the neutron-bomb number), return rate — per edition, per beat, per format, per persona. Cost per piece beside each.

The owner's calls

Decide 8 pieces a day at launch (6–12)? the eight house beats as listed, or a different cut? the brew clock — evening 20:00 / dawn 05:30 CST, publish 06:00 (reader morning in CST; world readers get it as their overnight)? /var/lib/mad/ink as the box's edition store? the Ink tab as the console's fourth tab (vs a section under Settings)?
Proposal · 2026-09-02 · siblings: the essays · the look · specimens · market scan · the engine