Skip to main content

max / quasi

Strip historical narrative from documentation Remove what a doc used to say, when it changed, the incidents that justified a rule, finished migration narration, and counts and versions that rot. State the rules in the present tense instead. Keep every instruction, prohibition and threshold, and keep the measurements that make a rule actionable. Public-facing docs keep their explanatory voice.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session
https://claude.ai/code/session_01MptwXZ8k65v19rFmdGAyki
Author: Max Johnson <me@maxj.phd> · 2026-08-31 01:51 UTC
Signed with PGP, not checked
Commit: 40c353d623f4100db8a68460e61ad4165e1cd544
Parent: 04d94b0
59 files changed, +1542 insertions, -1892 deletions
M CONTRIBUTING.md +3 -5
@@ -28,11 +28,9 @@
28 28
29 29 **Which two implementations does this have, today or already committed to?**
30 30
31 - If the answer is one, it is an indirection and it does not belong here yet. The
32 - lesson is recorded in `~/Wiki/makeover-geometry.md`: the hardest open question
33 - in that crate only got answered because a second consumer forced it, and the
34 - window to move the API shut within 48 hours of adoptions landing. Boundaries
35 - enter when the second implementation exists, not when it is imagined.
31 + If the answer is one, it is an indirection and it does not belong here yet.
32 + Boundaries enter when the second implementation exists, not when it is
33 + imagined.
36 34
37 35 Two further exclusions, both deliberate:
38 36
M README.md +18 -24
@@ -43,10 +43,10 @@
43 43 which driver is configured and how migrations run, and queries stay written
44 44 against the driver directly.
45 45
46 - The two stores are not one query layer, and quasi does not pretend otherwise
47 - (settled 2026-08-07). Embedded is `rusqlite` and synchronous; hosted Postgres is
48 - `sqlx` and async. A stack claiming a single query layer would have the
49 - scaffolder generate the wrong one.
46 + The two stores are not one query layer, and quasi does not pretend otherwise.
47 + Embedded is `rusqlite` and synchronous; hosted Postgres is `sqlx` and async. A
48 + stack claiming a single query layer would have the scaffolder generate the wrong
49 + one.
50 50
51 51 Boundaries already owned elsewhere stay where they are and are referenced rather
52 52 than absorbed: `makeover` and `makeover-geometry` for colour and spacing,
@@ -94,10 +94,7 @@
94 94 `-server` are a window and a listener over the same router. Both serve the same
95 95 screens and neither knows the other exists.
96 96
97 - ## Status
98 -
99 - The router, both host adapters, the webview renderer, the store's migration
100 - runner and the scaffolder are implemented.
97 + ## The parts
101 98
102 99 The router carries the contract in full: one address space where the verb
103 100 separates a read from a write, a screen tree composed from `makeover-layout`'s
@@ -106,9 +103,9 @@
106 103 because the two renderers shipping first call it inside a frame and an event
107 104 loop.
108 105
109 - `quasi-http` is what the two hosts turned out to share once there were two of
110 - them. Decoding a query string and a form body, mapping an error's class to a
111 - status, and naming a fragment's region in an `HX-Retarget` header. The transport
106 + `quasi-http` is what the http-shaped hosts share. Decoding a query string and a
107 + form body, mapping an error's class to a status, and naming a fragment's region
108 + in an `HX-Retarget` header. The transport
112 109 is htmx 4, which is what an emitted document links and what the response headers
113 110 here are checked against. Nothing in it knows which host it is in, and nothing
114 111 in it is async.
@@ -134,22 +131,19 @@
134 131 what it is for, whether it ships on and what its knobs are; the configuration
135 132 follows from the declaration, keys, postures, defaults and a described settings
136 133 pane, rather than being written beside it in three places. Delivery is a host
137 - adapter of one method, because everything else a host would answer for itself —
138 - consulting the kind's `enabled` key, suppressing a duplicate, staying quiet
139 - about what came due while the app was shut, bounding the memory that takes — is
134 + adapter of one method, because everything else a host would answer for itself
135 + (consulting the kind's `enabled` key, suppressing a duplicate, staying quiet
136 + about what came due while the app was shut, bounding the memory that takes) is
140 137 shared and belongs to nobody's renderer.
141 138
142 - `quasi-store` is what `sqlx::migrate!` used to be. SQL files embedded at build
143 - time, applied once, recorded in a ledger with a checksum, so an applied
144 - migration is immutable. It is here because goingson and Balanced Breakfast each
145 - hand-wrote one after leaving `sqlx-sqlite`, and a generated app would have been
146 - the third.
139 + `quasi-store` is the embedded store's migration runner. SQL files embedded at
140 + build time, applied once, recorded in a ledger with a checksum, so an applied
141 + migration is immutable.
147 142
148 - `quasi` is the scaffolder. It followed the router on the condition that the
149 - router's shape be proven against two hosts, which it was. Its template is real
150 - Rust and real manifests under `crates/quasi/template/`, excluded from the
151 - workspace and embedded in the binary — readable and diffable, rather than a
152 - liquid dialect that compiles nowhere.
143 + `quasi` is the scaffolder. Its template is real Rust and real manifests under
144 + `crates/quasi/template/`, excluded from the workspace and embedded in the
145 + binary, so it is readable and diffable rather than a liquid dialect that
146 + compiles nowhere.
153 147
154 148 Design and sequencing live in the wiki note `quasi-overview`; the backlog is in
155 149 GoingsOn under project `quasicoherent`.
@@ -23,7 +23,7 @@
23 23 `quasi-immediate` is absent. Its entry point needs a live egui `Ui`, so
24 24 measuring it means standing up an egui harness rather than calling a function.
25 25
26 - ## Baseline, fw13, 2026-08-15
26 + ## Baseline, fw13
27 27
28 28 The screen is a copy of MNW's `library_contacts` pane: two tables, five columns
29 29 and two, linked values in two flavours, a destructive per-row act.
@@ -53,5 +53,4 @@
53 53 The terminal is the expensive column and its cost is mostly not per-row. 2,375
54 54 allocations to draw a five-row screen against the webview's 205, rising only to
55 55 12,576 at 200 rows where the webview reaches 6,060. Sublinear because the frame
56 - clips, and high at the bottom end for a reason nothing here diagnoses. That is
57 - the bench doing its job; the diagnosis is separate work.
56 + clips.