css-install skips npm ci on warm checkouts — guards the install with a node_modules presence check, so make css / make css-check no longer reinstall Tailwind v4 + DaisyUI + Playwright from scratch every run. Fresh clones (or a forced make css-install) still do a clean npm ci.
DagNats test engine store trimmed — internal/dagnats boots its embedded engine with MaxStoreBytes: 256 << 20 (256 MiB) instead of 1 GiB. The onboarding workflow persists almost nothing; the smaller store boots the engine lighter, which helps when several packages run their engines under -p 1.
Added
make test-fast — the tight TDD loop. Keeps -p 1 (DagNats engine stability) but drops -race, the dominant cost of the full gate (~5min → ~1min). Use for red/green iteration; run make test / make ci-local before committing.
Fixed
Landing page (/) hero text contrast in dark mode — the pre-CTA text (.landing-tagline / .landing-about) used a hardcoded oklch(0.32 0.02 250) that only read on a light background. Replaced with DaisyUI's theme-aware var(--color-base-content), so the text now has good contrast in both light and dark themes. Swapped the "Built to be useful" tagline + about paragraphs for the single canonical line (_Go full-stack template. Single binary, no dependencies. Database & Auth. Reactive UI. Background jobs. Offline-first. Real-time multi-user. Durable workflows. Desktop & Android capable._).
Config (/config) Read-only banner contrast — the banner keeps its light callout background in dark mode, so its text now stays near-black (oklch(0.2 0.02 250)) and remains readable instead of inheriting the light base-content used on dark pages. .config-env / .config-not-set now use theme-aware var(--color-base-content) for correct contrast in both themes.
CI smoke test — the browser smoke test navigated to /todos, which is not a registered route and fell through to the landing page, so the offline todo queue exercise could never find the create-form input and timed out. Corrected the exercised route to /todo (the real route); CI now goes green.
Presence SSE handler data race — PresenceSSEHandler flushed the http.ResponseWriter from the NATS subscription callback goroutine, racing with net/http's own response finalisation under go test -race and breaking the Deploy gate (flaky WARNING: DATA RACE in internal/collab). Presence events now flow through a buffered channel so every write/flush happens in the request goroutine; the callback only forwards bytes. internal/collab tests are race-clean.