In PR #121, isWithdrawable(id) changed semantics from “current scheduled withdrawer can withdraw” to an aggregate signal: “at least one member can currently claim/withdraw (incl. late claims)”. We added isMemberWithdrawable(id, member) and the viewer now uses it for canWithdraw.
Review notes:
- Semantics may be misleading / breaking for consumers expecting current-round-only.
- Current aggregate implementation can be O(N²) worst-case (nested scans), even if
view.
Tasks
Acceptance
Clear API semantics (current-round vs member vs aggregate), no misleading naming, and aggregate check not O(N²).