From 67e01aab85607b9e601185c7d62dff576af3bb43 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Fri, 18 Sep 2026 15:42:23 -0400 Subject: fix: close map OOM, admin traversal, transport safespot, room rekey, and legacy payout recovery --- internal/game/economy_reanchor_test.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 internal/game/economy_reanchor_test.go (limited to 'internal/game/economy_reanchor_test.go') diff --git a/internal/game/economy_reanchor_test.go b/internal/game/economy_reanchor_test.go new file mode 100644 index 0000000..86d7bf1 --- /dev/null +++ b/internal/game/economy_reanchor_test.go @@ -0,0 +1,31 @@ +package game + +import ( + "testing" + + "thehouseoficarus/internal/casino" +) + +// TestReanchorOwedPayoutReadsAsOwed: when recovery cannot pay every sibling in +// an identical-signature payout group, the unpaid remainder must be re-anchored +// to the current durable balance. Otherwise a later run (after compaction drops +// the settled sibling evidence) reads the balance as the record's own +// durability and settles the liability without paying it. +func TestReanchorOwedPayoutReadsAsOwed(t *testing.T) { + rec := &economyRecord{Credit: 20, CreditsBefore: 90, CreditsAfter: 110} + // One sibling was paid: the durable balance now sits at 110. + reanchorOwedPayout(rec, 110, rec.Credit) + if rec.CreditsBefore != 110 || rec.CreditsAfter != 130 { + t.Fatalf("re-anchored checkpoints = before %d after %d, want before 110 after 130", rec.CreditsBefore, rec.CreditsAfter) + } + + // At the economy cap the post-checkpoint must stay reachable: before == + // after so the record keeps reading as owed instead of claiming an + // impossible balance that a coincidental balance could be mistaken for. + capped := &economyRecord{Credit: 20} + reanchorOwedPayout(capped, casino.MaxCredits, capped.Credit) + if capped.CreditsBefore != casino.MaxCredits || capped.CreditsAfter != casino.MaxCredits { + t.Fatalf("cap re-anchor = before %d after %d, want both %d", + capped.CreditsBefore, capped.CreditsAfter, casino.MaxCredits) + } +} -- cgit v1.2.3