Skip to content

Commit e643527

Browse files
committed
chore: bump version to 0.1.4
Update version to 0.1.4 for Phase 1.5 release (Scenario Metadata & Filtering System). Changes: - README.md: Updated version references, added Phase 1.5 features to Current Status - Cargo.toml: Version 0.1.3 → 0.1.4 - CHANGELOG.md: Added comprehensive 0.1.4 release notes - Updated project metrics (tests: 164 → 392, scenarios: 20 → 25, LOC: ~5,759 → ~7,200) Phase 1.5 features: - Rich metadata system (category, difficulty, tags, taught commands) - Flexible filtering and sorting (6 sort modes, chainable filters) - Visual indicators (🟢🟡🔴 difficulty + ✅ completion) - Automated scenario validation tests - Performance benchmarks (<1ms for 1000 scenarios)
1 parent 21ee1b9 commit e643527

File tree

4 files changed

+131
-29
lines changed

4 files changed

+131
-29
lines changed

CHANGELOG.md

Lines changed: 88 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,91 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [0.1.4] - 2025-11-28
11+
12+
### Added
13+
14+
**Phase 1.5: Scenario Metadata & Filtering System**
15+
16+
- Rich scenario metadata system
17+
- `ScenarioMetadata` with category, difficulty, tags, and taught commands
18+
- 25 scenarios fully categorized: Movement (5), Editing (11), Clipboard (3), Advanced (6)
19+
- Difficulty levels: Beginner (20), Intermediate (5)
20+
- Each scenario tagged with taught commands and practice focus areas
21+
22+
- Flexible filtering and sorting system
23+
- `ScenarioCollection` with six sort modes (alphabetical, difficulty, category, completion, recent, random)
24+
- Filter by category (Movement, Editing, Clipboard, Advanced)
25+
- Filter by difficulty (Beginner, Intermediate, Advanced)
26+
- Filter by taught commands (e.g., show all scenarios teaching 'w' or 'dd')
27+
- Filter by completion status (completed vs. uncompleted)
28+
- Chainable filters for complex queries
29+
- 100% backward compatible with existing scenarios (metadata optional)
30+
31+
- Enhanced UI indicators
32+
- Difficulty badges: 🟢 Beginner / 🟡 Intermediate / 🔴 Advanced
33+
- Completion status: ✅ for completed scenarios
34+
- Visual feedback in scenario menu
35+
36+
- Automated scenario validation tests
37+
- `test_all_scenarios_load_successfully`: validates all 25 scenarios load without errors
38+
- `test_all_scenarios_execute_solution`: executes solution commands and verifies target state
39+
- Catches cursor position errors, invalid command formats, and other issues
40+
- Runs during CI to prevent scenario regressions
41+
42+
- Performance benchmarks
43+
- Criterion benchmarks in `benches/filtering_sorting.rs`
44+
- <1ms filtering/sorting for collections of 1000 scenarios
45+
- Memory-efficient metadata storage
46+
47+
### Changed
48+
49+
- Integrated `ScenarioCollection` into `AppState` (replacing raw `Vec<Scenario>`)
50+
- Menu now displays difficulty and completion indicators for each scenario
51+
- Updated all 25 scenarios with complete metadata (category, difficulty, tags, taught commands)
52+
53+
### Fixed
54+
55+
- Corrected cursor positions in multiple scenarios:
56+
- `repeat_insert_001`: Fixed target cursor [1, 17][1, 16]
57+
- `paste_before_001`: Fixed target cursor [0, 1][0, 2]
58+
- `delete_line_001`: Start cursor on line 1 instead of line 0
59+
- `document_end_001`: Cursor at [4, 9] (end of document)
60+
- `select_word_001`: Cursor at [0, 9] (after word end)
61+
- `repeat_indent_001`: Cursor [2, 2][2, 4] (after second indent)
62+
63+
- Fixed command format in scenarios:
64+
- Changed multi-key commands from arrays to strings (e.g., `["d", "d"]``["dd"]`)
65+
- Applies to: `dd`, `gg`, `r_`, and other multi-key sequences
66+
67+
- Fixed repeat command repeatability:
68+
- Made all printable ASCII characters and space repeatable in `is_repeatable_command()`
69+
- Allows replace commands like `r_` to work with repeat (`.`)
70+
71+
- Fixed indentation in `repeat_indent_001`:
72+
- Changed from 4-space to 2-space indentation to match simulator behavior
73+
74+
- Fixed append mode behavior in `append_mode_001`:
75+
- Adjusted target content to match actual `e` command behavior (cursor after word, not on last char)
76+
77+
### Performance
78+
79+
- Filtering 1000 scenarios: ~50-200 µs (well under 1ms budget)
80+
- Sorting 1000 scenarios: ~100-400 µs depending on sort mode
81+
- Zero overhead for scenarios without metadata (backward compatible)
82+
83+
### Security
84+
85+
- Added `walkdir = "2.5"` dev-dependency for safe directory traversal in tests
86+
- All scenario validation tests run with bounds checking
87+
88+
### Tests
89+
90+
- Added 16 comprehensive unit tests for `ScenarioCollection`
91+
- Added 2 integration tests for scenario validation
92+
- Total test count: 392 (all passing)
93+
- Zero clippy warnings
94+
1095
## [0.1.3] - 2025-11-28
1196

