Skip to content

v 1.3.0 - #34

Merged
egno merged 29 commits into
mainfrom
dev
Jul 31, 2026
Merged

v 1.3.0#34
egno merged 29 commits into
mainfrom
dev

Conversation

@egno

@egno egno commented Jul 31, 2026

Copy link
Copy Markdown
Owner

No description provided.

Egno and others added 28 commits July 29, 2026 11:05
Expose session window and attempt floors in settings so unlocks, focus,
and heatmap respond to tunable confidence inputs; round scores to two
decimals so weak/mastered decisions match what practice displays.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Remove session window and attempt floors from Settings so routine saves
do not overwrite advanced adaptive-engine values; document settings.toml.

Co-authored-by: Cursor <cursoragent@cursor.com>
…in comments.

Also fixes a pyright error in _snapshot_unlock_state (list invariance on
Iterator vs list) that CI never reached because ruff failed first.
FOCUS_CHAR_BOOST weighting (added in b0f130e) changed the generated
lesson text but the checked-in snapshot was never refreshed to match.
Confidence uses min(speed, accuracy) with recency-weighted session
aggregates; stats trends unified on one widget; practice gets word-wrap,
typing colors, underline cursor, idle learn timer, and HUD Last deltas.

Co-authored-by: Cursor <cursoragent@cursor.com>
Keep dev 1.2.3 release changes when resolving conflicts with main (1.2.2).

Co-authored-by: Cursor <cursoragent@cursor.com>
Ruff import order, line length, unused imports, and aggregate int casts.

Co-authored-by: Cursor <cursoragent@cursor.com>
Run `uv run pre-commit install` once per clone to enable lint on commit.

Co-authored-by: Cursor <cursoragent@cursor.com>
Matches CI: uv run pyright with pass_filenames false so pyproject.toml scope applies.

Co-authored-by: Cursor <cursoragent@cursor.com>
Use explicit grid/spark_width kwargs in format_metric_trend_block and
TypedDict session fixtures in tests instead of untyped dict unpacking.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Baselines were stale after 1.2.3 presentation changes; README now lists
what pre-commit covers vs the macOS snapshot job.

Co-authored-by: Cursor <cursoragent@cursor.com>
…ut dropdown when TOML layouts change without restart. Bump to 1.2.3 and expand layout TOML/repo tests.

Co-authored-by: Cursor <cursoragent@cursor.com>
Word-list sampling now scores dictionary words with transition weights so
adaptive lessons practice measured weak pairs, not just weak keys.

Co-authored-by: Cursor <cursoragent@cursor.com>
…a settings.toml.

New keys stay locked until unlocked bigrams with data meet the confidence threshold; lesson generation boosts weak focus keys and transitions using configurable multipliers (not exposed in the Settings UI).

Co-authored-by: Cursor <cursoragent@cursor.com>
Same-letter pairs no longer enter transition stats or unlock gates; lesson
building favors letter drill while any unlocked key is below mastery.
Leading skip keys also apply at word boundaries for accidental spaces.

Co-authored-by: Cursor <cursoragent@cursor.com>
Weak-focus lessons now guarantee a configurable share of focus-matching
words, sample the wordlist without replacement, and fall back to Markov
when the pool is exhausted. Adds lesson_word_count, focus_word_min_fraction,
and max_word_repeats to settings.toml, fixes empty-transition rebuild loops,
and hardens edge cases around invalid settings and tiny alphabets.

Co-authored-by: Cursor <cursoragent@cursor.com>
Users can set min/max generated word length in settings; the generator,
Markov fallback padding, and WPM↔CPM conversion use those bounds so
target speed matches the text they actually type.

Co-authored-by: Cursor <cursoragent@cursor.com>
Dictionary words in lessons now honor generated_word_min/max (same as
Markov), defaults tighten to 2-4 for shorter practice text, with
integration tests for settings.toml and WPM conversion paths.

Co-authored-by: Cursor <cursoragent@cursor.com>
@egno

egno commented Jul 31, 2026

Copy link
Copy Markdown
Owner Author

@copilot resolve the merge conflicts in this pull request

# Conflicts:
#	.pre-commit-config.yaml
#	README.md
#	docs/CHANGELOG.md
#	pyproject.toml
#	src/keystrike/app.py
#	src/keystrike/application/build_lesson.py
#	src/keystrike/application/session_use_cases.py
#	src/keystrike/application/stats_use_cases.py
#	src/keystrike/domain/aggregate.py
#	src/keystrike/domain/confidence.py
#	src/keystrike/domain/version.py
#	src/keystrike/infrastructure/session_repo_jsonl.py
#	src/keystrike/presentation/screens/practice.py
#	src/keystrike/presentation/screens/stats.py
#	src/keystrike/presentation/textual_app.py
#	src/keystrike/presentation/theme.py
#	src/keystrike/presentation/widgets/hud.py
#	src/keystrike/presentation/widgets/kb_heatmap.py
#	tests/application/test_session_use_cases.py
#	tests/application/test_stats_use_cases.py
#	tests/domain/test_aggregate.py
#	tests/infrastructure/test_session_repo_jsonl.py
#	tests/presentation/__snapshots__/test_snapshots/test_practice_screen_snapshot.svg
#	tests/presentation/test_hud.py
#	tests/presentation/test_kb_heatmap.py
#	tests/presentation/test_practice_screen.py
#	tests/presentation/test_stats_screen.py
#	tests/presentation/test_typing_area.py
#	uv.lock

Copilot AI commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

@copilot resolve the merge conflicts in this pull request

Resolved all 29 conflicting files in commit c524ab7. The dev (v1.3.0) changes were kept in all conflicts since v1.3.0 is a refactored superset of v1.2.3 — all 407 tests pass.

Copilot finished work on behalf of egno July 31, 2026 09:13
@egno
egno merged commit d2bbff8 into main Jul 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants