Preregister competing navigation ownership comparison

Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a0cffe-206f-7323-89d3-b20ca4cf4bf9
This commit is contained in:
tegwick 2026-09-27 00:30:14 +02:00
parent e80e5c31d4
commit e484cae45f

View file

@ -0,0 +1,64 @@
# LEARN-0013 — Completion ownership under competing navigation
Status: preregistered before implementation/execution. 2026-09-27 Europe/Berlin.
Codex author-model review; stream F, new comparison group F-navigation-ownership-v1.
The multi-request question differs from the single-response focus protocol; do not
pool rates. CAND-0009 URL-addressable State, CAND-0010 Progressive Enhancement,
CAND-0016 Focus Return. No new candidate presumed.
## Question and prior
Can the previous managed focus policy let old history/navigation completions replace
newer selection, steal focus or report obsolete results? Prior single-request evidence
supports continuation but leaves competing completions untested. Proposed guard:
assign an owner/generation to navigation, reject stale completions before effects,
and track focus ownership independently so an otherwise valid response need not
move focus. Test outcome, not a blanket recommendation to cancel HTTP requests.
Compare the unchanged prior focus-policy.js with an authored guarded policy on one
new controlled fixture. Use stable content target and persistent navigation controls
so requests from different elements can compete. Hold responses at server barriers,
then release in declared order. Browser history uses real Back with htmx snapshot
eviction. Keep default transport alive to distinguish ignored completion from abort.
If htmx prevents a race itself, record that rather than force a failure. A guarded
miss/error or URL/content mismatch is failure, not permission to revise expectations.
## Registered matrix
Two policies × two browsers (Chromium/Firefox), six cases = 24 rows. Baseline rows
record the same obligation booleans as guarded rows; distinguish successful recording
from meeting the obligations. Guarded rows assert all registered obligations. One
trial each; preserve failures and any correction. No arbitrary sleeps. Tab/Enter
activate links; browser Back uses history API through Playwright.
| ID | Ordered scenario | Obligation after completion |
| --- | --- | --- |
| O01 | Back misses history cache; user moves to surviving search; release history | Restore selected article/URL/title but preserve search focus and typed text |
| O02 | Back miss held; newer article navigation completes; release old history | Keep newer article/URL/title/status/focus; old history completion has no UI effect |
| O03 | Older article request held; newer article completes; release older success | Keep newer article/URL/title/status; no late focus theft |
| O04 | Older request held and will fail; newer article completes; release old 503 | Preserve newer result and feedback; no obsolete error replaces completion |
| O05 | Older request held; newer request fails; then release older success | Do not resurrect older intent; retain last committed view with newest failure feedback |
| O06 | Older article held; Back restores cached view; release old success | History is newer intent too: keep restored view/URL/title/status/focus |
O05 starts from an already committed alpha view; O06 first visits beta to establish
history. Distinguish committed route from pending browser-history URL. Capture
intermediate and final state, actual requests and completion traces. Prefer public
hooks; any history-XHR callback wrapping is explicitly pinned/experimental, not a
portable production fix. No writes, server rollback, AT speech, production recurrence,
nonzero swap delays, view transitions, redirect/error taxonomy or universal race proof.
## Learning and stopping
45 active research minutes and 10 execution minutes before scope review. Monotonic
single-agent elapsed session minus experiment/check subprocess durations; checkpoint
inspection belongs to execution, no double count. Orientation and final administration
outside window; tokens/cost unknown. Commit this plan before implementation/execution.
Append one ledger outcome; retain all results and source hashes. If scope/criteria
must change, preserve and disclose the original plan rather than rewriting it.
After this comparison, pause the navigation-fixture thread. Write a short synthesis:
what changed versus prior claims, what remains unverified, and the next independent
or broader evidence question. Hand residuals to WP-0003 T01/T02 and measurement work
to WP-0006 T03. Do not automatically start another fixture hardening cycle. One cycle
per distinct group cannot demonstrate diminishing returns. Live inference, if needed,
uses llm-connect; none is planned here.