Summary
Upstream: pickleball-shuffler#22
Formalize, test, and document recent matchup spacing on top of #30. The fork already has back-to-back penalties; this issue makes spacing a guaranteed, documented requirement and adds a tie-breaker among valid #30 options.
Rule (on top of #30)
Among round candidates that satisfy #30 session-wide no-repeat rules, prefer the option that maximizes the minimum "rounds since last seen" across all partner and opponent pairings in that round.
- Applies to partners and opponents equally.
- Fixed pairs exempt from partner spacing (always partnered).
- Fixed-pair players still follow opponent spacing with everyone else.
This is a tie-breaker / optimizer — not a separate hard window. Session-wide no-repeat remains owned by #30.
Deliverables
Automated tests
User-facing docs
Validation checklist
Acceptance criteria
Files likely touched
src/matching/heuristics.ts
test/heuristics.spec.tsx
README.md or in-app copy
docs/VALIDATION.md
Dependencies
Upstream reference
Summary
Upstream: pickleball-shuffler#22
Formalize, test, and document recent matchup spacing on top of #30. The fork already has back-to-back penalties; this issue makes spacing a guaranteed, documented requirement and adds a tie-breaker among valid #30 options.
Rule (on top of #30)
Among round candidates that satisfy #30 session-wide no-repeat rules, prefer the option that maximizes the minimum "rounds since last seen" across all partner and opponent pairings in that round.
This is a tie-breaker / optimizer — not a separate hard window. Session-wide no-repeat remains owned by #30.
Deliverables
Automated tests
User-facing docs
Validation checklist
docs/VALIDATION.mdwith manual verification stepsAcceptance criteria
yarn test:cidocs/VALIDATION.mdupdatedyarn buildpassesFiles likely touched
src/matching/heuristics.tstest/heuristics.spec.tsxREADME.mdor in-app copydocs/VALIDATION.mdDependencies
Upstream reference