Bootstrap branch. Six commits, no application code yet — this establishes how work happens here and lands the design spec. Recreated from carlos/docs discussion #1, which stays as the historical record; amadan has no transfer verb.
7b15270 — AGENTS.md as the canonical agent-instructions file. Paul's two rules: specs and whole branches reviewed by the highest-capability model available, and the shipping cadence (worktree, branch, regular pushed commits, squash-merge only when done, approved, and CI green).0a07f0a — amadan house rules skill and the prompt ledger at prompts level.66e9ff6 — design spec r1.b12406c — move to oficina/docs.14a3c11 — design spec r2, after a Fable review of r1 returned "not ready to become an implementation plan" with seventeen defects.82961a2 / e473d7c — write the class vocabulary, and record the release gap.
What the review found
Three findings holed the centre, and all three passed every check the spec had defined for itself.
- r1 declared "one engine, one truth" and chose ProseMirror — which is contentEditable, so the browser breaks lines. Two layout authorities. The conformance gate compared wazero against a browser running the same module, so it would have stayed green while the product was wrong. Corrected: the engine owns page geometry, the browser owns lines within it, same self-hosted fonts.
- "The same compiled artifact both sides" was not available —
ywasm is wasm-bindgen and will not instantiate under wazero. One artifact meant a hand-rolled C ABI and losing y-prosemirror, y-indexeddb and y-websocket: offline and presence, traded for a purity being praised in the same paragraph. Corrected to JS yjs in the browser, Rust y-crdt on the server, fixtures as the contract — which is golden vectors, the thing r1 claimed to have transcended. - The word "font" did not appear in r1. §11.1 now settles it, with Carlito and Caladea as metric-compatible stand-ins for Calibri and Cambria so imported Word documents paginate the way Word paginated them.
Also corrected: doc_updates is bounded; hibernation versus held WebSockets; page breaks are decorations rather than nodes, which keeps page geometry out of the CRDT; §9 re-synced against the real five-call Sheets contract (r1 had instances holding the pepper, which Sheets had already ruled against); §8.1's three contradictory sign-in positions collapsed into one; full-text search cut because an FTS5 index would fail our own plaintext gate.
The correction after the correction
r2 reported that ui.ThemeCSS did not exist. It does — main:ui/ui.go:309. It is absent from v0.19.0, and this session was reading a checkout parked on a feature branch at that tag. The Fable review made the same mistake and this session repeated its conclusion without checking the tree.
Underneath: a spec ruling, code on main, and code in the latest release are three different things. main is 17 commits ahead of v0.19.0 (tagged 2026-08-24), and those commits are the themes, shells and twelve locales the design system describes. Markup decision reversed to class="rst-*" accordingly — the attribute grammar exists in no tree and is unstarted.
Two traps recorded: this repo squash-merges, so git branch --merged says nothing about whether work landed; and cite origin/main explicitly, because a local checkout may sit on a feature branch at a tag.
Open
- Merge as a bootstrap exception? CI is exit 3 — no
.amadan/ci.d/ yet, and a gate that checks nothing to turn the number green teaches everyone to ignore CI. carlos/docs retirement — Paul's.- Passkey RP ruling (§8.1) — reached this session by relay; recorded as ruled-pending-confirmation, matching how Sheets records it.
- The identity-assertion helper — drafted jointly with Sheets, pending Paul's go-ahead to open it on rastrillo's GitHub.