frontend-patterns/research/experiments/navigation-history
tegwick e8ccb73a12 Test competing navigation ownership and review research thread
Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a0cffe-206f-7323-89d3-b20ca4cf4bf9
2026-09-27 00:45:54 +02:00
..
experiment.mjs Measure navigation history and cache corroboration cycle 2026-09-27 00:11:21 +02:00
focus-policy.js Measure keyboard continuation and navigation feedback 2026-09-27 00:22:14 +02:00
focus-result.json Measure keyboard continuation and navigation feedback 2026-09-27 00:22:14 +02:00
focus.mjs Measure keyboard continuation and navigation feedback 2026-09-27 00:22:14 +02:00
initial-partial.json Measure navigation history and cache corroboration cycle 2026-09-27 00:11:21 +02:00
ownership-initial-result.json Test competing navigation ownership and review research thread 2026-09-27 00:45:54 +02:00
ownership-initial.mjs Test competing navigation ownership and review research thread 2026-09-27 00:45:54 +02:00
ownership-policy.js Test competing navigation ownership and review research thread 2026-09-27 00:45:54 +02:00
ownership-result.json Test competing navigation ownership and review research thread 2026-09-27 00:45:54 +02:00
ownership.mjs Test competing navigation ownership and review research thread 2026-09-27 00:45:54 +02:00
package-lock.json Measure navigation history and cache corroboration cycle 2026-09-27 00:11:21 +02:00
package.json Measure navigation history and cache corroboration cycle 2026-09-27 00:11:21 +02:00
README.md Test competing navigation ownership and review research thread 2026-09-27 00:45:54 +02:00
result.json Measure navigation history and cache corroboration cycle 2026-09-27 00:11:21 +02:00

Navigation, history and representation-cache experiment

First prospective cycle: preregistration at commit f3697c1, before implementation/execution. Review. Pinned htmx 2.0.11 and Playwright 1.63.0, authored public read-only HTTP fixture. Result includes input hashes, exact browser versions/binary hashes, request traces and final DOM/event observations. No real application/CDN or model call.

npm ci --ignore-scripts --cache /tmp/fep-npm-cache
PLAYWRIGHT_BROWSERS_PATH=/tmp/fep-playwright-browsers node node_modules/playwright/cli.js install firefox
PLAYWRIGHT_BROWSERS_PATH=/tmp/fep-playwright-browsers FEP_CHROMIUM_PATH=/path/to/chrome npm test

Firefox profile access required execution outside the workspace sandbox. Chromium was an explicit preinstalled binary override, not claimed to be Playwright's bundled revision. Default output /tmp/fep-navigation-result.json; FEP_RESULT_PATH overrides it. The runner writes checkpoints to that output and a complete receipt on completion. Choose a new output per run; committed receipts are never default outputs.

Initial partial receipt retains ten passing Chromium rows; launch then failed because Firefox was not in Playwright's default cache. Setting the existing browser-cache path fixed execution, without changing runner or criteria. The full run repeated Chromium and completed Firefox: 20/20 registered checks, not 30 independent observations. N10 repeats explicit Node HTTP checks in each browser group; those two rows are not evidence of browser-specific automatic revalidation. N09 records the negative control, including non-reproduction if that ever occurs.

N01–N06 cover direct/native/enhanced/history/recovery paths; N07–N09 use actual browser HTTP cache with no request interception. N08's final full fetch reaches the server again in both browsers: correctness does not imply simultaneous retention of both variants or optimal cache hit rate. Both N09 runs reuse the fragment without another request. The server varies on both request selectors and computes ETags from response bytes. htmx history requests explicitly disable HX-Request; the server separately supports the history-restore header overriding fragment selection.

History eviction uses htmx 2.0.11's sessionStorage key, an experimental control tied to the pinned implementation. No assertion of identical content freshness across history, general offline availability, accessibility, script-late races, writes, real intermediary correctness or independent full-pattern recurrence follows.

Keyboard/focus follow-up

Preregistered LEARN-0012, review, receipt. Run the same browser environment with node focus.mjs. Output defaults to /tmp/fep-focus-result.json; choose a fresh FEP_RESULT_PATH per execution. The separate focus runner/policy preserve the earlier navigation/cache inputs and receipt hashes. Same locked packages. 22 cases: native keyboard plus raw/managed navigation, 503 feedback, held-response focus ownership, history and background work.

Raw rows observe behavior, so 22 passing rows do not mean raw and managed variants meet identical focus/feedback obligations. See NF01–NF06. The policy is authored experimental code; DOM focus and live-region text do not establish assistive-technology announcements or conformance. History and request-race limits remain explicit.

Competing completion follow-up and pause

LEARN-0013 protocol, review, receipt. Use the same browser environment with node ownership.mjs; choose a new FEP_RESULT_PATH (default /tmp/fep-ownership-result.json). Six scenarios × two policies × two browsers: 24 completed rows, all obligations met by guard 12/12 and previous policy 0/12. These are deliberately adversarial cases, not general quality scores. Server barriers impose schedules; client completions are observed without aborting transport or claiming remote rollback.

The previous focus-policy.js remains byte-for-byte unchanged. New ownership-policy.js uses a generation plus separate focus ownership; its history XHR handler wrapping is explicitly tied to pinned internals. Initial runner/result retained under ownership-initial.mjs / ownership-initial-result.json: four Firefox keyboard-helper failures corrected by backward traversal, without changing policies or obligations. Initial receipt's ownership.mjs hash corresponds to ownership-initial.mjs.

The thread review pauses fixture expansion and hands the next evidence question to an independent pinned application source study.