← Design · c140

Skills and Tools

c1402026-11-12 · from the work of building the QGUIkit layer

In three days the QGUIkit layer and its pages were built by hand: spec, port, story, capture, scorecard row and review stop, page after page. Every step the records show done more than twice is a candidate here, with how often it recurred and where it went wrong. Most of the candidates turn something held by eye into something held by a machine.

Ranked by what each would pay back. Mark ruled /native-port and spec-measure first (review stop 1, D11). The parity register comes with c141's dual-surface docs, and the token check with the sweep in the qnative cycle.

Skills
a loop an agent follows
3
Scripts
a step a machine does
4
Checks
a rule CI holds
3
  1. 1

    /native-port

    skillrecurred: 12 pages in three daysFirst (D11). Built 2026-11-12: .claude/skills/native-port/SKILL.md, the eight-step loop; /gpui-story fixed (tests in -p stories, the four worlds, the region-text test); not yet run on a real port.

    The whole port loop as one skill: the spec measured on the web, the six fleet → personal rules, a layer-first checklist (the pantry test, roles not hex, type tokens, the shared lede and link), the app map, a story with a region assertion, a generated shot program, the scorecard row, the review-stop entry.

    The evidence

    Seven listings and five later pages were ported by hand from instructions in a plan. /gpui-story points to a PATTERNS.md that does not exist, names the wrong test crate (-p app, where the page tests live in -p stories) and covers none of the spec, scorecard or app-map steps.

    What exists today

    /gpui-story covers the story and the capture well

  2. 2

    spec-measure

    scriptrecurred: 10 specsFirst (D11). Built 2026-11-12: scripts/spec-measure.mjs, 4 s a route; the worked run on Tools matches the hand spec within 1 px on all 7 columns, and the native page on 0 of 7; --states records loading, failed and filtered-to-nothing.

    Playwright on qdash at 1120 × 720, reusing the box, text and style reader in scripts/illustrator-export.mjs: writes a JSON spec into the cycle (column widths, type, colours mapped to roles, the exact copy) that a Rust test checks the widths against.

    The evidence

    Ten specs written by hand, never committed, nearly lost; 148 hard-coded widths in the pages; the Tools widths already differ.

    What exists today

    Nothing

  3. 3

    parity-register

    checkrecurred: every layer changeWith c141, the dual-surface docs (D3).

    The scorecard as JSON both surfaces read, with the Vue file’s SHA when each row was checked; a CI step that flags a row when its Vue file changes after that SHA; the design site renders the register on each component page.

    The evidence

    The scorecard was stale within a day; the layer’s in-flight restyles of JumpPills and PageTitle have no way to reach their twins.

    What exists today

    scorecard.rs, by hand

  4. 4

    tokens --check and a lint

    checkrecurred: every pageWith the token sweep in the qnative cycle (D5, D13).

    tokens-to-kit.mjs in check mode in qnative’s CI against the layer at a pinned tag; a lint that refuses hex outside tokens.rs, text_size(px(literal)), rounded(px(literal)), cycle ids in UI strings and unwrap_or_default on store reads.

    The evidence

    433 literal type sizes, 14 hex literals, 51 opacity calls, the inbox’s error-as-empty, “design c132 D10” in the Sensor page’s copy.

    What exists today

    The generator; a read-only drift comparison written by c140’s token reader

  5. 5

    page-state matrix

    checkrecurred: every page

    Every route × Healthy, Slow, Unavailable, ShapeMismatch × the four worlds as headless tests, on nozzle::scenario’s conditions and the region helper: the native twin of scripts/qdash-r31-check.mjs.

    The evidence

    No story draws a page’s Failed or Loading state; the conditions exist and only Live uses them.

    What exists today

    The conditions and the region helper

  6. 6

    vectors for the formatters and rollups

    scriptrecurred: 14 ported helpers

    live-vectors.sh extended to qdash’s format.ts and rollups, so format.rs, the per-page Rust and design’s TypeScript are held by the same corpus.

    The evidence

    Three hand copies of fmtN and its siblings; a Rust port re-ported to TypeScript; a latent toFixed rounding difference.

    What exists today

    live-vectors.sh for the stream

  7. 7

    recut

    scriptrecurred: 4 recuts

    One command: cut the four worlds, run the strict contract test, sync both fixtures (worlds and bridge, in the right direction), list the captures that are now stale.

    The evidence

    The worlds were recut four times in three days, each followed by a sync and a recapture of both media by hand; the bridge already drifted.

    What exists today

    cut-world.py, sync-worlds.sh, sync-bridge.sh, separately

  8. 8

    shot programs from stories

    scriptrecurred: 6 programs

    Generate the native shot program from stories × worlds × modes; the stories binary writes its git SHA and world beside each PNG so capture refuses a mismatch.

    The evidence

    Six native programs written by hand (48–147 lines); a stale binary once captured the default world, caught only by reading the PNGs.

    What exists today

    capture.mts --native

  9. 9

    review-stop scaffold and owed readings

    skillrecurred: 7 review stops

    Fill a review stop’s Figures from measure.sh summaries and its captures from the shot program, leaving the calls to the author; keep a queue of owed strobe readings and run them when the machine is idle.

    The evidence

    Seven review stops in three days with the same sections; readings owed since c4 and c5 because the Mac was in use.

    What exists today

    scripts/footprint/measure.sh

  10. 10

    /surface-audit

    skillrecurred: each release from now on

    This evaluation, repeatable: a script that recounts every number on this page (literals, hex, role reads, slot seats, builders, tests, stale rows) per release, so the scorecard is re-scored from data, not from four readers.

    The evidence

    c140 took four readers about forty minutes to count what a script could count in seconds.

    What exists today

    Nothing

Already good, worth copying

  • scripts/live-vectors.sh runs qdash's own TypeScript over a corpus, and the Rust tests compare against its output. It is the best parity mechanism in the stack, and tools 3, 6 and 10 are this pattern applied elsewhere.
  • ts-to-rust.py with the strict fixtures test, cut-world.py and check-lean.sh each do one job and are checked.
  • The native capture mode (npm run shots -- --native) files every story per world into the atlas with nothing written in the native checkout.
  • /gpui-story covers the story and the capture well. Tool 1 is its larger sibling, not its replacement.

The records

Qpoint Brand Style Guide