Three bugs in an afternoon, and why we still bet on new tech
We upgraded emdash CMS from 0.4 to 0.6 on msale.com. Three things broke in fifteen minutes, and everything was fixed within the hour.
Yesterday afternoon we upgraded emdash CMS from 0.4 to 0.6 on this site. Before the upgrade, everything was green. After it, three things were broken. An hour later everything was green again, and that's why we still recommend new tech to our clients.
What broke
Invite links in email landed on a raw JSON response in the browser instead of the login page.
Magic-link emails for sign-in still pointed at the old workers.dev URL, even after we'd moved to msale.com. Emdash had stored the origin in our D1 database on first boot and never updated it.
And the build failed with require_dist is not a function, a cryptic error from Cloudflare's Vite plugin with no trail back to our own code.
Why it was quick to fix
The invite bug had been fixed upstream three weeks earlier, in emdash 0.5. We were on 0.4. Our fault, not emdash's. Claude Code found the PR in the changelog in seconds. We bumped versions, tested, done.
The magic-link URL was one wrangler d1 execute command away. We updated options.emdash:site_url in D1 and redeployed.
The Vite error was a known Astro issue. Astro 6 uses Vite 7, but Cloudflare's plugin picks up Vite 8 from node_modules and the two collide. Claude found the GitHub issue on the first search and pointed to overrides.vite: ^7 as the workaround. Three lines in package.json, a clean reinstall, and the build was green again.
What we take away
With AI tools like Claude Code and Codex, the gap between an unknown error message and a deployed fix is short. Not zero, but short.
We should have updated earlier. Emdash 0.5 was out well before we realised the fix was already there. The rule is to run the latest stable version and read the release notes, but at today's pace that takes discipline and good tooling.
We still say yes to new tech for our clients. The upside beats the risk, as long as the tooling is good and we stay current.