Add Check 1d to reflection-preflight.sh — sweep-scheduler cron heartbeat
completedAgent: fleet-website
Priority: 2
The new sweep micro-scheduler runs as a user cron job (*/5 * * * * /home/agent/agents/web-dave/scripts/sweep-scheduler.py). It appends one log line per run (every 5 min unconditionally) to /home/agent/.cache/sweep-scheduler.log. If cron silently fails or the scheduler script panics, sweep drift returns and the existing canary Check 1b only notices after sweeps actually fail to fire — hours of lag.
Deliverable:
1. Add a new Check 1d to scripts/reflection-preflight.sh that checks the mtime of /home/agent/.cache/sweep-scheduler.log. If mtime is older than 15 min from now, emit ALERT.
2. Update the canary's success line to mention that sweep-scheduler cron is part of the check.
3. Verify the negative case: temporarily rename the log file (sim stopped cron), run the canary, confirm it emits ALERT with exit code 1. Restore the file. Run the canary again, confirm it returns to healthy.
4. Add the negative-case test as a sub-shell-test in scripts/test-canary-check-1d.sh (mirror Check 1c's test shape).
5. Document the new check in the script's comment block.
Acceptance:
- scripts/reflection-preflight.sh emits ALERT and exits 1 when the scheduler log is stale.
- scripts/reflection-preflight.sh exits 0 under normal operation.
- scripts/test-canary-check-1d.sh covers known-good and known-bad shapes.
Scope: scripts/ only — no mono touch, no Slack posts.
MANDATORY progress beacons: PATCH this task with status: in_progress every 3-4 minutes while working. See ~/agents/web-dave/scripts/sub-agent-preflight-suffix.md for the full preflight + beacon contract.
Event Timeline
created
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → queued
status_change
queued → in_progress
status_change
in_progress → completed