← Design · c132
review.md
c132 review stop: the bake-off on Inventory (Phase 1, 2026-11-11)
Contents
Reader: Mark. The decision: the medium for native screens (Phase 2, D1). What to look at: the bake-off page (A beside B, wipe them), the mocks live in each world, and the figures below. Phase 2 is your pick, not the evidence's; this note says what the evidence suggests and why.
What was built
- Phase 0.
app/composables/useNativeWorld.ts:useNativeWorld(name)loadsapp/data/worlds/<name>.json(one dynamic import per world, so only the named world is bundled; loaded on the client, so the server renders the loading state and the payload carries no rows) and exposes the manifest andget(route, params?), which builds the nozzle's key (route?sorted-query;period=alldropped;quote_plusencoding) fromtypes::Request::key. The plan's Phase 0 records what each medium needs installed and the bake-off page (Inventory, ruled). - Phase 1, medium A. Three Inventory views in a native skin: the landing (twenty micros), Harnesses (band and ledger, fleet → personal as c2 did) and the merged harness page (header, tiles, Sessions, Configured here, Surface), each in
fresh,minimalandmeridian-day90, rows only fromuseNativeWorld. The skin is the kit's chrome in our tokens and Inter (app/components/native/: Window, PageHeader, Period, LabBar, Skeleton, Icon); the pages compose the layer (DataIndexSection, DataMachineMicro, DataMachine, DataRankedBars, DataSegmentBar, DataTable, DataListingBar, ActorHeader, NavJumpPills, DataSurfaceSection, UxPill, AgentAvatar). The rollups are ported fromlanding.rs,harnesses.rsandharness.rs(app/data/native-inventory.ts). Registered as thenativephase of/pages. - Medium B is c2's: the real app on GPUI, captured off-screen on priya-x1 (thread
p2-harnesses). Not built here. - The bake-off page
/pages/native/bake-off: A beside B per view and state (UxImageCompare: wipe, onion, side by side), the time and friction per medium, and this note's short form. Eleven A captures in the atlas (threadp1-bake-off-a, subjectspage/native-inventory,page/native-harnesses,page/native-harness, variantworld=<name>), cropped to the window B was photographed at (1120 × 720 points).
The figures
| A · Vue mocks in a native skin | B · the stories crate | |
|---|---|---|
| The three views in three states | 12 min of wall clock to the three views answering on :3000 in all three worlds (09:14 → 09:26); about 40 min to the captured, cropped and verified bake-off page (the log). One agent, no build loop. | About 60 min between 17:52 and 18:52 on 2026-11-10 (c2's commits), which also built the layer in Rust the views stand on. One agent, 2–5 s incremental builds. |
| The groundwork | The layer (the web app's), the worlds (Phase 0 prep), the capture system, the design site. New: one composable, six small components, one rollup file. | The world cut, 72 generated types with a strict drift test, the nozzle and repositories, the token bridge and theme, the layer crate, the stories crate and off-screen capture, the Dev section and component docs: c2's kick-off to 17:52 the same day. |
| The rest of the section | Not built; the other rail items are inert. | 1 h 43 (18:52 → 20:35): six listings and seven details to specs measured on qdash, the expand row, the skill editor. |
| States photographed | 3 worlds × 3 views, plus Sessions and Surface landed: 11. | 1 world × 3 views, plus Sessions, Configured here and Surface, two in dark: 9. minimal and fresh exist in the app (--world) and are unphotographed. |
| Friction | DataTable sorts by column label; NavJumpPills spies on window.scrollY, so inside the window's scroll box the highlight does not follow; no Lucide glyphs in the layer (hand-drawn); the capture is a 1× viewport shot cropped with PIL (capture.mts has no scale or clip flag); the program's hideCss hid the rail until it became an aside; ActorHeader's metadata cell wraps under the identity at 844 px where B keeps three cells in a row. | From c2's record: subgrid → one flex row per grid row; fit-content(45%) → two flex columns; auto-fill reads a width probe one frame late; the kit's table has one fixed row height (the expand row on GPUI's list); child bounds recorded before the scroll offset; variable Inter drew every weight regular (five static faces bundled); a story must fit about 900 points; seven contract overrides. |
| Who can mock | A person with a browser, or an agent. Every lab tool works unchanged. | An agent with Rust 1.95+ and the workspace. A person reviews a binary or PNGs; a person mocking in Rust is untested. |
| Fidelity and drift | The layer's real components, the kit's chrome imitated: it can draw what the kit cannot and cannot show what the kit does differently. | The real thing; 28 of 36 components at fidelity 3 on the scorecard. |
What the evidence suggests
- B is the medium of record for a native screen. It is the real thing, its stories are the page's tests (R6), its captures are solved (2×, off-screen, light and dark), and once the layer in Rust existed the three views took an agent an hour. Nothing A draws ships; everything B draws does.
- A is the ideation and review medium, for a person without a toolchain and for an agent sketching before committing to Rust: twelve minutes to three views in three worlds, every lab tool working unchanged. Its rule is D6: an A mock names its world, so the B story that follows is checked against it row for row. The wipe on the bake-off page is that check.
- The shared world is the seam, with the token bridge. The bridge keeps the two drawings one colour; the world keeps them one truth. Where both captures exist, the rows agree to the digit (the three meridian-day90 pairs).
- Phase 3 should give B its per-world captures first (the native capture mode, D3): every story per world into the atlas with
surface: native, so B's side of a comparison never has the six holes the page shows today. A's side needs a--clip(or a scale) flag oncapture.mtsso the window is captured as the window.
This is the plan's default (D1: B, with A for ideation) confirmed by evidence rather than overturned; the one amendment is that A is not "ideation only" but the review medium for people, with D6 making it honest.
Open for you — answered 2026-11-11 (evening)
The pick (Phase 2)Ruled: B of record, A to sketch and to review (D1), with D6 holding and the amendment standing: A is the review medium for people, not ideation only.The chromeRuled: keep the imitation inapp/components/native/, re-checked at each review stop by a wipe against a real shell capture; no Vue port of the kit's Shell, no compositing into shell PNGs (D7).Mock lifetimeRuled: a mock outlives its story as the person's medium, naming its world so the story stays checkable against it (D8).- The recut (
meridian-day90→ nina-mbp, priya's cut aspilot) is c2's; when it lands the lab re-syncs (scripts/sync-worlds.sh) and the default world's captures are retaken. Phase 3 takes the per-world native captures after it if it lands while Phase 3 runs, else captures what exists and notes the recapture.