Docker Preflight Before Writing Finalize

The writing backfill article covered missing calendar days, `.writing-backfill-plan.json`, and one Forgejo push. What it assumed is that the machine running `writing:finalize-batch` can actually build. `scripts/lib/check-docker-desktop.cjs` is the gate: no Docker CLI or daemon → `SKIP_DOCKER_DOWN`, no merge, no half-published JSON.

Woodpecker cron at 09:00 and 18:00 Berlin writes the plan even when my PC is off. The Agent session that writes drafts is supposed to finalize on a healthy Docker host. Preflight is how those two clocks do not fight.

`hasDockerCli()` is `docker --version`. `isDockerDaemonUp()` is `docker info`. Missing CLI returns `docker_cli_missing`; CLI present but Desktop down returns `docker_daemon_down`. Both map to `ok: false`.

← Rafael González Albes