5 Content Lanes, One Watchdog: How I Stopped Wondering If My Automation Still Runs A developer built a watchdog shell script to monitor five content generation lanes and restart any that fail, replacing daily manual log checks with a done-marker pattern. The script, content-watchdog.sh, checks for completion files and relaunches incomplete tasks, ensuring automation reliability and freeing the developer from verification overhead. Every morning I used to open my logs and ask the same question: did it actually run last night? The scripts always reported success. The articles were sometimes 186 bytes of an error message. This is how I replaced that daily anxiety with a single shell script. When I first built a content generation pipeline, the first problem I hit was this: I thought it was running, but it had actually stopped. launchd fires the script every morning, but it starts before the network is up and exits silently. The API times out with no response, yet a log file still exists. Claude's token budget runs dry, and the error message flows straight into the output file, leaving the body at zero bytes. All of these failures leave behind nothing but the fact that "the script ran." What does it mean to build an environment rather than do work? My answer was a design principle: prove completion by the existence of a file. Not what the script wrote to the log — only whether ~/.claude/logs/.article-daily-done-20260710 exists is treated as truth. That's the essence of the done-marker pattern. content-watchdog.sh is what happens when you extend that idea across all five content lanes. It gets invoked multiple times a day and does one simple job: check the done-markers for every lane, and restart only the ones that are missing. It doesn't break precisely because it's simple. Automation gets stuck for operational reasons more often than technical ones. If you design on the assumption that "it worked yesterday, so it'll work today," it quietly dies on the morning the Wifi isn't connected, at midnight when the battery is at 3%, at the end of the month when the budget runs out. Having a watchdog freed me from the nagging worry that "it should still be running today." The reason I can keep 10 iOS apps going in parallel and hold ¥1.2M/month in revenue is that the time spent on verification is as close to zero as it gets. Here's the relationship between the watchdog and the individual lane scripts. launchd 複数スロット │ └─→ content-watchdog.sh sweep モード │ ├─ acquire lock mkdir 競合ロック │ └─ ~/.claude/locks/content-watchdog.lockd/ │ ├─ for lane in article note maker series ameba │ │ │ ├─ done lane done-marker / .done ファイルを確認 │ │ │ └─ 未完了なら run capped 1800 bash