test(state): #133 — pin the #107 legacy-name shim (and its fail-closed gate)
All checks were successful
Check / eval (push) Successful in 4m9s
All checks were successful
Check / eval (push) Successful in 4m9s
mkFlake prefers state.json and still accepts the legacy theme-state.json, because a machine only migrates on its next menu write. Nothing evaluated a checkout carrying ONLY the legacy name, so the shim could rot with every check green — breaking rebuilds for precisely the users who have not opened the menu since #107, i.e. the ones least likely to see it coming. checks.state-legacy-name evaluates two fixtures: legacy-only must resolve, and no-state-at-all must still throw. The gate is half the shim's contract (it turns "no state file" into one readable error instead of a readFile stack from inside the module system) and was equally unpinned. Cheap by construction: mkFlake wraps its return in `builtins.seq _themeState`, so forcing the attrset forces the state read and nothing else — no module system, no home.nix. Hence a one-file fixture and no measurable cost (flake check still ~35s). That file is a SYMLINK to the shipped template's state.json: a copy would drift and the check would quietly start testing a fossil. The fixture also asserts it has no state.json, or it would pass while testing nothing. Both assertions proven by breaking lib.nix — deleting the fallback, then defeating the gate — and watching each fail by name. Delete this check together with the shim and the nomarchy-theme-sync alias. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -555,6 +555,22 @@ Design/decision records and a running log of shipped work (items marked
|
||||
`%26`, `%3F`, `%23`, `caf%C3%A9`. **Unverified on purpose:** whether each
|
||||
vendor's page fills the box or auto-submits — testing that means posting into
|
||||
Bernardo's own accounts.
|
||||
- ✓ **The #107 compat shim is pinned (#133, 2026-07-16):** `mkFlake` prefers
|
||||
`state.json` and still accepts the legacy `theme-state.json`, because a
|
||||
machine only migrates on its next menu write — but nothing evaluated a
|
||||
checkout carrying **only** the legacy name, so the shim could rot with every
|
||||
check green, breaking rebuilds for exactly the users who have not touched the
|
||||
menu since #107 (i.e. the least likely to notice). `checks.state-legacy-name`
|
||||
now evaluates two fixtures: legacy-only must resolve, and **no state at all
|
||||
must still throw** — the fail-closed gate is half the shim's contract and was
|
||||
equally unpinned. Cheap by construction: `mkFlake` wraps its return in
|
||||
`builtins.seq _themeState`, so forcing the attrset forces the state read and
|
||||
nothing else — no module system, no `home.nix` — which is why the fixture is
|
||||
one file and the check costs no measurable time. That file is a **symlink** to
|
||||
the shipped template's `state.json`: a copy would drift and the check would
|
||||
quietly start testing a fossil. Both assertions were proven by breaking
|
||||
`lib.nix` — deleting the fallback, then defeating the gate — and watching each
|
||||
fail by name. Delete it with the shim and the `nomarchy-theme-sync` alias.
|
||||
- ✓ **The VM's verdict on menu geometry is worthless — and so is measuring
|
||||
(#132, 2026-07-16):** the guest draws the picker with icons at ~¼ of
|
||||
`ui.iconSize` and rows short enough to clip a 6-row root, so screenshots are
|
||||
|
||||
Reference in New Issue
Block a user