| 2 | Useful reading before scripts; slow delivery | Server Projection seed; [Progressive Enhancement](../candidates/ProgressiveEnhancement.md) | 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](../reviews/NavigationRenderingEvidence.md).
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
1. 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.
2. 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.
3. 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.
4. 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.
5. 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