diff --git a/changelog.mdx b/changelog.mdx
index 637df89..e7f5e21 100644
--- a/changelog.mdx
+++ b/changelog.mdx
@@ -18,6 +18,26 @@ export const STAGE_RATE_M65 = "$0.10";
usezombie is in **stealth-mode testing** and pre-production. APIs and agent behavior may change between releases without long deprecation windows. Email [usezombie@agentmail.to](mailto:usezombie@agentmail.to) if you want a hand calibrating a zombie or to join as a design partner.
+
+ ## Dashboard error voice, sign-in card lifted, install/save races fixed
+
+ Every "Failed to X" fallback in the dashboard is replaced with operator-first language keyed on backend error codes. The sign-in card no longer disappears into the page background. Two install/save races that left you on the wrong URL after a `router.push` are fixed.
+
+ ## What's new
+
+ - **`presentError({errorCode, message, action})` is the single entry point for dashboard error rendering.** Curated `UZ-XXX-NNN` codes map to a title + body the operator can act on — `UZ-AUTH-401` reads "Your session expired. Sign in again to keep going." instead of "Not authenticated"; `UZ-ZMB-001` reads "We couldn't find that zombie. It may have already been deleted — refresh the list." instead of "Internal Server Error". Eight codes ship today and the helper grows organically as the dashboard surfaces new ones. Useless server `"Failed to …"` messages are detected and replaced rather than concatenated.
+ - **Sign-in card lifted from `--surface-1` to `--surface-2`** on the auth route, with `--border-strong` on the edge. At `--surface-1` the luminance delta against the page background was 3 units — close to invisible. The card now reads as a card.
+
+ ## Bug fixes
+
+ - **`/zombies/new` install** — `InstallZombieForm.tsx` no longer issues `router.refresh()` after `router.push(/zombies/{id})`. The `force-dynamic` detail route re-resolves on commit; the manual refresh was racing the URL commit and intermittently leaving you on `/zombies/new` with a stale form state. Same fix applied to `ZombieConfig.tsx` for the save-then-navigate path on the detail page.
+ - **`tooltip` test flake** — restoring vitest's default `exclude` patterns stops the runner from following the `@usezombie/design-system` workspace symlink and executing its tests without their `test-setup.ts`. The "`Invalid Chai property: toBeInTheDocument`" intermittent on `bun run test` is gone.
+
+ ## CLI
+
+ No `zombiectl` shape changes.
+
+
## Authenticated dashboard e2e ungated, runs on every dev + prod deploy