Skip to content

Phase 4 Execution

Codex edited this page Nov 1, 2026 · 4 revisions

Phase 4 execution

Status: formal Phase 4 APPROVED at remote commit 4bc242c05d63dd84798940e4afd7da62a4ecd219, with 99% accuracy and 99% completeness from independent GPT-6 Astra/high review. Phase 5 entry is authorized; Phases 5–6 remain required and deployment remains Phase 7.

4A covers AC-04/05/16: six initial categories, ten complete curated pairs each, predefined backgrounds, complete/approved catalog validation, roster snapshot, uniform inclusive 1–N anchor selection, anchor-only category choice and no pair reuse before category exhaustion. Fixed content/random fixtures precede implementation.

4B covers AC-06–14/45 and gameplay-specific AC-28 privacy: four authoritative 20-second stages, one answer per unsolved player per stage, 5/3/2/1 scoring, accepted solve durations/order, score locking, private hint projection, reveal, eight-round standings and exact ties. Tests use fake clocks, transaction ports and deterministic random draws; they include simultaneous submissions, stale deadlines and canonical retries. No raw incorrect guesses are persisted. Actual local Postgres/Realtime checks remain separate TR evidence. Browser journeys are local and use disclosed seams. Phase 5 moderation/reactions and Phase 6 complete acceptance remain later work; no deployment or live provisioning.

Implementation and verification

The server freezes the ordered roster at countdown expiry, draws an anchor uniformly over inclusive indices 1–N, and creates a single match under the room lock. Only the anchor or earliest accepted solver chooses the next category. If no player solves, the domain draws uniformly over the six initial categories and persists that choice. Pair IDs cannot repeat in a category until its pool is exhausted. Six original repository SVG backgrounds accompany 60 complete pairs and 180 literal, predefined hints.

Answer comparison uses NFKC, trim, whitespace collapse and full default Unicode case folding. Punctuation remains significant; only explicit accepted alternatives match. The official Unicode 18.0.0 source, its complete license notice, the generated 1606-entry mapping and a source-hash checked regeneration script are included. Tests verify every C/F record in the upstream file. Attribution was extended and only the corresponding attribution-content hash fixture changed.

The pure domain owns four 20-second stages, 5/3/2/1 scores, once-per-stage attempts, solve locking, accepted server order, reveal, eight-round standings, 80-second unsolved penalties and exact shared ties. It computes final awards. SQL applies those awards once and commits match completion, profile statistics, room closure, events and idempotency together. A fault after the award triggers proves the whole transaction rolls back. Incorrect guess text is absent from persistent state, results and events.

Every game command locks room then match. Exact canonical retries precede membership authorization so a committed command remains recoverable after departure; changed payloads conflict. New commands cannot score using overdue membership even while another worker leases the reconnect job. Private views reject expired players and observers whose followed player left. Match events use the current locked player/observer audience; Realtime carries only aggregate identity/version notifications. Private hints and unrevealed targets come from an allowlisted authenticated projection.

The game screen provides category choice, the prompt/background, countdown display calibrated to server time, private hints, answer entry, solved/waiting labels, round scorecards and final standings. Observers have read-only controls and their inviter's perspective. Uncertain requests retain the identical command for explicit retry. Room refreshes that overlap an in-flight read queue one subsequent refresh, preventing a heartbeat's newer version from being missed. Game polling is bounded and reconnects also refresh through match notifications.

Verified locally on 26 October 2026: 449 unit/application/API/oracle tests in 26 files; typecheck; lint; local production build; 25 actual Postgres tests in six files plus SQL/RLS/rollback/retention checks; and three actual Supabase Realtime tests. All ten Chromium journeys passed, including multi-client hint privacy/uncertain answer retry and eight no-solver rounds/shared final ranking at a 390×844 phone viewport. These are separate evidence tiers: browser HTTP seams run the actual application/domain using a transaction fake, while database and transport tests use disposable local containers. No deployed or live-provider acceptance is claimed.

The independent reviewer verified the exact GitHub commit and tree da0f52c8320ca0627edd455846cca75d395264ba, matching all 179 leaf paths, modes, object types and blob hashes to the local candidate. The reviewer independently passed all 449 tests, typecheck, lint, local production build, 25 actual PostgreSQL tests plus SQL checks, three actual Realtime tests and ten Chromium journeys. The SQL catalog was also checked against its source JSON, all six assets and 60 static count hints were checked, and Unicode source hash/conformance checks passed. No unresolved material findings remain. The complete request, rubric, raw report, resolved findings, scores, evidence limits and remote verification are preserved in phase4_review_receipt.jsonl.

The frozen chooser policy intentionally has no unapproved reassignment or timeout: a departed anchor/first solver leaves the choice waiting. The screen explains the absent chooser and offers the existing leave/create-new-room path. Final cross-phase acceptance and human usability/accessibility evidence remain Phase 6. Moderation, suggestions and reactions remain Phase 5. Deployment, branch movement and release machinery remain Phase 7. The MCP hook still reports missing marker/no-session/health-failed with an empty failsafe path; recovery success is not claimed.

Clone this wiki locally