v1.4.0 — Atomic navigation & owner experience
What's new
v1.4.0 continues the navigation and ownership work after v1.3.0. Article transitions are now committed atomically in a single paint frame, and the blog gains a secure GitHub-based owner session with a local Markdown editor (production writes stay closed until OAuth is configured).
Highlights
Atomic article navigation
- Uncached articles go through a 2-concurrency intent prefetch queue (pointer / focus / touch); idle prefetch covers only the first two posts.
- URL, article DOM, layout switch and scroll reset land in one browser paint frame — no premature URL write, no scroll-to-top while waiting, no blank intermediate state.
- On failure the old page, URL and scroll position are kept with a non-blocking retry notice. Back / Forward restore prior scroll positions without duplicate history entries.
- Verified under injected 1.5s slow network: URL + DOM +
scrollY=0appeared in the same 2368ms commit frame.
Owner session and editor
- GitHub login with numeric user id, signed HttpOnly session cookie, OAuth state + PKCE, origin check and CSRF token; DEV bypass requires an explicit flag plus a real loopback client.
- Local Markdown editor with image upload (magic-byte check, 5MB cap, content-hash dedupe), optimistic-concurrency saves and soft archiving.
- Production Git writes fail closed (
production_git_provider_unconfigured) until a GitHub OAuth App is configured; no external writes in this release. - Non-owner GitHub accounts get no edit entry; logout now asks for confirmation.
Navbar and motion refresh
- Search moved next to the "More" pill on the category bar; the navbar keeps only essential controls.
- Sakura toggle returned to the Display Settings effects tab.
- Decorative motion (pet, tag sphere, atmosphere) pauses during navigation; pet playback moved to
requestAnimationFramewith distance-aware roaming. - Clock side digits and footer secondary links were de-emphasized; dark-mode Bot outline gained contrast; tag sphere idle speed up slightly.
Verification
astro check: 0 errors / 0 warnings (285 files);tsc --noEmit: clean.- Gates: article navigation 18/18, UI & motion 10/10, community 9/9, owner static 9 + live API 12 all PASS.
- EdgeOne build: 85 pages, 28 Pagefind pages, 8127 indexed terms, exit 0.