Releases: SteMazzO/termtypr
Releases · SteMazzO/termtypr
Release list
1.0.0
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
Ron the
results screen to instantly rematch the phrase you just typed - Results end with a You-vs-Ghost comparison of time, WPM, and accuracy
- Race a Ghost menu mode picks one of your saved ghosts, or press
Changed
⚠️ History storage moved to SQLite (termtypr.dbin the user data directory).
The oldhistory.jsonfile is no longer read and is not migrated: typing history
recorded by earlier versions is not carried over.
0.6.0
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_wordsnow writes tocustom_words.jsonin 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
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.tomllint 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
0.4.0
Added
- Complete architectural overhaul: Domain, Application, Infrastructure, and Presentation layers
- Domain Models: Immutable
GameResult,GameState,TypingStatsvalue objects - Repository Pattern: Abstract
HistoryRepositorywith 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
MenuSystemwithApplicationRouter, views are pure presentation - Game System: History management moved from
BaseGametoGameController - CLI: Updated
statscommand to use new architecture - Settings: Migrated to Pydantic for validation
Removed
- Legacy Code:
MenuSystem, legacyHistoryManager,history_adapter.py
Testing
- 136 unit tests, 100% passing