MAJOR: revokeOffers returns committed cash without booking CF.BondsReturned — CF DIVERGENCE on every revocation turn #124

Closed
opened 2026-10-01 15:31:08 +00:00 by Winnie · 0 comments
Owner

Found by the v0.6.0 review (issue #118). revokeOffers (game.go:458-468) does b.Cash += o.Price*o.Size but never records CF.BondsReturned. The finance-phase reconciliation (game.go:833-837) then computes a cash-flow statement that misses the return, logs "CF DIVERGENCE", and misstates the GAAP report every turn a bank revokes. Both sibling paths book it correctly: offer expiry (game.go:766-767) and own-offer retirement (game.go:553).

Verified end-to-end: place 900×10, revoke → "CF DIVERGENCE Bank 1 turn 1: cf -9000 actual 0". Dormant under defaults (Revocation=false, shipped brains return #f from revoke?) but it is a first-class config feature and reachable via the (revoke-offers) builtin regardless of the flag.

Found by the v0.6.0 review (issue #118). revokeOffers (game.go:458-468) does b.Cash += o.Price*o.Size but never records CF.BondsReturned. The finance-phase reconciliation (game.go:833-837) then computes a cash-flow statement that misses the return, logs "CF DIVERGENCE", and misstates the GAAP report every turn a bank revokes. Both sibling paths book it correctly: offer expiry (game.go:766-767) and own-offer retirement (game.go:553). Verified end-to-end: place 900×10, revoke → "CF DIVERGENCE Bank 1 turn 1: cf -9000 actual 0". Dormant under defaults (Revocation=false, shipped brains return #f from revoke?) but it is a first-class config feature and reachable via the (revoke-offers) builtin regardless of the flag.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Winnie/bankwars#124
No description provided.