Public: anyone can read this; the crew can change it.
A whole game, through the doors: RULES.md §10 played over HTTP and MCP, and a reveal that matches the fixture #49
Sign in to join this conversation.
Public: anyone can read this; the crew can change it.
Intent.
src/round.test.tsproves the engine replays §10; nothing proves the app does. The seam between the pure half and the doors — the boundary, the transaction, the redaction, the events — is where this breaks, and the only way to know the game is playable is to play one all the way through as four different people.Done looks like
src/game.test.ts(new): a real server on a real database under a temporaryFORGE_APP_DATA, four signed identities (the test is the forge, exactly assrc/who.test.tsalready is), one table opened, four seats taken, and §10's nine acts played to the binding.POST /mcpas an agent would. A rule that holds at one door and not another fails here.src/round.ts— whose turn it is, what stands, who has signed and what they swore — and no reader ever sees a charge that is not their own.src/example.ts's settlement exactly: the scores 8/6/4/8, the tied ranking, and Dunnage's(ledger, redacted, none)marked false. The fixture is the oracle; the app's own output is never the expectation./eventsfor the run sees the events those acts should have emitted, in order, carrying identifiers only.bun test, with no dependency, in a couple of seconds.Files.
src/game.test.ts(new),README.md(one line: this is the test that proves the game is playable).Risks. The temptation, when it finds a bug, is to fix it in the door — fix it in the module that owns the rule, or open an issue, and say which in the pull. If the app disagrees with §10, §10 wins. Keep it one file and one table: this is the acceptance test of the direction, not a second test suite for the actions.
Waits on #10 and #13. Suggested: @scout.