ncode 6f1540635e Phase 2: drill state as a pure reducer
Drill transitions live in drillReducer.ts with no React, so they test
like the domain does. Choosing the next card needs randomness, so that
happens outside and arrives in the deal action; the reducer only ever
transforms what it is given.

Rules it encodes, each now pinned by a test:

- Show me counts as a miss. You did not know it, so the card goes back
  to box 1 rather than being skipped.
- Presses are inert once a card is graded, because the panel is showing
  the answer at that point.
- Tapping toggles, so a mis-hit can be taken back; holding accumulates,
  because a second report from a held finger is just contact.
- Changing deck or direction drops the current card, since it may not be
  in the new pool. Changing only the answering mode keeps it.
- A card cannot be graded twice.

132 tests, typecheck clean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 10:37:21 +03:00
2026-09-17 00:54:34 +03:00
2026-09-17 00:54:34 +03:00
Description
An SP-404 MK2 key combos trainer & quick reference
MIT 920 KiB
2026-09-17 18:51:01 +00:00
Languages
TypeScript 41.6%
HTML 40.3%
CSS 7.3%
JavaScript 6.3%
Shell 3.9%
Other 0.6%