From d8c20478681b0ba1753d188af1b6b5194fc63ae6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C4=ABlav=C4=81pi=20Cheesley?= Date: Tue, 22 Sep 2026 18:48:04 +0100 Subject: [PATCH] Say what the app actually does now The README told visitors they could load a layout but could not type against it, which stopped being true when the ladder, the text generator and the drill surface were joined up. It is the first thing anyone reads on a public repository, so a stale status line is the most visible thing in the project to get wrong. The roadmap listed seven open issues, four of which are closed. Co-Authored-By: Claude Opus 5 --- README.md | 73 +++++++++++++++++++++++++++---------------------------- 1 file changed, 36 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index 74b5af9..9c2f383 100644 --- a/README.md +++ b/README.md @@ -16,9 +16,9 @@ The first supported combination is the Maltron layout on a MoErgo Glove80. The architecture does not assume it: board geometry and the lesson ladder are data, so adding a second board is a config file rather than a rewrite. -> **Status: early.** The layout parser, the board geometry and the persistence -> layer are built and tested. The board render, the lesson ladder and the drill -> itself are not. See [Where this is up to](#where-this-is-up-to). +> **Status: it works.** Load a layout, and it generates a lesson ladder from +> your own keymap and drills you on it — reporting weak keys by finger and row. +> Repair drills, sprint mode and a screen-reader pass are still to come. ## Exporting your layout @@ -112,44 +112,43 @@ matters here, so there is a manual checklist: ## Where this is up to -Built and tested: +Working today: + +- A lesson ladder **generated from your layout**, not hand-written for it. For + the Maltron reference layout the keywell order comes out identical to a + hand-authored ladder, derived rather than copied; the three places it + deliberately differs are defended in [docs/ladder.md](docs/ladder.md). +- Drill text built from each lesson's own key set, so you are never shown a key + the ladder has not given you yet. +- A drill surface with escapable keyboard capture, scoring, stars, and + advancement through the ladder. +- The board drawn from its own geometry, with the next key named in words first + and highlighted second. +- Weak keys grouped **by finger and row** rather than by letter — the thing the + architecture exists for. +- Progress saved, exported and imported as JSON. + +Still to come, all tracked below: repair drills, sprint mode, and a screen +reader pass that a person has to do. + +Seven of the eight regressions in `tests/regression/` are asserted. The last is +the orphaned sprint timer, which lands with sprint mode. Each is filled in with +the feature it guards, never afterwards. -- Glove80 geometry, pinned by 40-odd assertions including a single-mirror-axis - invariant across all 80 positions. -- MoErgo layout export parsing, with the host locale driving shift pairing, and - validation that refuses untrusted input with a message you can act on. -- Progress persistence behind a narrow storage interface, with JSON export and - import. -- Drill time limits, where untimed is a real state rather than a zero. -- WCAG contrast maths, checked against computed styles in both themes. - -Not built yet — and this is the honest state of it: **you can load a layout and -see what it found, but you cannot yet type against it.** +## Roadmap -Of the eight regressions in `tests/regression/`, four are asserted and four are -named `todo` with their acceptance criteria written out. They are filled in as -the features they guard land, never afterwards. +Everything left for version one is tracked as an issue. Issues #1 to #6 and #9 +are done. -## Roadmap +| Issue | What | +| --------------------------------------------------------- | ------------------------------------------ | +| [#7](https://github.com/RCheesley/touchwright/issues/7) | Repair drills built from the keys you miss | +| [#8](https://github.com/RCheesley/touchwright/issues/8) | Sprint mode, adjustable and disableable | +| [#10](https://github.com/RCheesley/touchwright/issues/10) | Usable with a screen reader | -Everything left for version one is tracked as an issue, in dependency order. - -| Issue | What | Needs | -| --------------------------------------------------------- | ----------------------------------------- | ------ | -| [#1](https://github.com/RCheesley/touchwright/issues/1) | Generate the lesson ladder | — | -| [#2](https://github.com/RCheesley/touchwright/issues/2) | Drill engine, a pure state machine | — | -| [#4](https://github.com/RCheesley/touchwright/issues/4) | Scoring: wpm, accuracy, xp, stars | — | -| [#5](https://github.com/RCheesley/touchwright/issues/5) | Render the board as SVG | — | -| [#3](https://github.com/RCheesley/touchwright/issues/3) | Drill text: clusters, words, prose | #1 | -| [#6](https://github.com/RCheesley/touchwright/issues/6) | Drill surface, escapable keyboard capture | #2, #5 | -| [#7](https://github.com/RCheesley/touchwright/issues/7) | Per-key statistics and repair drills | #2, #3 | -| [#8](https://github.com/RCheesley/touchwright/issues/8) | Sprint mode, adjustable and disableable | #2, #3 | -| [#9](https://github.com/RCheesley/touchwright/issues/9) | Ladder, statistics, export and import | #1, #4 | -| [#10](https://github.com/RCheesley/touchwright/issues/10) | Usable with a screen reader | #6 | - -[#1](https://github.com/RCheesley/touchwright/issues/1) is the only one with real -design risk: the brief requires the generated ladder to match the prototype's -hand-authored one or to differ only in documented, defended ways. +[#8](https://github.com/RCheesley/touchwright/issues/8) owns the last unguarded +regression: a sprint timer that outlived its drill and then killed every drill +after it. [#10](https://github.com/RCheesley/touchwright/issues/10) is marked help wanted. If you use a screen reader, that feedback is worth more than anything the tooling