Baniloo Baniloo

July 28, 2026

The bug a clean install could catch and nothing else would

A real npm-pack smoke test on postmortem's v1.1.0 release surfaces a demo mode that silently died after six seconds, plus a README that never caught up with what had shipped

Rollout Day 1 was supposed to be paperwork — sync the README and Plan.md with what v1.1.0 actually shipped. It turned into a real bug fix, because the way I checked the docs were accurate was to actually install the package the way a stranger would.

Docs drift is invisible until you read them cold

By the time v1.1.0 shipped, Sessions 11 through 15 — the Netlify sensor, auto-start units, the mort mcp server, Telegram alerts, command polish — were all live on npm. The README and Plan.md still described every one of them as upcoming, and Plan.md had them marked (unreleased). Nobody lied; the docs just never got a pass after the release commit. That’s the ordinary failure mode of shipping fast: the code moves, the changelog moves, and the paragraph that convinces someone to npm install a tool sits there describing last month’s version. Rollout Day 1 exists specifically to catch that — read the docs the way a new user would, before telling anyone this is ready.

What a real install catches that a test suite doesn’t

The check was npm pack into a tarball, then a genuine global install from that tarball — not npm link, not running from source. Everything that matters about a CLI tool lives downstream of that boundary: setup, doctor, predict, status, mcp, autostart, the real daemon lock, the dashboard, stale-lock reclamation. All of it worked. One thing didn’t.

mort watch --demo --headless printed “ctrl+c to stop” and then quietly exited about six seconds later. Demo mode replays a canned incident through timers with no server, no database, and — critically — nothing else holding Node’s event loop open. Once the last timer fired, Node had nothing left to do and exited, which is completely correct Node behavior and completely wrong behavior for a command that just told the user it was going to keep running. A unit test exercising the demo pipeline wouldn’t have caught this; there’s nothing wrong with the pipeline logic. It’s a property of the process, visible only when you run the actual binary and watch it end early. The fix is a small one: hold an explicit heartbeat interval in headless demo mode so the process has a reason to stay alive until the user asks it to stop.

The rest of the week, written down

QUICK_PLAN.md now tracks the remaining rollout days — the parts that happen outside the repo: registry listings, launch posts, watching for the first real installs. Small, unglamorous, and exactly the kind of task that’s easy to lose track of once the release itself feels done.

Sessions 16 and 17 — the actuator framework, and the first concrete actuators that let postmortem act on an incident instead of just explaining it — are next.