frontend-patterns/research/evolution/cycles/2026-09-27-navigation-focus.md
tegwick 2b1c9a4109 Preregister keyboard and navigation feedback investigation
Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a0cffe-206f-7323-89d3-b20ca4cf4bf9
2026-09-27 00:16:36 +02:00

60 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# LEARN-0012 — Keyboard continuation and navigation feedback
Status: preregistered before implementation/execution. Codex author-model review.
2026-09-27 Europe/Berlin. Stream F; new comparison group F-navigation-focus-v1.
Affected CAND-0010 Progressive Enhancement and boundary of CAND-0016 Focus Return.
This differs from B-navigation-mechanism-v1; do not pool their learning rates.
## Question, belief and disconfirmation
Does a region-replacing enhanced route need an explicit continuation/feedback policy
beyond working native controls, especially if focus moves while a response is pending?
Prior: keyboard activation can work while replacement loses meaningful focus and
errors remain silent. Expected policy: direct navigation may focus a new heading;
failed requests retain current work and expose a status/recovery action. A delayed
response must not steal focus after the user moves to another surviving control.
Modal return-to-invoker is not automatically the right navigation policy.
Compare raw pinned htmx 2.0.11 against an authored optional policy with identical
HTML/transport. Raw outcomes are observations, not assumed failures. Disconfirm the
proposed policy if it loses native operation, steals focus from a newer task, fails
to report failure, or breaks history. Check real DOM activeElement, title, URL,
visible feedback and live-region markup; no screen-reader announcement or WCAG
conformance claim from DOM evidence. Standards inform interpretation, not scoring
an entire application. No new pattern or promotion merely from passing checks.
## Registered cases
Chromium and Firefox; isolated contexts; one execution per condition. Preserve all
outcomes and any harness correction. No arbitrary sleeps or readiness-dependent fix.
Use Tab/Enter for navigation actions, not programmatic focus or mouse clicks.
| ID | Condition | Obligation/observation |
| --- | --- | --- |
| K01 | JavaScript disabled; native keyboard link | Tab reaches link, Enter loads selected full document; inspect title |
| K02 | Raw versus managed enhanced keyboard link | URL/content agree; observe active element/title/status; managed policy focuses new heading and labels completion |
| K03 | Raw versus managed enhanced 503 | Old view/URL and invoker focus retained; managed status explains failure; keyboard native recovery works |
| K04 | Raw versus managed request held at server; user Tabs to persistent search | Release response only after focus moved; no focus theft; managed status reflects completion |
| K05 | Raw versus managed browser history return | Restore selection; managed policy supplies route title/heading continuation; no full reload required |
| K06 | Raw versus managed background region update while search has focus | Background update does not move focus or announce a route transition |
K01 two browser cases, K02–K06 two variants × two browsers: 22 cases total. Raw rows
record which managed obligations they meet rather than treating a predicted weakness
as an assertion failure. Managed obligations must pass or be reported as unresolved.
No accessible-name/focus-ring audit, AT speech test, user study, native history focus
universality, overlapping navigation-request ordering, production recurrence or
network interruption claim. Single delayed response only. A held response is not a
model of every asynchronous failure. Live inference, if later required, uses llm-connect.
## Effort and review boundary
45 active agent-research minutes plus 10 execution minutes before scope review.
Monotonic session clock began after local orientation; subtract measured blocking
experiment/check subprocess time. Include design/implementation/analysis/recording;
no overlapping work. Checkpoint inspection during execution belongs to execution.
Final receipt refresh/commit/snapshot/sync overhead after analysis cutoff is excluded.
Tokens/cost unknown. Retain clock receipt, inputs, package/browser hashes and request
traces. Commit registration before implementation/execution. Write outcome separately,
append ledger entry with this protocol_ref, update affected profiles/report and take
an immutable snapshot after committing candidate changes. WP-0003 T01/T02 and WP-0006
T03 retain residuals. One cycle in this new group cannot establish diminishing returns.