Skip to content

v0.3.0

Choose a tag to compare

@dimitree54 dimitree54 released this 07 Mar 19:43
· 134 commits to main since this release

What's New in 0.3.0

Breaking Changes

  • ExerciseProgressStore constructor now requires exercise_types: list[str] parameter
  • ExerciseProgressStore.increment() takes source_word_id: int instead of source_word: Word
  • ExerciseProgressStore.get_word_pairs_with_scores() no longer accepts exercise_types parameter (uses configured set)
  • ScoredWordPair model now includes source_word_id: int field

New Features

  • Per-exercise-type score tables: Exercise statistics are now stored in separate database tables per exercise type (e.g., user_word_exercise_scores_nl_ru_flashcard), improving isolation and making table ownership explicit
  • Cache-support APIs: New export_remote_snapshot() and apply_score_delta(event_id, ...) methods on ExerciseProgressStore for the planned database_cache module
  • Idempotent score replay: apply_score_delta uses event IDs to prevent double-application of remote score deltas
  • database_cache module documentation: Full PRD, architecture, and product brief for the upcoming local-first cache module

Bug Fixes

  • Fixed DatabaseService.add_words() to use the word's actual language attribute for table routing instead of always defaulting to the source language

Other Changes

  • CachedDatabaseService marked as legacy (superseded by planned database_cache)
  • NeonBackend exercise methods extracted to _neon_exercise.py to stay under 200-line limit
  • Updated README with database_cache recommendation and capabilities overview
  • sampling module updated to pass exercise_types to ExerciseProgressStore