feat(web): add navigation progress bar #115

Merged
eleith merged 1 commits from feat/navigation-progress into main 2026-11-02 13:50:17 +00:00

Summary

Closes #111.

  • Add one root-mounted, Luzzle-style progress component using native SvelteKit navigation state and Svelte motion. No dependency, global loading store or per-route wiring.
  • Retain the requested session-storage handoff: pagehide records a namespaced timestamp; a new document or persisted pageshow consumes a fresh marker once and displays a short completion cue. This is a post-load cue, not measured server/network progress. Ignore invalid, stale or future markers and tolerate unavailable storage.
  • Own the completion timer and animation frame so an old navigation cannot hide or finish a subsequent navigation's bar. Respect reduced motion, use the existing theme palette/spacing, and expose a named indeterminate progressbar without invented ARIA percentages.
  • Keep enhanced-form POST pending work outside scope. No auth, configuration, worker, shared-package, Docker, mise or CI-policy changes. Include a web patch changeset.

Validation

  • Full web coverage: 1,113 tests /79 files passed, thresholds unchanged.
  • Types: 0 errors /0 warnings. Full app formatting/ESLint and native production build passed.
  • 3 focused browser journeys passed in one run (15.0s, one worker, stop-first-failure, no retries): A's completion cannot hide/finish pending B; actual document handoff consumption plus persisted-event freshness checks; blocked storage and reduced-motion navigation on mobile.
  • Browser tests gate real data requests and advance virtual time rather than sleep. The race proof crosses the old completion deadline without spending time testing native Tween interpolation. Persisted-event coverage does not claim actual BFCache eligibility/restoration.
  • Independent code, readability and test-value reviews completed; test-only typing, clock scheduling and marker-branch findings addressed. No extra test harness or unit-DOM dependency.

Root mise.toml and pnpm-lock.yaml owner edits are excluded in full and preserved; apps/web/mise.toml is unchanged. Local checks used the installed dependency graph. No release, deployment or merge action; owner will land the PR.

## Summary Closes #111. - Add one root-mounted, Luzzle-style progress component using native SvelteKit navigation state and Svelte motion. No dependency, global loading store or per-route wiring. - Retain the requested session-storage handoff: pagehide records a namespaced timestamp; a new document or persisted pageshow consumes a fresh marker once and displays a short completion cue. This is a post-load cue, not measured server/network progress. Ignore invalid, stale or future markers and tolerate unavailable storage. - Own the completion timer and animation frame so an old navigation cannot hide or finish a subsequent navigation's bar. Respect reduced motion, use the existing theme palette/spacing, and expose a named indeterminate progressbar without invented ARIA percentages. - Keep enhanced-form POST pending work outside scope. No auth, configuration, worker, shared-package, Docker, mise or CI-policy changes. Include a web patch changeset. ## Validation - Full web coverage: **1,113 tests /79 files passed**, thresholds unchanged. - Types: **0 errors /0 warnings**. Full app formatting/ESLint and native production build passed. - **3 focused browser journeys passed** in one run (15.0s, one worker, stop-first-failure, no retries): A's completion cannot hide/finish pending B; actual document handoff consumption plus persisted-event freshness checks; blocked storage and reduced-motion navigation on mobile. - Browser tests gate real data requests and advance virtual time rather than sleep. The race proof crosses the old completion deadline without spending time testing native Tween interpolation. Persisted-event coverage does not claim actual BFCache eligibility/restoration. - Independent code, readability and test-value reviews completed; test-only typing, clock scheduling and marker-branch findings addressed. No extra test harness or unit-DOM dependency. Root mise.toml and pnpm-lock.yaml owner edits are excluded in full and preserved; apps/web/mise.toml is unchanged. Local checks used the installed dependency graph. No release, deployment or merge action; owner will land the PR.
eleith-gitea-agent Bot added 1 commit 2026-11-02 13:40:46 +00:00
feat(web): add navigation progress bar
ci/woodpecker/pr/web Pipeline was successful
ci/woodpecker/push/web Pipeline was successful
d5561bfeb2
eleith merged commit d5561bfeb2 into main 2026-11-02 13:50:17 +00:00
eleith deleted branch feat/navigation-progress 2026-11-02 13:50:17 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: eleith/when#115