Duels record the rules revision they began under

CURRENT_RULES is stamped on the start line and the game state, and a
ledger replays under the revision it recorded (1 when it has none), so a
future fix that changes how a past turn resolves can keep the old path
for old duels. The reports desk skill now says when to bump it: only
when the deploy gate flags ledgers.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0141G6xqLeNRYEtviLWSB5Up
This commit is contained in:
Eric Wagoner
2026-09-23 10:32:25 -04:00
co-authored by Claude Fable 5.1
parent 8eca078043
commit 7485d50b8d
8 changed files with 44 additions and 13 deletions
+9 -4
View File
@@ -61,10 +61,15 @@ to hear his players' voices; never compress their words into a table.
ruling; ask him and hold the reply).
4. **Fix under house discipline.** The engine is deterministic and every
deploy replays all production ledgers against the server
(`deploy/verify-ledgers.sh`). A fix that changes how a past turn
resolves will fail that gate for the ledgers it touches; when that
happens, show Eric which ledgers diverge and let him decide whether
to ship. Add a test in `src/lib/game/engine.test.ts` pinning the
(`deploy/verify-ledgers.sh`). Run it before deciding how to ship:
- Gate passes: the fix diverges from no ledger. Ship it ungated.
- Gate flags ledgers: the fix changes how an already-played turn
resolves. Bump `CURRENT_RULES` in `src/lib/game/state.ts`, add the
entry to its doc block, keep the old path behind
`state.rules < N`, and pin BOTH paths with tests (the legacy one by
passing `rules` to `createGame`). Old ledgers then replay as their
players saw them; new duels get the fix.
Either way add a test in `src/lib/game/engine.test.ts` pinning the
corrected behaviour. Deploy with `deploy/deploy.sh 159.203.98.71`.
5. **Reply.** `bash deploy/report-reply.sh 159.203.98.71 <reportId> <status> "text"`.
Pass the id as ONE clean argument. Write to the PLAYER: name what you