The issue — mechanics
The fork in this look
The first interaction is a verb on the cover, "Read ↓" or "Write ^". Line 02, the composer, is live at once: / focuses it anywhere, and keys typed on the cover land in it. The mind answers the three "for instance" questions and p. 031 at publish (about $0.05 a version), so first answers are instant.
Read binds all 56 pages, indexable and model-free. Asking on the cover sends the issue out uncut: standard pages fold to signature strips ("Tuesday, pp. 024–030"), leaving only the cover and the visitor's pages open, "only what you ask for" in paper. Cutting a strip or pressing Read opens it, and the surface note turns from realm to site.
The view transition is the filing: the browser jumps to the inserted page and the question (view-transition-name: q02) flies from line 02 into its head in 400 ms. The jump must be instant; the mockup's smooth scroll inside the transition is captured before it moves.
The standard route
The nav is the cover's contents, then the running head: section, four days, tickets, folio, line 02. Pages are server-rendered from the snapshot, folios computed at publish, never by the model; /agenda/tuesday lands on p. 024. The agenda is four programme pages in the timetable grammar; speakers are the surname index and the plates, never a headshot grid; tickets are the bound-in card, base price at display size, the fee-inclusive price in mono, one link out. The issue gains Partners (by tier) and Letters (the eight FAQ as correspondence), homes for sponsor_wall and faq.
Asking the mind
Enter files the line. Thinking changes the paper: on phase: thinking a galley slip of cover stock slides out under the rule, the caret ticking like type being set; say streams onto it in the mind's italic. The first component imposes it: folio assigned, page filed after its subject (a Wednesday answer as 037a, tickets after the card), contents line added. After 8 s without a word the slip reads "still setting".
Faces carry provenance: italic is the model's, roman a record set by id, mono the renderer's.
- Text:
say(45 words at most) is the standfirst;faqis a letter, Zpryme's reply in roman. - Speakers:
speaker_grid(12 at most) sets contributor rows with role and folio, plates in the margin;speaker_cardis a contributor's note with bio and sessions. - Sessions:
session_cardis an article opener with its abstract. - Agenda day: the timetable plus each person's role. That keeps p. 031 within the contract: Tuesday's 11 sessions carry all 28 names;
speaker_gridstops at 12. - Venue: city, "venue to follow", the pin labelled a pin, the prior venue footnoted.
- Tickets: a strip torn from the card, on cover stock.
- Choices: small caps under the line, replacing the suggestions; a page link becomes "see p. 040".
- Sources: a mono footnote from
sources, version and counts, with a sample clause the model cannot remove. - Fallbacks: a reply with only
sayandchoices, oroff_topic, stays an unfiled margin note;partialandnot_in_snapshotadd the proofreader's query mark; a failed turn spikes the slip, filing nothing; offline, the mockup's matcher answers and says so.
The assistant in the chrome
The composer is a rule: line 02 on the cover, in the running head and at the phone's foot, sharing one counter, one tabbable at a time. The edge-parked card is that galley slip, hanging from the line used (under the running head, above the phone's foot). After an off-screen filing it shrinks to "filed p. 037a ↑"; at rest it offers this page's most-asked question, site-authored, ranked by logged topic counts, so no visitor text is kept. The state line is the colophon: snapshot, counts, sample flag, model, motion and shortcut switches.
Data, performance and accessibility
The fixture holds what the issue prints: 77 speakers, 59 portraits, 36 bios, 50 sessions, four tiers with base price, fee and total, the venue gap, eight FAQ, 39 partners and placeholder flags. WordPress and Whova must also add a crop focus per portrait, sponsor logos as vectors cleared for one ink, abstracts (3 of 50 today) and rooms (none). The mockup's s-d2-02 ids must be re-keyed.
Motion: marks drawn once (0.9 s each), the city written in 1.2 s, four caret blinks, rows settling 70 ms apart, one transition per filing; nothing loops at rest. Redraw marks per changed page; lazy-load plates below the cover. Reduced motion draws marks still and skips the transition, focusing the new heading. Escape stops a turn. Screen readers get hidden marks, real aside notes and one polite status line per filing. Quiet ink #6F6B61 is 4.1:1 on newsprint, failing AA at 11.5 px; #5F5B52 gives 5.2:1.
Build plan
Carries over: server.py whole (SSE, incremental reader, sanitizer, sessions, guards, budget, self-test), the fixture and builder, the catalogue grown from seven components to the brief's ten, the renderer's plumbing from mind.html (stream reader, by-id lookup, reconcile, status region), and the mockup's CSS, marks, filing code, plates/screen.py and matcher; the surface note grows to the wiring's page note. New: every component's markup in this grammar, publish-time pagination, placement, notes and answers; galley, strips, transition, slip; Partners and Letters; every portrait screened. Four to five weeks for one front-end developer, beside the shared engine.
Risks
- p. 031's 28 contributor rows exceed
speaker_grid: reset it as Tuesday's timetable, or ask Zpryme to reopen the contract for anorderprop onagenda_day. - Follow-ups to a precomputed answer need that turn seeded byte for byte; confirm against preserved-thinking binding first.
- Answers land pages away in a 12,700 px issue (25,300 on the phone); the transition and slip must keep readers oriented.
- Standing margin notes, written by the mind at publish, are unchecked prose: eval and read them.
- Remembering questions, as the mockup does, waits on Zpryme's decision 9.