← Qnative (provisional) · c8
review-1.md
c8 review stop 1: the name, the bridge, the small items
2026-11-12. For: Mark. What's here: steps 1 and 2 of design c140's D14 order. Step 1 is the crate's name (D2); step 2 is the four small items (D13). Four commits sit on main on top of c7 (e3ffc94). Nothing is pushed.
How to try it
cargo build --workspace, thencargo test --workspace: 175 tests pass, and the build prints no warnings.node scripts/tokens-to-kit.mjs --check: both generated token files match the layer at 8b15751. From design,node scripts/tokens-to-kit.mjs --checkruns the same through the wrapper.scripts/check-lean.sh: the two release variants and the lean check; it passes (2 min 16 s here).- In the app, three things to look at:
- Inventory › any listing filtered to nothing, in dark mode: the empty box is dark now.
- Providers › an account page in dark mode: the provider link's hover is the lighter grape.
- The Sensor page in a synthetic world: the note under the facts reads without cycle ids.
What was built
| Commit | Ruling | What |
|---|---|---|
a5ca520 | D2 | crates/layer → crates/qguikit. The package, the workspace dependency and the three crates that depend on it are renamed, along with 270 layer:: paths in 40 files. lib.rs says what QGUIkit is, and the c8 cycle is opened. |
8b1af18 | D13.4 | The token bridge moved here from design, with --check and a CI job (tokens). The job checks the layer at the stamped commit (blocking), then at the layer's main (a warning). The regenerated files changed in three comment lines only. CLAUDE.md gains a QGUIkit section, and the README lists the crate and the bridge. |
be4545f | D13.3 | The six flaws: the copied .qp() on the harness page's Skills table; the empty box and the account link's hover, now dark-correct; the inbox drawing a store error as failed, not empty; cycle ids out of UI strings (Sensor, devmode, a story); the scorecard's two stale rows and the missing DataHistoryGraph row. |
bc60635 | D13.1, D13.2 | The ten port specs are committed in cycles/c2.expressive-range/specs/ with a README, and c2's Outcome points to them. The bridge README names design as the source. |
In design (uncommitted there, as c140 is):
scripts/tokens-to-kit.mjsis a wrapper that runs this repo's bridge;app/data/worlds/bridge/pilot.jsonandtypes.tscarryit_contact, and the README says design is the source;- c140's
qdash-todos.mdgains a fourth web bug: the empty box'sbg-grey-200stays light in dark mode.
Figures
| Before (e3ffc94) | After (bc60635) | |
|---|---|---|
| Workspace build | clean | clean, no warnings |
| Tests | 175 | 175 pass (nozzle 45, stream 41, stories 36, fixtures 12, app 11, messages 11, types 10, qguikit 9) |
| Token check | none | both outputs match the layer @ 8b15751, locally and against a fresh clone |
| Lean check | passing | passes: devmode absent from the lean graph, all 12 markers 0 in lean and 1 in full |
| Release binaries | not read at e3ffc94 | lean 25,826,896 bytes, full 30,383,872 bytes (the first reading under the new name; c8's rename and fixes add no code of weight) |
The budget (strobe) is not re-read at this stop. Nothing here changes what the app draws at rest; the reading is owed at review stop 2 against c2's.
Calls
- The bridge moved repos. The CI check needs the bridge's script, design is private, and this repo's CI has no secret for it. The layer is public. So the script now lives here, beside its outputs, and design keeps a wrapper. The alternative is a repo secret that lets qnative's CI check out design. Default: keep the move. c132 D2's "design owns the bridge" holds through the wrapper, since design still runs it.
- Push. Four commits on
main, a fast-forward over origin's e3ffc94. Thetokensjob runs for the first time on push. Default: push after your look, then watch the first run. - The empty box differs from the web now. QGUIkit's is dark-correct and the web's is not; this is a flavor on the QGUIkit side until the layer's
Table.vuechanges (c140 qdash-todos #4). Default: file the web fix with the other three.
Not done here
- Steps 3–5 (D9, D8, D5), which come after your look.
- No story was added for the inbox's failed state. The store error can't be forced from a story yet, because the inbox reads SQLite directly, not through the nozzle. c140 row 2 names the inbox repository as a leak, and D9's restructure is where it moves.
- The merge thread is still active in qnative. It squash-merged c7 as e3ffc94 and reset
mainto it between my fast-forward and my first commit. The trees are identical, so my commits sit cleanly on top. Before pushing, check that it hasn't movedmainagain.