# 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.