Skip to content

Extract reusable menu and keyboard scanner core - #803

Merged
enaboapps merged 3 commits into
mainfrom
codex/reusable-scanner
Sep 20, 2026
Merged

enaboapps merged 3 commits into
mainfrom
codex/reusable-scanner

Conversation

@enaboapps

@enaboapps enaboapps commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

Summary

Menus and the scanning keyboard previously maintained separate traversal, timing and suspension implementations. Both now delegate to a pure typed item scanner while preserving their current resume and pass-count policies.

The shared navigator can reconcile identified groups and action identities across content changes. Pending activations block scanning, and stale or repeated completions are rejected. Continuous point movement, countdowns, typed execution requests and session/input-generation ownership remain in their existing shared layers.

This is stage 1 of #799. It adds the reusable item core and integration documentation. User customisation (#801, PR #804) follows as a separate stacked PR. App/settings-screen scanning (#802) is out of scope and closed as not planned. No settings or BLE changes.

Closes #800.

Validation

  • Node 24.19.0, Rust 1.97.1.
  • npm run lint, npm test (154 frontend + 5 script tests), npm run build: passed.
  • cargo fmt --check, cargo clippy --all-targets -- -D warnings, cargo test: passed (456 unit tests, 1 existing ignored; 7 configuration tests).
  • New fake-clock tests cover nested Back, direction, resume, stable identity during reorder, missing targets, unchanged-content timing, pending activation and stale/repeated completions.
  • Independent latest-head review: clean on d8fbd5d1bf2abf73ee8e9a3faadbbac9157bd8f4. All review findings (Back identity, suspension during content updates, and groups shrinking to one child) were fixed and regression-tested. Reviewer independently ran 16 pure navigation/item tests.
  • Mac VM on a2afd97 (before the final pure reconciliation fix): launched the development-signed app; used J/K/L switches to open the action menu, More and Keyboard; typed the mapped switch letter twice without recursion; returned through Back and closed the keyboard. TextEdit retained focus. TextEdit autocapitalised saved jj to Jj. Existing native prediction availability limitation persists in this VM and is not claimed as passed.
  • Windows ARM VM: latest source built successfully and Windows ARM Clippy passed. All 455 platform unit tests passed (1 existing ignored) in the logged-in VM session. The native overlay smoke test requires the interactive session.
  • Additional interactive Windows test on d8fbd5d: Parallels Devices → Keyboard actions bypassed the mouse-coordinate control error. Verified grouped menu navigation, opening the keyboard, row/key highlighting, Back to rows and Close keyboard. Character activation did not produce text in the disposable editor; later virtual switch presses stopped producing observable scan movement, including after restarting the test app. This run does not qualify Windows typing or sustained capture. No root cause or product regression is asserted from the test-control evidence alone.
  • Restored both VMs' scanning configuration byte-for-byte and prior running states (Mac suspended with test app stopped; Windows previous Add offline word prediction to the scanning keyboard #796 build running). Host signed Mac process remained unchanged.

Remaining gate

Keep draft until Windows typing/focus and sustained capture can be qualified. The earlier mouse-control blocker has a virtual-key workaround, but the additional run above remains unresolved. All required CI checks pass.

Owen McGirr added 2 commits September 20, 2026 10:32
- Share menu and keyboard traversal, timing and activation suspension\n- Reconcile identified content and reject stale activation completions\n- Preserve existing scanner policies and document provider integration
@enaboapps enaboapps added this to the v1.0.0-rc.13 milestone Sep 20, 2026
@enaboapps
enaboapps marked this pull request as ready for review September 20, 2026 14:40
@enaboapps
enaboapps merged commit 5260225 into main Sep 20, 2026
6 checks passed
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.

Unify scan navigation and timing behind a reusable engine

1 participant