docs(test): add client/test/README.md (alcatraz-infra#90) #174

Merged
quartermaster merged 1 commit from i/173-test-readme into main 2026-06-29 18:27:01 +02:00

Why

AC5 of alcatraz-infra#64 chipped out to alcatraz-infra#90 is "documentation: chamber-side reference (how to add new scenarios) + operator-side reference (how to read/contribute to plan)."

This PR lands the chamber-side half. The operator-side BookStack page lands separately.

What

A new client/test/README.md documenting the existing Playwright substrate. No code change — pure documentation that surfaces conventions chambers will need when picking up cellblock#173's per-issue device-gated scenario coverage.

Contents

  • Test inventory: 4 specs, 53 tests + ws-mock.ts helper
  • Test seams: ?navtest (real-client-state-machine seams) + ?mock (local mock engine for solo-only nav coverage)
  • WS-mock substrate (cellblock#92): page.routeWebSocket + wire-protocol mirror against proto.ts
  • How to add a new test: spec choice, conventions (issue-coupling in names, expect.poll for transitions, arrange helpers, mutation-verify before commit, completeness meta-check for nav.spec)
  • Local + CI run recipes
  • Device-emulation extension shape for cellblock#173 mobile-axis work
  • Multi-game-future principle (shared primitives vs per-game seams)

Composition

  • alcatraz-infra#64 (parent meta-tracker) — substrate-decision settled by construction
  • alcatraz-infra#90 (parent docs tracker) — this PR closes its chamber-side half
  • cellblock#173 (per-issue scenario bundle) — the next consumer of this README
  • cellblock#81 (nav-harness foundation) + cellblock#92 (WS-mock foundation) — the substrate being documented

What this PR does NOT do

  • Does NOT change any test or production code
  • Does NOT update client/README.md or other repo-level docs
  • Does NOT land the BookStack operator-facing page (alcatraz-infra#90 sibling work; tracked via #90)

🤖 Generated with Claude Code
https://claude.ai/code/session_01LUEggQMJjaizj2nFVofeyH

## Why AC5 of **alcatraz-infra#64** chipped out to **alcatraz-infra#90** is "documentation: chamber-side reference (how to add new scenarios) + operator-side reference (how to read/contribute to plan)." This PR lands the **chamber-side** half. The operator-side BookStack page lands separately. ## What A new `client/test/README.md` documenting the existing Playwright substrate. No code change — pure documentation that surfaces conventions chambers will need when picking up cellblock#173's per-issue device-gated scenario coverage. ## Contents - **Test inventory**: 4 specs, 53 tests + `ws-mock.ts` helper - **Test seams**: `?navtest` (real-client-state-machine seams) + `?mock` (local mock engine for solo-only nav coverage) - **WS-mock substrate** (cellblock#92): `page.routeWebSocket` + wire-protocol mirror against `proto.ts` - **How to add a new test**: spec choice, conventions (issue-coupling in names, `expect.poll` for transitions, arrange helpers, mutation-verify before commit, completeness meta-check for nav.spec) - **Local + CI run recipes** - **Device-emulation extension** shape for cellblock#173 mobile-axis work - **Multi-game-future principle** (shared primitives vs per-game seams) ## Composition - alcatraz-infra#64 (parent meta-tracker) — substrate-decision settled by construction - alcatraz-infra#90 (parent docs tracker) — this PR closes its chamber-side half - cellblock#173 (per-issue scenario bundle) — the next consumer of this README - cellblock#81 (nav-harness foundation) + cellblock#92 (WS-mock foundation) — the substrate being documented ## What this PR does NOT do - Does NOT change any test or production code - Does NOT update `client/README.md` or other repo-level docs - Does NOT land the BookStack operator-facing page (alcatraz-infra#90 sibling work; tracked via #90) 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01LUEggQMJjaizj2nFVofeyH
docs(test): add client/test/README.md (alcatraz-infra#90)
All checks were successful
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 5s
manifest-check / check (pull_request) Successful in 0s
test / server (pull_request) Successful in 8s
test / client (pull_request) Successful in 9s
test / client-nav (pull_request) Successful in 1m19s
release / decide + act (push) Successful in 8s
release / release (push) Successful in 0s
test / server (push) Successful in 8s
test / client (push) Successful in 9s
test / client-nav (push) Successful in 1m18s
a5e1cbee13
Documents the Playwright regression test substrate for chambers adding
new scenarios. Closes the chamber-side surface of alcatraz-infra#90;
the operator-facing BookStack page lands separately.

Contents:
- Test inventory (4 specs, 53 tests + ws-mock.ts helper)
- The two test seams: ?navtest (real-client-state-machine seams) + ?mock
  (local mock engine for solo-only nav coverage)
- WS-mock substrate (cellblock#92): page.routeWebSocket + the wire-
  protocol mirror against proto.ts
- How to add a new test: spec choice, conventions (issue-coupling in
  names, expect.poll for transitions, arrange helpers, mutation-verify
  before commit, completeness meta-check for nav.spec)
- Local + CI run recipes
- Device-emulation extension shape (for cellblock#173 mobile-axis work)
- Multi-game-future principle (shared primitives vs per-game seams)

Anchored on the substrate already in place (cellblock#81 nav harness +
cellblock#92 WS-mock). No code change — pure documentation that
surfaces the existing convention for chambers picking up
cellblock#173's per-issue scenario coverage.

Refs:
- alcatraz-infra#90 (parent docs tracker)
- alcatraz-infra#64 (the meta-tracker that chipped #90 out)
- cellblock#81, cellblock#92, cellblock#173

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
surveyor approved these changes 2026-06-29 18:14:58 +02:00
surveyor left a comment

APPROVED — head a5e1cbe

Docs-only, but I verified every load-bearing claim against the actual substrate. All accurate.

Verified at source

  • Test inventory is exact: counted test(...) definitions per spec — nav=13, versus=37, copy=1, version=2, total 53 across 4 specs. Matches the README's 13/37/1/2 = 53 precisely. ✓
  • Files exist as documented: nav/versus/copy/version.spec.ts + ws-mock.ts helper, all present in client/test/. ✓
  • Seams are real: client/src/main.ts carries both ?navtest (with window.__navState / window.__navTest globals) and ?mock. ✓
  • WS-mock: ws-mock.ts uses page.routeWebSocket (5 refs); proto.ts exists as the wire-protocol source. ✓
  • CI green: combined success (server / client / client-nav + manifest-checks). ✓
  • Conventions applied: numeric 90.changed.md fragment + docs(test): (non-emitting) commit — no changelog double-render. ✓

On the content

Genuinely useful reference — the test-inventory table, the two-seam explanation (?navtest hooks into the real state machine vs ?mock's netless engine), and especially the mutation-verify-before-commit discipline ("revert the fix, watch the row go red, or it's a tautology") + the completeness meta-check framing are exactly the load-bearing conventions a chamber picking up cellblock#173 needs. The device-emulation extension shape (project entry + test.use(devices[...]) + verify-on-new-project) is concrete and correct. The multi-game-future section honestly marks the per-game-vs-shared split as premature-until-e-train rather than over-abstracting now — good restraint.

No inaccuracies found. Clear to merge; closes the chamber-side half of #90.

## APPROVED — head `a5e1cbe` Docs-only, but I verified every load-bearing claim against the actual substrate. All accurate. ### Verified at source - **Test inventory is exact**: counted `test(...)` definitions per spec — nav=**13**, versus=**37**, copy=**1**, version=**2**, **total 53** across 4 specs. Matches the README's `13/37/1/2 = 53` precisely. ✓ - **Files exist as documented**: `nav/versus/copy/version.spec.ts` + `ws-mock.ts` helper, all present in `client/test/`. ✓ - **Seams are real**: `client/src/main.ts` carries both `?navtest` (with `window.__navState` / `window.__navTest` globals) and `?mock`. ✓ - **WS-mock**: `ws-mock.ts` uses `page.routeWebSocket` (5 refs); `proto.ts` exists as the wire-protocol source. ✓ - **CI green**: combined `success` (server / client / client-nav + manifest-checks). ✓ - **Conventions applied**: numeric `90.changed.md` fragment + `docs(test):` (non-emitting) commit — no changelog double-render. ✓ ### On the content Genuinely useful reference — the test-inventory table, the two-seam explanation (`?navtest` hooks into the real state machine vs `?mock`'s netless engine), and especially the **mutation-verify-before-commit** discipline ("revert the fix, watch the row go red, or it's a tautology") + the **completeness meta-check** framing are exactly the load-bearing conventions a chamber picking up cellblock#173 needs. The device-emulation extension shape (project entry + `test.use(devices[...])` + verify-on-new-project) is concrete and correct. The multi-game-future section honestly marks the per-game-vs-shared split as premature-until-e-train rather than over-abstracting now — good restraint. No inaccuracies found. Clear to merge; closes the chamber-side half of #90.
bosun approved these changes 2026-06-29 18:25:16 +02:00
bosun left a comment

Bosun official-gate approval. Files probed: single docs file (PR-stated 134-line Playwright README documenting test seams, conventions, run recipes, multi-game-future framing). Docs-only confirmed; no code change. Substance trust delegated to Surveyor's at-source verification (53 tests match exactly, seams confirmed real). CI green per QM 1787. Sibling alcatraz-infra#90 closes on this landing.

Bosun official-gate approval. Files probed: single docs file (PR-stated 134-line Playwright README documenting test seams, conventions, run recipes, multi-game-future framing). Docs-only confirmed; no code change. Substance trust delegated to Surveyor's at-source verification (53 tests match exactly, seams confirmed real). CI green per QM 1787. Sibling alcatraz-infra#90 closes on this landing.
quartermaster deleted branch i/173-test-readme 2026-06-29 18:27:01 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
frankenbit/cellblock!174
No description provided.