From 1091d0fae96d152c11aec1bb2dd949f51ed5aa1e Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Mon, 5 Oct 2026 19:20:17 -0400 Subject: feat: shared tls cert, validation fixes --- FIXES.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'FIXES.md') diff --git a/FIXES.md b/FIXES.md index b258eff..b4c9198 100644 --- a/FIXES.md +++ b/FIXES.md @@ -93,17 +93,23 @@ Nothing was staged or committed. The audit artifacts (`AUDIT.md`, `reports/`) ar - **Refactor**: the `.journal` path is now `persistence.JournalDir(dataDir)` used by both the game and the admin API, so a future rename cannot leave one writer journaling to a directory startup recovery never scans. - **Test infrastructure**: added a `make test-race` target (`go test -race ./... -timeout 300s`); the shared game harness now stops the Game owner goroutine on cleanup (previously every harness test leaked one); added the first WebSocket transport tests (`TestWebSocketCheckOrigin` unit-tests the origin boundary with a non-loopback peer, `TestWebSocketUpgradeAccepted` drives the `/ws` upgrade end-to-end). +## Tranche 6 (this pass) + +- **Refactor**: `GridConflict.Kind` is now the typed `world.GridConflictKind` (`GridConflictTwist`/`GridConflictOverlap`), replacing the magic strings switched on in five packages. +- **Refactor**: the duplicated self-signed cert generator is now `tlscert.SelfSigned(commonName)`, shared by the game and admin servers. +- **Validation**: craft `type`/`subtype` is checked against `item.KnownCraftKeys` — an unknown key left the action set but never advancing (player stuck). Test: `TestValidateCraftBlocksRejectsUnknownType`. +- **Validation**: the mob/safespot size vocabulary moved to `object.MobSizeRank`; `validateObjects` rejects an unknown `safespot.max_block_size` (silently disables cover) and out-of-range chances, and `validateMobCombatStats` rejects an unknown mob `size`. Test: `TestValidateObjectsRejectsUnknownSafespotSize`. + ## Still open - **Explicit undo snapshot-existence flag** (the current fix safely refuses an intentionally empty before-image). - **Production "how many" batches vs units**. -- **Craft `type`/`subtype` validator rule** and **safespot validation** (both need their vocabularies moved to a shared package so `validate` can see them without importing `game`). - **Persistence** `Recover` mid-game misuse. - **Casino**: craps Fire/ATS settlement deferral. - **Admin**: symlink handling in the raw file API. -- **Structural refactors** remaining from `AUDIT.md` §3–4 (`ui.Table` shrink consolidation, self-signed cert, `tableCore` for pai gow, typed `GridConflict.Kind`, `refs` struct in validate, `remapInt`/`remapScalar`). +- **Structural refactors** remaining from `AUDIT.md` §3–4 (`ui.Table` shrink consolidation, `tableCore` for pai gow, `refs` struct in validate, `remapInt`/`remapScalar`). - **Test infrastructure**: CI wiring for `test-race`, a master-tick harness option, and coverage for steal/gather/burn/talk. ## Suggested next step -Tranche 6: the remaining structural refactors (`ui.Table`, cert, `tableCore` for pai gow, typed `GridConflict.Kind`) and the shared vocabularies for craft/safespot validation. Keep `make lint`, `go test ./...`, and `go test -race` green. +Tranche 7: the remaining structural refactors (`ui.Table`, `tableCore` for pai gow, `refs` struct, `remapInt`/`remapScalar`) and the test-infrastructure work. Keep `make lint`, `go test ./...`, and `go test -race` green. -- cgit v1.2.3