diff --git a/TODO.md b/TODO.md index b14ca5a..8472729 100644 --- a/TODO.md +++ b/TODO.md @@ -83,12 +83,16 @@ See `docs/specs/web-redesign`. - [ ] Validate moves before running them instead of treating every invalid move as a crash: each one writes a file to `crashes/` and is broadcast to the players (`GameManager.onGameError`) +## Game rules + +- [ ] Decide who gets the remaining stones when a move empties the opponent's side (e.g. a capture takes their last + stones). Now the player whose side is empty always gets the other side's stones (`GRClearBoardAtEnd`), even + when the opponent emptied it; some Mangala rules give them only to a player who emptied their own side. + Analyse the rule first, then decide + ## Bugs -- [ ] `PitAnimator.animatePit`: `previousPitIndex > 0` should be `>= 0`; a one-stone move from pit 0 does not - empty that pit during the animation - [ ] `PitAnimator.dispose` removes a newly bound function, so the theme listener is never removed -- [ ] Sowing puts stones into the opponent's store; check against the intended Mangala rules and add a test - [ ] `onGameError` broadcasts an `Error`, which serializes to `{}` ## Maintenance @@ -96,7 +100,7 @@ See `docs/specs/web-redesign`. - [ ] The web and mobile apps duplicate components and stores; move shared code into `packages/core` - [ ] Mixed lockfiles: `packages/*` and `apps/mobile` have both `yarn.lock` and `package-lock.json` - [ ] Align TypeScript and Jest versions across packages -- [ ] Tests for `MatchMaker` and `PitAnimator` +- [ ] Tests for `MatchMaker`; `PitAnimator` is only tested for the first frame of a move - [ ] CI that runs the tests - [ ] Pre-existing type errors: 4 in the frontend, 11 in mobile; the frontend has no `tsconfig.json`, so nothing type-checks it