1297
### Fixed
@@ -240,7 +325,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
240325

241326
---
242327

243-
[Unreleased]: https://github.com/bug-ops/helix-trainer/compare/v0.1.2...HEAD
328+
[Unreleased]: https://github.com/bug-ops/helix-trainer/compare/v0.1.4...HEAD
329+
[0.1.4]: https://github.com/bug-ops/helix-trainer/compare/v0.1.3...v0.1.4
330+
[0.1.3]: https://github.com/bug-ops/helix-trainer/compare/v0.1.2...v0.1.3
244331
[0.1.2]: https://github.com/bug-ops/helix-trainer/compare/v0.1.1...v0.1.2
245332
[0.1.1]: https://github.com/bug-ops/helix-trainer/compare/v0.1.0...v0.1.1
246333
[0.1.0]: https://github.com/bug-ops/helix-trainer/releases/tag/v0.1.0

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "helix-trainer"
3-
version = "0.1.3"
3+
version = "0.1.4"
44
edition = "2024"
55
rust-version = "1.85"
66
authors = ["Andrei G <andrei.g@my.com>"]

README.md

Lines changed: 41 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
55
[![Rust](https://img.shields.io/badge/rust-1.85+-orange.svg)](https://www.rust-lang.org)
66
[![Release](https://img.shields.io/github/v/release/bug-ops/helix-trainer)](https://github.com/bug-ops/helix-trainer/releases/latest)
7+
[![Version](https://img.shields.io/badge/version-0.1.4-blue)](https://github.com/bug-ops/helix-trainer/releases/tag/v0.1.4)
78

89
**Master Helix editor keybindings through scientifically-optimized spaced repetition and gamified training.**
910

@@ -23,10 +24,12 @@ Stop learning commands in isolation. Train real development workflows with FSRS-
2324
- 🎯 **Daily Quest System** — Duolingo-style challenges with streak tracking
2425
- 📊 **Scenario Mastery** — Three-tier progression (Learning → Proficient → Mastered) with graduated XP scaling
2526
- 🛡️ **Anti-Farming Protection** — Session penalties prevent XP exploitation
27+
- 🔍 **Smart Scenario Discovery** — Filter by category, difficulty, commands, or completion status with 6 sort modes
28+
- 📋 **Rich Metadata** — Every scenario tagged with category, difficulty, taught commands, and practice focus
2629
-**Real Helix Accuracy** — Uses official `helix-core` library (v25.07.1)
2730
- 🎮 **31 Commands** — Movement, editing, clipboard, undo/redo, repeat
2831
- 🔒 **100% Offline** — No cloud, no tracking, all data stays local (`~/.config/helix-trainer/`)
29-
- 📚 **20 Training Scenarios** — From basics to intermediate workflows
32+
- 📚 **25 Training Scenarios** — From basics to intermediate workflows with difficulty indicators
3033

3134
---
3235

@@ -44,15 +47,15 @@ Download for your platform from [**Releases**](https://github.com/bug-ops/helix-
4447

4548
```bash
4649
# GNU libc (most distributions)
47-
wget https://github.com/bug-ops/helix-trainer/releases/latest/download/helix-trainer-v0.1.3-x86_64-unknown-linux-gnu.tar.gz
48-
tar -xzf helix-trainer-v0.1.3-x86_64-unknown-linux-gnu.tar.gz
49-
cd helix-trainer-v0.1.3-x86_64-unknown-linux-gnu
50+
wget https://github.com/bug-ops/helix-trainer/releases/latest/download/helix-trainer-v0.1.4-x86_64-unknown-linux-gnu.tar.gz
51+
tar -xzf helix-trainer-v0.1.4-x86_64-unknown-linux-gnu.tar.gz
52+
cd helix-trainer-v0.1.4-x86_64-unknown-linux-gnu
5053
./helix-trainer
5154

5255
# musl (Alpine Linux, static binary)
53-
wget https://github.com/bug-ops/helix-trainer/releases/latest/download/helix-trainer-v0.1.3-x86_64-unknown-linux-musl.tar.gz
54-
tar -xzf helix-trainer-v0.1.3-x86_64-unknown-linux-musl.tar.gz
55-
cd helix-trainer-v0.1.3-x86_64-unknown-linux-musl
56+
wget https://github.com/bug-ops/helix-trainer/releases/latest/download/helix-trainer-v0.1.4-x86_64-unknown-linux-musl.tar.gz
57+
tar -xzf helix-trainer-v0.1.4-x86_64-unknown-linux-musl.tar.gz
58+
cd helix-trainer-v0.1.4-x86_64-unknown-linux-musl
5659
./helix-trainer
5760
```
5861
</details>
@@ -62,15 +65,15 @@ cd helix-trainer-v0.1.3-x86_64-unknown-linux-musl
6265

6366
```bash
6467
# GNU libc
65-
wget https://github.com/bug-ops/helix-trainer/releases/latest/download/helix-trainer-v0.1.3-aarch64-unknown-linux-gnu.tar.gz
66-
tar -xzf helix-trainer-v0.1.3-aarch64-unknown-linux-gnu.tar.gz
67-
cd helix-trainer-v0.1.3-aarch64-unknown-linux-gnu
68+
wget https://github.com/bug-ops/helix-trainer/releases/latest/download/helix-trainer-v0.1.4-aarch64-unknown-linux-gnu.tar.gz
69+
tar -xzf helix-trainer-v0.1.4-aarch64-unknown-linux-gnu.tar.gz
70+
cd helix-trainer-v0.1.4-aarch64-unknown-linux-gnu
6871
./helix-trainer
6972

7073
# musl
71-
wget https://github.com/bug-ops/helix-trainer/releases/latest/download/helix-trainer-v0.1.3-aarch64-unknown-linux-musl.tar.gz
72-
tar -xzf helix-trainer-v0.1.3-aarch64-unknown-linux-musl.tar.gz
73-
cd helix-trainer-v0.1.3-aarch64-unknown-linux-musl
74+
wget https://github.com/bug-ops/helix-trainer/releases/latest/download/helix-trainer-v0.1.4-aarch64-unknown-linux-musl.tar.gz
75+
tar -xzf helix-trainer-v0.1.4-aarch64-unknown-linux-musl.tar.gz
76+
cd helix-trainer-v0.1.4-aarch64-unknown-linux-musl
7477
./helix-trainer
7578
```
7679
</details>
@@ -80,15 +83,15 @@ cd helix-trainer-v0.1.3-aarch64-unknown-linux-musl
8083

8184
```bash
8285
# Apple Silicon (M1/M2/M3/M4)
83-
curl -LO https://github.com/bug-ops/helix-trainer/releases/latest/download/helix-trainer-v0.1.3-aarch64-apple-darwin.tar.gz
84-
tar -xzf helix-trainer-v0.1.3-aarch64-apple-darwin.tar.gz
85-
cd helix-trainer-v0.1.3-aarch64-apple-darwin
86+
curl -LO https://github.com/bug-ops/helix-trainer/releases/latest/download/helix-trainer-v0.1.4-aarch64-apple-darwin.tar.gz
87+
tar -xzf helix-trainer-v0.1.4-aarch64-apple-darwin.tar.gz
88+
cd helix-trainer-v0.1.4-aarch64-apple-darwin
8689
./helix-trainer
8790

8891
# Intel
89-
curl -LO https://github.com/bug-ops/helix-trainer/releases/latest/download/helix-trainer-v0.1.3-x86_64-apple-darwin.tar.gz
90-
tar -xzf helix-trainer-v0.1.3-x86_64-apple-darwin.tar.gz
91-
cd helix-trainer-v0.1.3-x86_64-apple-darwin
92+
curl -LO https://github.com/bug-ops/helix-trainer/releases/latest/download/helix-trainer-v0.1.4-x86_64-apple-darwin.tar.gz
93+
tar -xzf helix-trainer-v0.1.4-x86_64-apple-darwin.tar.gz
94+
cd helix-trainer-v0.1.4-x86_64-apple-darwin
9295
./helix-trainer
9396
```
9497
</details>
@@ -97,8 +100,8 @@ cd helix-trainer-v0.1.3-x86_64-apple-darwin
97100
<summary><b>Windows</b></summary>
98101

99102
Download from [Releases page](https://github.com/bug-ops/helix-trainer/releases/latest):
100-
- **x86_64**: `helix-trainer-v0.1.3-x86_64-pc-windows-msvc.zip`
101-
- **ARM64**: `helix-trainer-v0.1.3-aarch64-pc-windows-msvc.zip`
103+
- **x86_64**: `helix-trainer-v0.1.4-x86_64-pc-windows-msvc.zip`
104+
- **ARM64**: `helix-trainer-v0.1.4-aarch64-pc-windows-msvc.zip`
102105

103106
Extract and run `helix-trainer.exe`
104107
</details>
@@ -239,6 +242,17 @@ Duolingo-proven mechanics:
239242
- Repeat command (`.`) for efficient workflows
240243
- 164 passing tests, zero clippy warnings
241244

245+
### ✅ Phase 1.5: Scenario Metadata & Discovery (COMPLETE - v0.1.4)
246+
247+
- Rich metadata system (category, difficulty, tags, taught commands)
248+
- Flexible filtering (category, difficulty, commands, completion status)
249+
- Six sort modes (alphabetical, difficulty, category, completion, recent, random)
250+
- Visual indicators (🟢 Beginner / 🟡 Intermediate / 🔴 Advanced + ✅ completed)
251+
- 25 fully categorized scenarios (Movement: 5, Editing: 11, Clipboard: 3, Advanced: 6)
252+
- Performance benchmarks for filtering/sorting (<1ms for 1000 scenarios)
253+
- Automated scenario validation tests
254+
- 392 passing tests, zero clippy warnings
255+
242256
### 🔄 Phase 2: Workflow Simulator (Planned - 6+ months)
243257

244258
The flagship feature that makes Helix Trainer unique:
@@ -265,8 +279,9 @@ The flagship feature that makes Helix Trainer unique:
265279
**Project Metrics**:
266280
- **Language**: Rust 2024 Edition
267281
- **MSRV**: 1.85
268-
- **Lines of Code**: ~5,759
269-
- **Tests**: 164 (all passing)
282+
- **Lines of Code**: ~7,200
283+
- **Tests**: 392 (all passing)
284+
- **Scenarios**: 25 (fully categorized with metadata)
270285
- **Binary Size**: ~3MB (release mode)
271286
- **Build Time**: ~1.5-2s (incremental, with sccache)
272287

@@ -398,9 +413,9 @@ Licensed under MIT — see [LICENSE](LICENSE) for details.
398413

399414
```bash
400415
# Download and run
401-
wget https://github.com/bug-ops/helix-trainer/releases/latest/download/helix-trainer-v0.1.3-x86_64-unknown-linux-gnu.tar.gz
402-
tar -xzf helix-trainer-v0.1.3-x86_64-unknown-linux-gnu.tar.gz
403-
cd helix-trainer-v0.1.3-x86_64-unknown-linux-gnu
416+
wget https://github.com/bug-ops/helix-trainer/releases/latest/download/helix-trainer-v0.1.4-x86_64-unknown-linux-gnu.tar.gz
417+
tar -xzf helix-trainer-v0.1.4-x86_64-unknown-linux-gnu.tar.gz
418+
cd helix-trainer-v0.1.4-x86_64-unknown-linux-gnu
404419
./helix-trainer
405420
```
406421

0 commit comments

Comments
 (0)