Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a0cffe-206f-7323-89d3-b20ca4cf4bf9
8.8 KiB
VC-03 — Content publication
Status: drafted, editorial self-review only. Author: Codex, 2026-09-26. Synthetic brief; exploratory preparation for WP-0003 T02, not M1/M2 acceptance. Corpus: two navigation drafts introduced with this document; eight earlier hypotheses retained, with shared guidance corrections.
Fixed brief and assumptions
Mostly read-only content, shareable URLs, useful content before scripts and slow networks are fixed VC-03 requirements. For this exercise, assume a public article catalog with GET topic/page filtering and links to article identifiers. Publishing happens elsewhere; no reader writes or concurrent editing are in scope. The publisher is authoritative. Content may change between visits; immutable editions, numerical latency budgets and live update deadlines are unspecified. Offline access is not initially required. Native keyboard navigation, labels, meaningful document structure and usable error pages are required design constraints; accessibility is not yet tested. No personal data is needed in URLs. Administrative/authenticated responses must not inherit the public catalog's cache policy. Public content still needs normal output escaping and validated parameters.
Baseline narrative without the pattern catalog
Serve complete article/list documents for every public route. A filter form uses GET, and links carry the selected topic/page. Deliver text and native controls before optional scripts. Server rendering or pre-rendering can supply this; choose according to publication freshness and build/runtime constraints, which the brief leaves open. Optionally replace a region during navigation, preserving history, errors and focus. Keep full-page and fragment response caching distinct. Skip optional enhancement when it cannot justify its extra failure cases. This baseline already expresses all essential decisions; naming patterns adds no demonstrated benefit.
Decisions
| Order | Context and forces | Pattern references | Alternatives and rejection reasons | Resulting context | Evidence |
|---|---|---|---|---|---|
| 1 | Public, shareable view selection | URL-addressable State | In-memory-only filters cannot reconstruct shared selection | /articles?topic=architecture&page=2 resolves without prior tab state |
N01/N06 |
| 2 | Useful reading before scripts; slow delivery | Server Projection seed; Progressive Enhancement | Script-only shell conflicts with brief; static generation remains viable | Initial HTML contains useful text, links and GET controls | N03/N05 |
| 3 | Optional smoother transitions versus complexity | Progressive Enhancement, conditional | Native full navigation remains acceptable; no requirement forces Ajax or hydration | If added, enhancement must preserve URL/content/history coherence | N01/N03 |
| 4 | Full and partial representations share a route | Context/cache requirement, no new pattern | Mixing cache entries can break direct entry | Explicit representation selection and cache keys; or use full documents only | N02 |
N01–N06 refer to the primary-source review. Framework examples demonstrate available mechanisms; these decisions are synthesis. SvelteKit's enhanced POST actions do not implement this exercise's native GET filter; N04 is a contrasting example of why enhancement prerequisites matter.
Trace and failure recovery
- Open the filtered URL in a new tab with scripts blocked. The server validates parameters and returns a complete document for that selection. Invalid parameters have a declared normalize-or-error policy; deleted articles produce useful errors.
- Change the filter through native GET submission. The next URL and document agree. Back/reload/direct entry preserve the selection, not a promise of identical bytes.
- If enhancement is enabled, keep the previous committed URL/content coherent while fetching. On success, commit the selected view and its history entry together at the interaction level. Ignore superseded responses; that ordering alone does not prove server freshness. Restore meaningful focus and announce changed content.
- On failure before commit, preserve the old view with an accessible retry or native navigation link. If a design changes the URL earlier, it must restore it or perform full navigation on failure; a new URL over old unlabeled content is unacceptable.
- History restoration must recover the selected route even after a snapshot miss. Direct navigation always obtains full HTML. If request headers select fragments, configure Vary and representation-specific validators consistently across caches; test actual intermediary behavior. Public caching policy does not authorize caching personal content. This case has no uncertain write to replay.
Change one constraint
Add offline reading of previously visited articles; keep the public read-only scope and all other requirements unchanged. Native links and useful initial HTML alone no longer satisfy the brief. A local cache must identify available article versions, state freshness/offline limits, handle eviction and distinguish unvisited articles from failed delivery. Define whether ordinary cache eviction is acceptable before promising availability. Reconnection refresh needs a policy for replacing readable content without disrupting the current task.
This does not automatically require local write authority, a pending mutation queue or Conflict Copy: the client has no edits to reconcile. Retain addressability and native contracts, add a separately researched cache/availability contract. The current corpus cannot yet supply a supported offline-reading pattern; do not stretch Pending Synchronization to fill that gap.
Review
| Criterion | Pass / revise / unknown | Evidence and reason |
|---|---|---|
| Traceability | pass (editorial) | Each proposed decision cites documented mechanisms and declared assumptions |
| Coherence of configuration | pass (editorial) | Native path satisfies initial brief; enhancement remains conditional |
| Decision usefulness beyond baseline | unknown | Same author wrote both; baseline already contains the obligations |
| Quality constraints | revise | Focus, keyboard, slow-network behavior and cache isolation need runtime tests |
| Changed-constraint branch | revise | Identifies a real cache/availability gap; implementation/evidence not supplied |
Gaps and follow-up
WP-0003 T01/T02 owns pinned implementation selection and direct-entry, disabled-script, history-miss and representation-cache checks. Test interrupted enhancement separately from entirely absent scripts. Establish a measurable content-delivery budget before performance claims. Keep offline cache research bounded; do not add another draft merely to make the diagram complete. Independent decision-usefulness review remains open.
Prospective runtime subset — 2026-09-27
Navigation/history experiment NH01–NH06 corroborates direct/native/enhanced navigation, snapshot hit/miss recovery and full/ fragment cache selection in an authored htmx fixture. Both browsers reproduce shell loss under missing Vary. Validator checks use explicit Node requests. This strengthens the read-only trace; the case remains provisional. Keyboard/focus/announcements, late scripts, interrupted transport, invalid/deleted routes and the offline branch remain open. No performance, independent-human or decision-usefulness gate is completed.
Keyboard/feedback subset — 2026-09-27
NF01–NF06 exercises keyboard links, request failure/recovery, explicit route continuation and a held response after focus moves to persistent search. The managed policy passes its DOM obligations; raw same-ID focus retention does not itself update title or report errors in this fragment host. VC-03 stays provisional. Spoken feedback, focus visibility, delayed history/request races and offline availability remain open; no complete accessibility claim.
Competing navigation and bounded pause — 2026-09-27
NO01–NO06 show why result ownership applies to content, URL, title and feedback separately from focus ownership. Old history may overwrite newer content under a different URL; an old error may overwrite newer success feedback. The guarded latest-intent policy handles the tested schedules, including preserving committed content when the newest request fails. It is not a general router or AT validation. Pending Back-state disclosure and broader history lifecycle remain open. Thread review pauses fixture expansion; VC-03 stays provisional with independent/AT and offline gaps.