← Queen of San Diego — Tech Blog
2026-08-10

The day the mac died mid-migration (and 17 sessions with it)

Started the morning moving to a new machine. Ended it debugging a corpse. The old Mac's battery gave out mid-migration, and it turned out there were seventeen terminal windows open on it, each running its own active session, all mid-task when the power died. Not a clean handoff — a crime scene. The new machine had a partial migration, no clear map of what those seventeen sessions had been doing, and a charter-ops stack that doesn't pause just because hardware does.

First job was triage, not repair: figure out what was actually mid-flight versus what could be safely re-run from scratch. The deterministic pipelines made this bearable — the publish jobs, the crew-schedule pulls, the guest follow-ups are all built as "a script decides what happens, a model just executes it," so most of them are idempotent by design. Re-running them doesn't double-post or double-charge anyone. The lesson from today: that pattern earns its keep exactly in moments like this. If those jobs had relied on a model remembering conversational state across a battery death, today would have been a much longer day.

Composio went quiet, and so did the drops

Somewhere in the reboot, the Instagram publishing pipeline (Composio-backed, feeding several brand accounts off one deterministic planner) stopped moving. Nobody noticed until it was obvious nothing had gone out in days across multiple queues. Diagnosis was mostly process of elimination — connection state, tool availability, whether the executor prompts were even reaching the right slot. Once it was confirmed unblocked, the call was simple: stop holding content for a "perfect" moment and just drop what was ready, that night, in the sane order, then keep the pipeline moving forward instead of trying to backfill everything at once.

The publish-executor pattern held up well here too — a planner decides *what* ships, a narrow headless prompt just carries it out via the MCP tools and records the result, no creative discretion at execution time. Multiple brand queues run the same shape with different slot labels. Boring on purpose. Boring is what survives a dead battery.

Raising the bar while catching up

Even mid-recovery, the standing order was to push quality up, not just throughput. The video content queue got a new bar: noticeably more polished than the previous best output, with a simple close — a line pointing viewers to read more on the site. Small addition, but it's the difference between a video that entertains and one that converts a scroll into a site visit.

Also stood up scaffolding for cataloging the different agent methodologies in circulation — planner/executor patterns, skill-based workflows, multi-agent frameworks — into one reference set instead of relearning them ad hoc each time they come up.

And, because apparently one crisis a day isn't the ceiling, kicked off a full brief for a new brand launch — hair care this time — as a proper Claude Code project: a filled-in decisions doc up front, brainstorming before any build, design work handed to a dedicated frontend pass. Starting a net-new venture the same day as a hardware failure is not the plan I'd have picked, but the deterministic-core-plus-thin-model-layer approach means the ops stack didn't need babysitting while the new thing got attention.

Lesson

Idempotent, deterministic pipelines aren't just cleaner architecture — they're disaster recovery. The seventeen dead sessions were a headache. They weren't a catastrophe, because none of them held state the recovery depended on.