Shared PB-realtime resync component. The hidden-@get + EventSource snippet existed in 4 copies (todo, basecoat skin, notes, whiteboard) and had already drifted. internal/components/PbRealtimeResync (button id + fragment + topic params, golden-tested) replaces all four; todo's doc-version watcher split out separately. Callers keep their ids/urls, so existing page assertions pass unchanged.
AG-UI-compatible event envelope (internal/genui). Run/text-message framing subset, byte-compatible with the reference Go SDK by test, fail-closed both directions, emitted over the existing SSE Hub. No new transport, no new dependency; tool/state events arrive with the component catalog, not before.
Stale-tab reload on deploy./health stamps X-Gogogo-Build (config.BuildTag()); authed pages compare on load/foreground via session.js and reload once on mismatch. Inert in dev, single-binary deploys only. Covered by a real-binary smoke assertion (red-proofed).
Transport preset + matrix.advise --need "broadcast transport" surfaces realtime-transport (runtime switches, nothing to trim); docs/async-layers.md carries the queryable layer×switch table.
Fixed
Bare 500s now log + return safe messages.fail() in todo handlers (14 sites migrated, including a real err.Error() leak in suggest-enqueue); ruleguard RawInternalString + LeakedErrText500* block regressions repo-wide (400 recovery reasons deliberately out of scope). .templ/.js/api/* URLs are pinned to registered routes by TestTemplAPIURLsHaveRoutes (+ pre-commit hook).
SSE Hub drains on shutdown (SSEHub.Close() wired into Queue.Close()); relay marshal failures in notes/whiteboard now log.
datastar-lint phantom script regions (v0.13.2) + version pin test (v0.13.3).<script inside // comments no longer opens a region; TestFallbackVersionTracksChangelog ties the fallback constant to the release. Pin moved to v0.13.3 (CI + skill doc).
Production image boots again (0.44.0 crash-loop). The flat-stack image inherited scratch + a static binary, but tursogo loads its Rust library via dlopen — no loader, no boot (Dynamic loading not supported, /health 502). deploy/Dockerfile.prod now runs on Alpine (musl loader + libgcc_s), builds CGO_ENABLED=1 -tags musl without -static, and deploy/docker-compose.prod.yml sets TURSO_GO_CACHE_DIR on the data volume. scripts/smoke-prod-image.sh boots the final image and asserts /health 200 in CI, closing the pipeline gap that let an unbootable image reach production.