Skip to content

Six job_monitor alerts, three independent root causes — all fixed and verified via job-monitor --no-alert → All jobs healthy.

  1. \TaTasks\WSL Keepalive didn’t exist — documented as “installed 2026-08-12” but never actually created (or later deleted). WSL2 VM now tears itself down overnight, silently killing pre-login Sunday cron jobs (virus_scan, send_status_report, asset_history_update).
  2. DiskSpaceCheck/MonthlyDriveCleanup configured “Logon Mode: Interactive only” — Task Scheduler doesn’t flag this as failed (nothing “fails” from its point of view); the task just silently no-ops if nobody’s logged on at the exact trigger minute. \TaTasks\Daily Backup (100% reliable) was already Interactive/Background — the working config to match.
  3. verify_live_monorepo (daily cron) — pnpm: not found. A shared PATH= line in the crontab (added for my_backup’s uv-based jobs) didn’t include pnpm’s real location (/home/ta/.local/share/pnpm).
  • Crontab PATH= line updated to include /home/ta/.local/share/pnpm.
  • \TaTasks\WSL Keepalive recreated via schtasks /create (needed a genuinely elevated shell — see Gotchas).
  • DiskSpaceCheck/MonthlyDriveCleanup switched to “Run whether user is logged on or not” + “Run with highest privileges” (took two attempts — first attempt’s dialog looked right but silently didn’t save).
  • job_monitor’s schedules.py gained a required_triggers mechanism: a label there must exist as a live, enabled trigger regardless of heartbeat. Closes the structural gap that let the keepalive task’s own disappearance go undetected for 5+ weeks (\TaTasks\WSL Keepalive was in ignore_triggers, which reconcile.py never re-checks). Documented in Core/IT/Utils/Custom/job_monitor.md.

Gotchas (promoted to GlobalDevRules.md §3.9)

Section titled “Gotchas (promoted to GlobalDevRules.md §3.9)”
  • schtasks /create needs genuine elevation — /query working from a non-elevated token proves nothing about /create (Access is denied, even from an Administrators-group account with a UAC-filtered token).
  • PowerShell doesn’t parse \" as an escaped quote (that’s cmd.exe syntax) — use single quotes to wrap a value containing literal ".
  • Task Scheduler’s “Run whether user is logged on or not” can silently fail to save if the password prompt after OK is cancelled/blank — the dialog looks correct even when unsaved; verify via schtasks /query /v → Logon Mode, not by trusting the GUI.

~/ai-config/AGENTS.md referenced a ~/.claude/settings.json autoMode.allow key that doesn’t exist in the live schema (only permissions.allow/deny, Bash already unrestricted). What actually gates risky Bash actions is a separate runtime safety classifier — no settings.json edit controls it. Corrected in commit cf771fe.

  • [my_backup](/core/it/projects/my_backup/) (portal)
  • Core/IT/Utils/Custom/job_monitor.md (monitor docs, current)
  • Full round-by-round history: git log -p on this file’s original path (SDC/IT/Tasks/my_backup-job-monitors-stale.md)