frontend-patterns/research/evolution/cycles/2026-09-27-navigation.md
tegwick f3697c1447 Preregister first measured navigation research cycle
Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a0cffe-206f-7323-89d3-b20ca4cf4bf9
2026-09-27 00:04:17 +02:00

5.1 KiB

LEARN-0011 — Navigation representations across entry and history

Status: preregistered before implementation/execution; owner/reviewer Codex (author-model). Local date 2026-09-27 (Europe/Berlin); UTC dates may still be 2026-09-26. Stream B; CAND-0009 URL-addressable State and CAND-0010 Progressive Enhancement.

Question and prior belief

Can one public read-only route preserve selection and complete-document availability across direct entry, absent/failed enhancement, history restoration and HTTP caching? Prior: a native href/GET contract plus representation-aware routing/cache selection should satisfy this narrow obligation. Merely pushing a URL, emitting HTML or adding Vary without checking actual cache behavior is insufficient. History snapshots may restore older bytes; no freshness or offline availability promise follows.

Expected decision: corroborate these existing obligations with a pinned runtime, or revise their scope if the failure cases expose an unrecorded obligation. A pass count alone is not a revision. One question yields one ledger outcome, not one per test. Disconfirmation: a correctly keyed full/fragment response is mixed; a valid native contract needs client script; or the tested history recovery cannot resolve selection under the declared setup. Unexpected results remain in the receipts.

Registered comparison contract: B-navigation-mechanism-v1

One bounded route/representation question per cycle; real pinned library in authored local HTTP fixture; Chromium and Firefox; positive paths plus negative controls; author-model review, no production recurrence or human validation inferred. Use this group only for comparable question size/evidence tier and the same accounting below. No model inference is needed. Any later inference must use llm-connect.

Pin htmx 2.0.11 and Playwright 1.63.0 with lockfile. Use native anchors and a GET filter, optional boosted links with explicit history configuration. Keep application server policy separate from vendor behavior. Document exact headers, browser versions, file hashes and request traces. Real browser HTTP cache, no request interception.

Checks fixed before execution

Run each browser condition once, isolated contexts; retain failures, do not retry to hide them. Wait on events/DOM/network state rather than arbitrary settling sleeps.

ID Condition / expected observation
N01 Direct filtered entry with JavaScript disabled, native link and GET form: full shell, matching selection/URL
N02 Enhanced link pushes selection; reload and fresh direct entry produce full shell
N03 Back/forward with history snapshot available: selection restored; distinguish network from snapshot
N04 Evict htmx history storage before back: history-miss request restores selection from full document
N05 Enhanced request returns 503: committed old URL/content remain; explicit native recovery can navigate
N06 htmx script returns 503: native link and GET form still work
N07 Cache fragment first, then full document for same URL: correct Vary preserves both representations
N08 Cache full document first, then fragment for same URL: reverse ordering preserves both
N09 Omit Vary negative control: browser may reuse a fragment as a document; record actual behavior, do not presume immunity if not reproduced
N10 Validator checks: matching ETag yields 304; other representation ETag yields 200 and correct body; history-restore selector returns full document

N09 is diagnostic, not a success guarantee: a non-reproduction narrows this browser observation and leaves the contract concern open. N10 may use explicit HTTP requests for conditional semantics; distinguish these from automatic browser revalidation. No real intermediary/CDN, production application, offline guarantee, writes, general accessibility or latency claim. Missing parameter/deleted-resource checks, keyboard, focus and announcements remain separate obligations unless explicitly added later.

Effort accounting and budget

Budget: 45 active research minutes, plus at most 10 execution minutes before a scope review. Single-agent continuous session. A monotonic clock starts after orientation, before this registration. Active research is elapsed session time minus measured blocking experiment/verification subprocess intervals; includes implementation, reading, analysis and recording. No concurrent work; no overlapping double count. Package setup is research overhead. Pause logging if interrupted. Timer cutoff is the completed analysis/verification boundary; final commit/snapshot/sync administration is excluded and reported as unmeasured overhead. Receipt-backed tokens/cost unknown; no estimate from this chat. Save the timing receipt and state clock precision/limits.

Commit this preregistration before implementation or browser execution. If a harness error needs correction, retain the first result and explain the change. Record the outcome in a separate review and append-only ledger; this plan stays as registered. Remaining work belongs to WP-0003 T01/T02 and WP-0006 T03. One cycle cannot establish any learning-rate trend or diminishing returns.