Skip to content

Releases: SteMazzO/termtypr

1.0.0

Choose a tag to compare

@SteMazzO SteMazzO released this 04 Aug 11:01
Immutable release. Only release title and notes can be modified.

Added

  • Ghost racing: save a phrase run as a "ghost", a full replay of your typing,
    corrections included, and race against it
    • Race a Ghost menu mode picks one of your saved ghosts, or press R on the
      results screen to instantly rematch the phrase you just typed
    • Results end with a You-vs-Ghost comparison of time, WPM, and accuracy

Changed

  • ⚠️ History storage moved to SQLite (termtypr.db in the user data directory).
    The old history.json file is no longer read and is not migrated: typing history
    recorded by earlier versions is not carried over.

0.6.0

Choose a tag to compare

@SteMazzO SteMazzO released this 08 Jul 15:46
Immutable release. Only release title and notes can be modified.

Added

  • Raw WPM: Gross WPM (no error penalty) shown live and in results, and persisted in history
  • Number-key game selection: Pressing a game's number in the main menu now selects it (previously documented but not implemented)
  • Custom words file: add_words now writes to custom_words.json in the user data directory instead of modifying the installed package

Changed

  • Test ends on the last character: The final word completes as soon as it is typed correctly
  • Live WPM includes the in-progress word, so it no longer sags between word submissions or reads 0 during the first word
  • Accuracy is keystroke-based: correct keystrokes / total keystrokes, including the submitting space
  • WPM sanity floor: results measured over less than 1 second report 0 WPM instead of absurd values
  • Returning to the main menu keeps the previously selected game highlighted

Fixed

  • Word-count dialog no longer leaks input into the app: pressing Enter in the dialog used to start a game from the menu, and typing in it mid-game corrupted the running game's words and error count
  • Stray/double spaces no longer silently skip words
  • Pasted multi-word text is now split and submitted word by word instead of as one wrong word
  • History file robustness: writes are atomic and corrupt records are skipped instead of crashing the stats view or silently wiping history
  • Escaping from the stats/results views now runs the same cleanup as returning to the menu
  • Cancelled games can no longer be finished and saved to history

0.5.0

Choose a tag to compare

@SteMazzO SteMazzO released this 25 Feb 21:14
Immutable release. Only release title and notes can be modified.

Added

  • User Preferences: Persistent word count setting (JSON-based storage)
  • Command Palette: Quick access to change word count, view statistics, and take screenshots
  • Statistics Enhancements: WPM vs accuracy scatter plot

Changed

  • Simplified internal architecture, removed unnecessary layers and abstractions
  • Flattened folder structure
  • Statistics accuracy: Improved precision and formatting of displayed statistics
  • Statistics UI: Improved layout and added responsive design
  • Trend display: Shows total WPM change over trend window (e.g., ↗ +6.0 WPM (last 10))
  • Improved Performance: Optimized data handling for a smoother user experience
  • Cleaned up pyproject.toml lint rules and added multi-version test matrix (Python 3.10–3.14)

Fixed

  • Timer leak: Stats polling timer now reliably stopped on game finish/restart/menu return
  • New record logic: 0 WPM games no longer trigger "NEW RECORD!" celebration

Full Changelog: 0.4.1...0.5.0

0.4.1

Choose a tag to compare

@SteMazzO SteMazzO released this 20 Nov 15:15

What's Changed

  • Rename 'src' directory to 'termtyprì by @SteMazzO in #4

Full Changelog: 0.4.0...0.4.1

0.4.0

Choose a tag to compare

@SteMazzO SteMazzO released this 19 Nov 11:58
4cd20f4

Added

  • Complete architectural overhaul: Domain, Application, Infrastructure, and Presentation layers
  • Domain Models: Immutable GameResult, GameState, TypingStats value objects
  • Repository Pattern: Abstract HistoryRepository with JSON and in-memory implementations
  • Application Services: GameController, StatsService, ApplicationRouter
  • Enhanced UX: Same-content restart
  • Type Safety: Pydantic settings, full type hints, immutable dataclasses

Changed

  • UI Layer: Replaced MenuSystem with ApplicationRouter, views are pure presentation
  • Game System: History management moved from BaseGame to GameController
  • CLI: Updated stats command to use new architecture
  • Settings: Migrated to Pydantic for validation

Removed

  • Legacy Code: MenuSystem, legacy HistoryManager, history_adapter.py

Testing

  • 136 unit tests, 100% passing