feat(core): decide and enforce Draw-1 stock recycle limit (or document unlimited as intentional) #117
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Severity: Medium (rules/design decision)
Problem
In
solitaire_corethedraw()path applies score penalties for stock recycles but never returns an error — recycling is unbounded in every mode.MoveErrorhas no variant for a recycle limit (solitaire_core/src/error.rs— closest isStockEmpty).Classic Klondike Draw-1 scoring rules cap the number of passes through the stock (commonly 1 or 3 passes for Draw-1). Right now infinite recycling is possible, which:
This was first flagged in the 500-game UX audit (June 2026) and is the last item from that audit still open.
Suggested resolution (either is fine, but pick one explicitly)
recycle_limitto the game config, return a newMoveError::RecycleLimitReachedwhen exhausted, and surface it in the UI (the no-moves detection must then treat an exhausted stock as no-moves).ARCHITECTURE.md/ rules docs that unlimited recycling with score penalties is the intended house rule, and add a core test asserting unlimited recycling so the behaviour is locked in deliberately.Found during scripted repo review, 2026-07-06.