Skip to content

Type Practice: a typed-answer study mode (FSRS-decoupled)#21

Merged
bootuz merged 35 commits into
mainfrom
feature/type-practice-mode
Jun 6, 2026
Merged

Type Practice: a typed-answer study mode (FSRS-decoupled)#21
bootuz merged 35 commits into
mainfrom
feature/type-practice-mode

Conversation

@bootuz
Copy link
Copy Markdown
Owner

@bootuz bootuz commented Jun 6, 2026

Summary

Adds Type Practice, a new study mode where you type the answer instead of self-grading — fully decoupled from spaced repetition.

  • Whole-deck, retry-until-correct typed practice that writes zero FSRS state and zero review logs — only its own append-only typing_logs (synced to Firestore like review logs). Spaced repetition scheduling is never touched.
  • Answer matching is normalized + accent-sensitive, with an "I was right" override; wrong answers show a char-level colored diff (mint matches / pink misses) of the correct answer vs. what you typed.
  • Session direction choice (type the front vs. the back), prompted at session start (session-only state, no persistence); audio plays in both directions.
  • Progress surfaces: an end-of-session report (cards, first-try accuracy, best combo, newly mastered) and a per-deck mastery ring derived from latest-first-try-correct.
  • Gamified in-session UI: top progress bar + 🔥 combo chip, a prompt hero card, a mint success-flash with auto-advance, and a bottom answer bar that keeps the keyboard pinned for a fast typing rhythm.
  • Wrong-answer reveal: the keyboard drops and a result card rises (Azri's own card style — white surface, hairline border, an INCORRECT status pill, color only in the diff), with Continue / "I was right".

Built brainstorm → spec → plan → subagent-driven, with two-stage review (spec compliance + code quality) per task. Specs/plans under docs/superpowers/.

Test Plan

  • ./gradlew :app:testDebugUnitTest green (pure domain units: matcher, session state machine, mastery, diff; plus ViewModel virtual-time tests).
  • ./gradlew :app:assembleDebug succeeds.
  • On device: run a Type Practice session — wrong answer drops the keyboard and shows the result card; Continue brings the keyboard back; correct answer flashes mint and auto-advances without flicker; finish screen shows the report.
  • Verify the deck's FSRS due/state is unchanged after a Type Practice session (decoupling holds).
  • Verify typing logs sync (append-only) and the per-deck mastery ring reflects latest first-try results.

Astemir Boziev added 30 commits June 5, 2026 18:37
@bootuz bootuz merged commit c2d481f into main Jun 6, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant