v0.1.0-alpha.50
·
233 commits
to main
since this release
fix: thread titles + URL routing on web [alpha.50]
Two bugs the user spotted:
1. **Sidebar stuck at "New chat" forever.** Regression I caused
in alpha.49. onTurnLanded (which derives the title from the
user's first prompt + bumps updatedAt) was gated behind the
runId guard, so abandoned threads — even when their canonical
assistant turn finished server-side — never got their title
updated. Split the post-send work into two:
- Per-thread state (title, mode-tracking, balance) fires
regardless of which thread the UI is showing — that data
belongs to the thread that finished, not to the active
one.
- UI updates (the usage pill) stay gated on runId because
the pill belongs to the chat the user is looking at.
2. **No URL on web.** Refreshing qcode.qlaud.ai dropped the
active thread; deep links didn't work. Wired browser-history
sync:
- parseThreadIdFromPath() reads /<uuid> from the URL on
boot, falls back to cached-first-thread, then null.
- replaceState on every currentId change keeps the URL in
sync with no entries piling up in history.
- popstate listener feeds back/forward navigation into
currentId so browser nav works as a thread-switcher.
Plus public/_redirects with a SPA-fallback rule so visiting
/<threadId> directly hits the React app instead of the
Cloudflare Pages 404 page.
UUID-shape regex on the parser so future routes (/auth, /sign-in,
etc.) won't be mis-interpreted as thread ids.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>