✨ Features
- feat(typing): add context lines display and preserve indentation (4fc40e3)
- feat(typing): improve color scheme and UI elements (1c64bbc)
- feat(countdown): enhance visual experience with ASCII art and improved colors (7a8c0f8)
- feat: add CODEOWNERS file with @unhappychoice as global owner (f5d4b33)
- feat: add dependabot configuration for daily Cargo updates (06687e4)
- feat(stage-manager): integrate TotalTracker for comprehensive session tracking (749f6a7)
- feat(tracking): add TotalTracker for game-wide statistics (94f6f2a)
- feat(ui): implement comment highlighting in stage renderer (ae03906)
- feat(typing-core): add display_comment_ranges method (929b5e4)
- feat(tests): unify typing core tests with parser-based comment detection (58a1a10)
- feat(extractor): make extract_comment_ranges public (c92c3a8)
- feat(display): improve newline symbol display and positioning (e6afae6)
- feat(typing): preserve empty lines in all challenges (452874f)
- feat(text-processing): add empty line preservation option (db73ac3)
- feat: include Zen challenges in main challenge loading (cacf6c0)
- feat(ui): improve typing screen layout with blue theme and line numbers (5a345e7)
- feat(ui): add real-time metrics updates during typing (9ba9561)
- feat(models): create unified model structure (f971864)
- feat: rename RepoManager to RepositoryManager for consistency (7fc3958)
- feat: complete SessionSummary to SessionResult unification with full implementation (1cb5d45)
- feat: rename GameDisplayRatatui to StageRenderer for consistency (f121860)
- feat: rename GameState to SessionState for consistency (558563b)
- feat: complete terminology unification across entire codebase (7fb0b5f)
- feat: fix semantic accuracy of all field and function names (845aeda)
- feat: complete method and variable name unification (04fc71e)
- feat: fix Rank/RankingTitle naming inconsistency (64263f3)
- feat: complete UI text terminology updates (76cf9e3)
- feat: complete model terminology unification (4afec8c)
- feat: add new unified model structure (ee464f5)
- feat(options): improve ExtractionOptions with dynamic language patterns (646900c)
- feat(language): split Language implementations into individual files (24528ec)
- feat: implement comprehensive Dart language extractor (731e083)
- feat: add Dart language detection and file pattern support (6fee1f4)
- feat: add tree-sitter-dart dependency for Dart language support (0356278)
- feat: register Haskell language in core system (97c558f)
- feat: add Haskell language support (6839932)
- feat: add C++ file patterns to default extraction options (eb1f4c0)
- feat: implement C++ code parser with comprehensive extraction (ad882a1)
- feat: add C++ language detection and validation (f883f92)
- feat: add tree-sitter-cpp dependency for C++ language support (502f0c3)
- feat: add C comment detection support (5a7c55d)
- feat: add TreeSitterLanguageError support (3a090ef)
- feat: add C file patterns to extraction options (a85eb4f)
- feat: implement C language parser (ad0dbae)
- feat: add C language enum and detection (0eb169c)
- feat: add tree-sitter-c dependency (9a988f4)
- feat: integrate retry functionality into stage manager (a75e807)
- feat: implement retry option on failure and cancellation screens (33accf7)
- feat: align result file name display with colons (a7405fd)
- feat: display countdown numbers as ASCII art (931d433)
- feat: improve social sharing text with repository context (ed1c2e7)
- feat: add repository information to result and session screens (914f248)
- feat: enhance loading screen repository display (26c7790)
- feat: improve file path display and add repository context to challenges (acf709e)
- feat: implement dynamic score color-coding based on ranking tier (7237046)
- feat: add terminal color methods to RankingTier and RankingTitle (615bb2e)
- feat: shorten countdown duration for improved UX (812c5e7)
🐛 Bug Fixes
- fix(clippy): remove unnecessary mut in context_loader tests (91bebf5)
- fix(clippy): resolve clippy warnings (e66487a)
- fix(exit-screen): replace session terminology with total and remove conditions (ca18640)
- fix: reset skip count to 3 when retrying failed/cancelled stages (9375d78)
- fix(clippy): use $crate instead of crate in macro definitions (90aed49)
- fix: update tests to work with refactored typing_core (12b070e)
- fix: record keystroke before typing core input processing (5110a64)
- fix: use correct display position for current_mistake_position (67ccd84)
- fix(clippy): resolve field_reassign_with_default and needless_range_loop warnings (0a325c5)
- fix(clippy): resolve needless_range_loop warning (497be0a)
- fix(scoring): correct real-time CPM calculation during pauses (c620a64)
- fix: correct remaining semantic naming issues beyond rank-related terms (122b178)
- fix(tests): fix test failures by excluding tmp/** pattern in temp directories (3b89dee)
- fix: resolve clippy warning in Dart extractor (63cb5b1)
- fix: resolve clippy warnings in Haskell extractor (caadf07)
- fix: apply cargo fmt to fix spacing in comments (ff78420)
- fix: ensure panic error messages are visible to users (4ff714c)
- fix: resolve clippy warning for unused variable (db42a84)
- fix(ci): improve Homebrew formula update process with awk (7c0b626)
📝 Other Changes
- chore: bump version to v0.4.0 (e76583d)
- chore: Update Cargo.lock (9e0a8e2)
- style: fix cargo fmt formatting issues (f36dc09)
- chore(deps): bump rusqlite from 0.29.0 to 0.37.0 (afb84ca)
- style: apply cargo fmt formatting changes (c3131b9)
- chore(deps): bump crossterm from 0.27.0 to 0.29.0 (9d225b0)
- chore(deps): bump tree-sitter from 0.24.7 to 0.25.8 (bfc3da2)
- chore(deps): bump thiserror from 1.0.69 to 2.0.16 (20b5145)
- style: fix code formatting with cargo fmt (e1e4992)
- refactor: remove unused code and fields from typing_core (de29b0a)
- refactor: move mistake tracking to typing_core (ebfff51)
- refactor: delegate input processing responsibility to typing_core (a965527)
- refactor: remove unnecessary was_failed method (1ed5560)
- refactor(typing_screen): improve code organization and reduce duplication (cc79204)
- refactor(mod): update module exports (4f61144)
- test(snapshots): update test snapshots for comment highlighting (2565726)
- refactor(ui): simplify display_challenge_with_info method signature (141dbba)
- refactor: unify SessionSummary/SessionResult and fix semantic naming (aaa51d7)
- refactor: rename components for terminology consistency (8a870a7)
- refactor(cli): remove unused config.rs and update CLI structure (9891198)
- refactor(extractor): update extractors to use polymorphic Language trait (dcaa065)
- refactor(language): refactor Language trait to polymorphic design (98cbb45)
- docs: update documentation for Dart language support (79ad937)
- test: add comprehensive Dart language extraction tests (3034a20)
- refactor: remove unnecessary delegation and suffix in Haskell extractor (743fd24)
- style: format code according to rustfmt standards (a224121)
- docs: add Haskell to supported languages documentation (ba2bdf5)
- refactor: update all language parsers for tree-sitter v0.24 (e1e0755)
- refactor: migrate to tree-sitter v0.24 API (89f6945)
- chore(deps): update all tree-sitter dependencies to latest versions (47d0899)
- docs: add C and C++ language support to documentation (ff40f6b)
- test: add comprehensive C++ language integration tests (1b58863)
- test: add comprehensive C language tests (f0238c9)
- refactor: remove old result_screen.rs after successful refactoring (3d1c16c)
- refactor: update screen module exports for new structure (f1f794f)
- refactor: split result_screen.rs into focused screen modules (e630e27)
- refactor: redesign countdown screen repository and source info layout (c796d22)
- chore: Update Twitter references to X platform (1c6fdb2)
- docs(readme): update --repo examples to use relevant Rust libraries (791996b)
- docs(readme): add --repo option examples (68e6815)
- refactor(main): simplify main.rs using new CLI modules (238ad8c)
- refactor(cli): move CLI components to separate modules (3d82e20)
- chore: Update CHANGELOG.md (32d6d2c)