v0.7.9.8 — the test command did not typecheck, and the plan had gone stale
Housekeeping before v0.8.0: the answer to "anything else that should be looked at first". One real hole, one stale document, and my own leavings. #102 — `npm test` passed green on a type error. `pretest` ran `scripts/build-web.ts`, which invokes `tsc --ignoreConfig` against three web entry points, so it saw only what those three transitively import and under a WEAKER configuration than tsconfig.json — no `noUncheckedIndexedAccess`, no `exactOptionalPropertyTypes`, `--types ''`. It never saw `src/server/` or a single file under `test/`. Demonstrated rather than argued: a planted `const DELIBERATE_TYPE_ERROR: number = 'not a number';` in src/server/session.ts gives `npm run typecheck` a TS2322 and `npm test` a clean `# fail 0`. `pretest` is `tsc --noEmit && node scripts/build-web.ts` now, and the same error exits 1 with the tests never running. This mattered THIS week rather than generally: v0.8.0 is steps 2-7 of the common board — display stream, credentials, persistence, Chromium supervisor — which is almost entirely src/server/, exactly the half the test command could not see. #103 — the plan had drifted from the code it is the source for. docs/plans/jitsi-common-board.md was written 2026-08-27, still said "No implementation has been performed", and is what steps 2-7 get built from. Step 1 shipped across four releases since, so every "current code finding" under it described a fault that is now fixed — a document reading as present tense and nine days stale sends the next reader to fix things twice. Measured: its PublicFrame sketch lists four properties never built (protocolVersion, config, scoring, deckCounts) and omits 28 that exist, and the shape is the real difference — the implementation is FLAT where the plan grouped things into objects, so a renderer written from the sketch would not compile. The plan now says so at the top and at step 1, names src/sim/view.ts and the redaction allow-list as the authority, keeps the original sketch for its reasoning, and calls out `protocolVersion` as unbuilt rather than dropping it quietly — step 2 is the reconnecting display stream and is the first thing that would want one. One step-1 item is STRUCK OFF rather than built: "add the Red Flag holder to the public player projection". The premise does not hold here. `decks.redFlags` is written once, in setup.ts, from `optionalRules.emergencyToolbox`, and never again — `redFlag.play` emits `phaseEnded` and does not spend it — so every player holds one or none does, decided before the deal. A per-player `redFlagHeld` would be one already-public option copied N times, while telling every reader of the common board that it varies by player and might change mid-game. Worse than the absence. Pinned by test so it is not re-raised from the plan. Four dead imports removed, all mine: `HAND_LIMIT` left unused in apply.ts, view.ts and web/game.ts when 0.7.9.6 consolidated the three copies of the §6.2 test, and `actingPlayer` in web/game.ts, dead since 0.7.9.5 made `currentActor` delegate. Finding them re-measured #46: `tsc --noUnusedLocals` now reports 40, up from 29 on 2026-08-30. That entry's "without the flag this list simply regrows" is a measurement rather than a forecast now. The other 36 and the flag stay open. 946 tests pass, up from 943. No behaviour changes: three new tests pin an invariant, and the rest is a build command, dead imports and a document. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y5boPxP6JHRYMm8adXaF5R
This commit is contained in:
co-authored by
Claude Opus 5
parent
88a42ae9e2
commit
312e0301e0
@@ -130,7 +130,13 @@ specific paths below have not been exercised at a table. **More testing is plann
|
||||
|
||||
**This is v0.8.0.** One shared, seatless display of the public game, usable on a TV or in OBS on its
|
||||
own and publishable into the table's Jitsi meeting. The plan is `docs/plans/jitsi-common-board.md`,
|
||||
seven steps, of which 1-4 are the useful release and 5-7 are the Jitsi publisher. Items that look
|
||||
seven steps, of which 1-4 are the useful release and 5-7 are the Jitsi publisher.
|
||||
|
||||
**Step 1 is BUILT** — v0.7.9.2 through v0.7.9.5 (#91, #92, #95, #97), with one item struck off
|
||||
rather than implemented (#103). **The plan was reconciled against the code in v0.7.9.8** and now says
|
||||
which of its "current code findings" are history: it had drifted badly enough to send the next reader
|
||||
fixing things twice. Steps 2-7 were never implemented and their findings have NOT been re-verified —
|
||||
check each before building on it. See **Reference · #103**. Items that look
|
||||
like screen polish live here because they need step 4's ordered presentation mechanism and nothing
|
||||
cheaper.
|
||||
|
||||
@@ -1521,6 +1527,14 @@ discarded wrongly.
|
||||
run it.** Swept 2026-08-30 and deliberately NOT fixed in the same pass, at Jesse's call — it is
|
||||
a wide, mechanical change and v0.7.9 had enough in it.
|
||||
|
||||
**RE-MEASURED 2026-09-07: 40, up from 29 in eight days.** The prediction below — "without the
|
||||
flag this list simply regrows" — is now a measurement rather than a forecast. **Four of the new
|
||||
ones were mine and are removed in v0.7.9.8**: `HAND_LIMIT` left unused in `apply.ts`, `view.ts`
|
||||
and `web/game.ts` when the three copies of the §6.2 test were consolidated into one (#45), and
|
||||
`actingPlayer` in `web/game.ts`, dead since `currentActor` began delegating (#96). Removing my
|
||||
own leavings is not doing this item — the remaining 36 and the FLAG are still open, and the
|
||||
`sim/replay.ts` ten still wait on #48.
|
||||
|
||||
**The recurrence is the point, not the 29.** `SIDE_GAP` and `CHIP_W` in `board-svg.ts` are both
|
||||
Gitea#18 leftovers — constants for a wrapped layout that no longer exists. `SIDE_GAP` was
|
||||
removed by hand on 2026-08-30 only because someone happened to read the file while closing the
|
||||
@@ -1970,6 +1984,52 @@ the numbers stay so cross-references above and below still resolve.
|
||||
it existed report no device spent, which is exactly what they drew at the time, so every
|
||||
published replay is unchanged.
|
||||
|
||||
102. ~~**`npm test` did not typecheck, and passed green on a type error in the server.**~~ — done
|
||||
2026-09-07 in v0.7.9.8. `pretest` ran `scripts/build-web.ts`, which invokes
|
||||
`tsc --ignoreConfig` against three web entry points — so it saw only what those three
|
||||
transitively import, under a WEAKER configuration than `tsconfig.json` (no
|
||||
`noUncheckedIndexedAccess`, no `exactOptionalPropertyTypes`, `--types ''`). `src/server/` and
|
||||
every file under `test/` were never checked by the test command at all.
|
||||
|
||||
Demonstrated rather than argued: `const DELIBERATE_TYPE_ERROR: number = 'not a number';` in
|
||||
`src/server/session.ts` gives `npm run typecheck` a TS2322 and `npm test` a clean
|
||||
`# fail 0`. `pretest` is `tsc --noEmit && node scripts/build-web.ts` now, and the same planted
|
||||
error exits 1 with the tests never running.
|
||||
|
||||
**Why it mattered THIS week rather than generally.** v0.8.0 is steps 2-7 of the common board —
|
||||
a display stream, credentials, persistence, and a Chromium supervisor — which is almost
|
||||
entirely `src/server/` and is exactly the half the test command could not see. Found while
|
||||
answering "anything else before 0.8.0", which is the only reason it was found at all: nothing
|
||||
about a green suite would ever have said so.
|
||||
|
||||
103. ~~**The common-board plan had drifted from the code it is the source for.**~~ — done 2026-09-07
|
||||
in v0.7.9.8. `docs/plans/jitsi-common-board.md` was written 2026-08-27, still said "No
|
||||
implementation has been performed", and is what steps 2-7 will be built from. Step 1 has since
|
||||
shipped across four releases, so every "current code finding" under it described a fault that
|
||||
is now fixed — a document that reads as present tense and is nine days stale sends the next
|
||||
reader to fix things twice.
|
||||
|
||||
Measured: the plan's `PublicFrame` sketch lists four properties that were never built
|
||||
(`protocolVersion`, `config`, `scoring`, `deckCounts`) and omits **28** that exist. The shape
|
||||
is the real difference — the implementation is FLAT where the plan grouped things into `clock`,
|
||||
`config`, `scoring` and `deckCounts` objects. A renderer written from the sketch would not
|
||||
compile against the projection.
|
||||
|
||||
The plan now says so at the top and at step 1, names `src/sim/view.ts` and
|
||||
`test/redaction.test.ts`'s allow-list as the authority, keeps the original sketch for its
|
||||
reasoning, and lists what has been gained since (`crewTrays`, `queued`, `heldAtLimits`,
|
||||
`enhancementsSpent`). **`protocolVersion` is called out as unbuilt** rather than quietly
|
||||
dropped: step 2 is the reconnecting display stream and is the first thing that would want one.
|
||||
|
||||
**One step-1 item is STRUCK OFF rather than deferred:** "add the Red Flag holder to the public
|
||||
player projection." The premise does not hold here. `decks.redFlags` is written once, in
|
||||
`setup.ts`, from `config.optionalRules.emergencyToolbox`, and never again — `redFlag.play`
|
||||
emits `phaseEnded` and does not spend it — so every player holds one or none does, decided
|
||||
before the deal. A per-player `redFlagHeld` would be `optionalRules.emergencyToolbox` copied N
|
||||
times, already public, while telling every reader of the common board that it varies by player
|
||||
and might change mid-game. That is worse than the absence. Pinned by test so it is not
|
||||
re-raised from the plan text: if the rule ever becomes per-player, the test fails.
|
||||
|
||||
32. ~~**Tell the 0.4.9 playtesters their saves are dead, before they find out.**~~ — done
|
||||
2026-09-07. `PLAYTEST-0.7.4.md` was written for exactly this and did its job; Jesse, 2026-09-07:
|
||||
"a temporary document to help some of the playtesters out on making the big jump, but that is no
|
||||
|
||||
Reference in New Issue
Block a user