Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a0cffe-206f-7323-89d3-b20ca4cf4bf9
95 lines
6.6 KiB
Markdown
95 lines
6.6 KiB
Markdown
# Competing navigation completion ownership — 2026-09-27
|
|
|
|
LEARN-0013, Codex author-model review. [Preregistration](../evolution/cycles/2026-09-27-navigation-ownership.md)
|
|
committed as `e484cae` before implementation/execution. Stream F; new group
|
|
F-navigation-ownership-v1. [Runner](../experiments/navigation-history/ownership.mjs),
|
|
[guarded policy](../experiments/navigation-history/ownership-policy.js),
|
|
[final receipt](../experiments/navigation-history/ownership-result.json).
|
|
|
|
## Comparison and findings
|
|
|
|
Same locked htmx 2.0.11/Playwright 1.63.0 and Chromium 151.0.7922.34/Firefox 155.0.
|
|
The unchanged previous focus-policy.js is the baseline, on a new fixture with stable
|
|
content target and persistent navigation links. Different controls can have concurrent
|
|
requests; there is no hx-sync configuration. Authored ownership policy is a separate
|
|
variant, not a vendor patch. Exact input/browser hashes and completion traces retained.
|
|
|
|
All 24 rows completed in the corrected run. Baseline met all obligations in **0/12**
|
|
rows; guard met them in **12/12**. Baseline recording success is not obligation success.
|
|
These are six deliberately challenging scenarios in two browsers, not an application
|
|
quality score, independent trials or proof of all possible schedules.
|
|
|
|
| Claim | Case | Baseline in both browsers | Guarded result in both browsers |
|
|
| --- | --- | --- | --- |
|
|
| NO01 | O01 delayed history, newer search focus | Restores alpha and preserves typed text but moves focus from search to heading | Restores alpha while retaining search focus/text |
|
|
| NO02 | O02 delayed history, newer gamma navigation | Old alpha replaces content/title/status under gamma's URL | Gamma content/URL/title/status/focus unchanged |
|
|
| NO03 | O03 older success after newer success | Old beta replaces gamma and pushes beta's URL | Gamma result retained |
|
|
| NO04 | O04 older failure after newer success | Gamma remains but old failure replaces its success feedback | Gamma feedback retained |
|
|
| NO05 | O05 newer request fails, older success follows | Old beta resurfaces, replacing committed alpha and newest failure feedback | Alpha and newest failure retained |
|
|
| NO06 | O06 browser Back supersedes old request | Old beta replaces restored alpha and pushes beta's URL | Alpha history result retained |
|
|
|
|
O05 encodes an explicit latest-intent policy: a failed newer navigation does not revive
|
|
older intent without a new user decision. This is not a universal rule for every queue
|
|
or application. O01 distinguishes permission to restore content from permission to
|
|
move focus. During a pending Back miss, the browser URL already names alpha while beta
|
|
is still displayed; we measured completion obligations, not a complete pending-state
|
|
presentation/recovery design. No pending-URL consistency guarantee is established.
|
|
|
|
## Mechanism and implementation limits
|
|
|
|
Guarded navigation requests receive increasing generations; browser popstate advances
|
|
the same generation. Stale request completions are rejected at beforeOnLoad before
|
|
response processing. This covers success and error feedback, not just the content swap.
|
|
Focus checks remain separate from generation. History cache misses capture navigation
|
|
generation and a focus-change epoch. A still-current restoration can change the article
|
|
without moving focus after the user has started work in a surviving control.
|
|
|
|
The history adapter wraps the XHR onload handler exposed by historyCacheMiss and checks
|
|
the generation and target path before calling the original. The public
|
|
[htmx event reference](https://htmx.org/events/) documents request cancellation and
|
|
modifiable history-request details; **wrapping the preinstalled handler is a pinned
|
|
implementation-dependent experiment**, not a portable supported router API. Inspected
|
|
htmx 2.0.11 loadHistoryFromServer sets the handler before emitting historyCacheMiss;
|
|
its historyCacheMissLoad notification alone does not veto the subsequent swap. No
|
|
claim that this implementation will remain valid across versions or extensions.
|
|
|
|
No requests are aborted by this policy. Server traces show responses released and
|
|
client load events observed even when effects are discarded. Ignoring a completion is
|
|
not cancellation of server work, rollback, freshness verification or remote-write safety.
|
|
The fixture has no writes. A route generation is scoped to this one navigation surface,
|
|
not a global rule to suppress unrelated background work.
|
|
|
|
## Retained harness correction
|
|
|
|
[Initial receipt](../experiments/navigation-history/ownership-initial-result.json)
|
|
and [initial runner](../experiments/navigation-history/ownership-initial.mjs) preserve
|
|
20 completed rows and four Firefox harness failures. The forward-only Tab helper could
|
|
not return from the programmatically focused heading to earlier navigation controls in
|
|
O02/O06, in either policy. It did not execute those intended interleavings. The revised
|
|
helper chooses Shift+Tab when the target precedes the active element. No programmatic
|
|
focus, click, policy or assertion change was introduced. All 24 rows were rerun; initial
|
|
observations are not pooled as independent evidence. The initial runner file's hash
|
|
matches the initial receipt's ownership.mjs hash despite the archival filename.
|
|
|
|
## Learning disposition: revision
|
|
|
|
LEARN-0012 established only single-response continuation and explicitly left history/
|
|
request races unresolved. This follow-up does not retract those bounded results.
|
|
It does revise the language's operational guidance: checking focus at swap time is
|
|
insufficient as an overall completion policy. Distinguish navigation ownership from
|
|
focus ownership; apply navigation checks to history, titles, URL and feedback, including
|
|
late errors and the case where the newest request fails. Record one consequential
|
|
revision across affected candidates, not twelve discoveries or a new pattern.
|
|
|
|
URL-addressable State, Progressive Enhancement and the Focus Return scope boundary
|
|
remain hypotheses. Full-pattern recurrence, AT/human validation, repeated production
|
|
use, redirects, unload, nonzero swap/view-transition delays, multiple simultaneous
|
|
history misses, bfcache, pending-state disclosure and full lifecycle cleanup remain
|
|
unverified. The script has document-lifetime handlers; no mount/unmount reuse claim.
|
|
|
|
[Measured effort](../evolution/cycles/2026-09-27-navigation-ownership-effort.json)
|
|
includes the initial run and corrected run as execution. Active time includes protocol,
|
|
implementation, analysis and recording; final administration excluded. No token/cost
|
|
estimate or diminishing-returns claim. See the [navigation-thread review](NavigationThreadReview.md)
|
|
for the agreed pause and next evidence direction. Residuals remain WP-0003 T01/T02;
|
|
measurement work remains WP-0006 T03. No further fixture-hardening cycle is started.
|