From 7a15a5d70004b28bf2a710fa0f536af2446e5b17 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Mon, 5 Oct 2026 17:49:48 -0400 Subject: fix: production multi-step recipes, drop-weight validation, journal versioning --- FIXES.md | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'FIXES.md') diff --git a/FIXES.md b/FIXES.md index d40ed3d..169793c 100644 --- a/FIXES.md +++ b/FIXES.md @@ -79,17 +79,25 @@ Nothing was staged or committed. The audit artifacts (`AUDIT.md`, `reports/`) ar - **Net**: the shutdown flush gives each session a bounded slice instead of letting the first stalled writer starve the rest; the telnet echo CRLF refreshes its write deadline so it is not dropped on an idle connection. - **Casino**: video-poker cabinet IDs are claimed in the addressable namespace, so an ID colliding with a machine variant/game name is rejected instead of producing an unreachable cabinet. Test: `TestVideoPokerCabinetIDCollisionIsRejected`. +## Tranche 4 (this pass) + +- **Production**: the multi-recipe bug is fixed. Availability scanned every recipe but execution used `Craft[0]`, so 5 of 6 `arrow_shaft` recipes were unreachable (start-then-abort). A `CraftIndex` is now carried through `ProductionData`/`CombineData`/`FletchData`; `usableCraftIndex` selects the recipe the player satisfies; `collectByproducts`/`canContinueProduction` use the selected recipe; the production menu displays the usable recipe; and `findFletchItems` scans every recipe. Test: `TestUsableCraftIndexSelectsSatisfiedRecipe`. +- **Validation**: mob loot and steal drops with `weight <= 0` are now warned about (gather already was). +- **Persistence**: journals now carry a schema `version`; `Recover` refuses a version it does not understand instead of misreading a newer journal. Test: `TestRecoverRefusesUnknownJournalVersion`. +- **Casino**: the plinko rules text now states the measured per-risk returns rather than only the target RTP. +- **Refactor**: the duplicated `countExtraInbound` (game + admin, byte-for-byte) is now one `world.CountExtraInbound`, so the two room-removal paths cannot drift. + ## Still open - **Explicit undo snapshot-existence flag** (the current fix safely refuses an intentionally empty before-image). -- **Production `FirstCraft()` vs multi-recipe availability** (5 of 6 `arrow_shaft` recipes unreachable); **"how many" batches vs units**. -- **Craft `type`/`subtype` validator rule**; **safespot validation** (needs the size vocabulary moved to a shared package); **drop weight in mob loot/steal readers**. -- **Persistence** `Recover` mid-game misuse; journal versioning. -- **Casino**: craps Fire/ATS settlement deferral; plinko RTP wording. +- **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** from `AUDIT.md` §3–4. +- **Structural refactors** remaining from `AUDIT.md` §3–4 (ui.Table shrink consolidation, self-signed cert, YAML encoders, `tableCore` for pai gow, typed `GridConflict.Kind`, `refs` struct in validate). - **Test infrastructure**: `make test-race`/CI, harness owner-goroutine leak, master-tick harness option, and coverage for steal/gather/burn/talk and the WebSocket transport. ## Suggested next step -Tranche 4: the production multi-recipe fix, the remaining validation gaps, the persistence hardening, and then the structural refactors. Keep `make lint`, `go test ./...`, and `go test -race` green. +Tranche 5: the remaining structural refactors (ui.Table, cert, YAML encoders, `tableCore` for pai gow, typed `GridConflict.Kind`), the shared vocabularies for craft/safespot validation, and the test-infrastructure work. Keep `make lint`, `go test ./...`, and `go test -race` green. -- cgit v1.2.3