Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a0cffe-206f-7323-89d3-b20ca4cf4bf9
76 lines
4.8 KiB
Markdown
76 lines
4.8 KiB
Markdown
# Navigation, history and representation-cache experiment
|
||
|
||
First prospective cycle: [preregistration](../../evolution/cycles/2026-09-27-navigation.md)
|
||
at commit `f3697c1`, before implementation/execution. [Review](../../reviews/NavigationHistoryExperiment.md).
|
||
Pinned htmx 2.0.11 and Playwright 1.63.0, authored public read-only HTTP fixture.
|
||
[Result](result.json) includes input hashes, exact browser versions/binary hashes,
|
||
request traces and final DOM/event observations. No real application/CDN or model call.
|
||
|
||
```bash
|
||
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](initial-partial.json) 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](../../evolution/cycles/2026-09-27-navigation-focus.md),
|
||
[review](../../reviews/NavigationFocusExperiment.md), [receipt](focus-result.json).
|
||
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](../../evolution/cycles/2026-09-27-navigation-ownership.md),
|
||
[review](../../reviews/NavigationOwnershipExperiment.md), [receipt](ownership-result.json).
|
||
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](../../reviews/NavigationThreadReview.md) pauses fixture expansion
|
||
and hands the next evidence question to an independent pinned application source study.
|