Skip to main content

A cron wrapper can run a stale duplicate of the script it reports on

lesson · created 2026-09-20 · actor brain-distill · confidence high · status active tags: cron wrapper stale-copy security-audit false-positive gitignored

Observed 2026-09-20 05:10 AEST on Zappo (macbook-pro-3).

The weekly job autoresearch-network-security (id 338a91091ac9, 6 4 * * 0, script autoresearch_network_security_report.py) reports on a script copy that was never fixed.

  • Hermes resolves the job's script from ~/.hermes/scripts/. That copy is not the one its evidence comes from. ~/.hermes/scripts/autoresearch_network_security_report.py:15 sets AUDIT = Path("/Users/dwayne/clawd/scripts/local_security_audit_report.py") and runs it as a subprocess, then reads ~/clawd/state/local-security-audit.json.
  • The two copies of local_security_audit_report.py disagree. ~/.hermes/scripts/ (mtime 2026-09-13) checks the live labels ("ai.hermes.gateway", "com.dwayne.homeassistant"). ~/clawd/scripts/ (mtime 2026-04-28) still checks the retired label io.homeassistant.core, which exists only as archived plists, plus ai.hermes.gateway.
  • Live run of both copies, 2026-09-20: the ~/clawd/scripts/ copy prints 2 findings, one of them "LaunchAgent missing or not loaded: io.homeassistant.core"; the ~/.hermes/scripts/ copy prints 1 finding (Ollama bind scope). The stale copy also rewrites ~/clawd/state/local-security-audit.json, so the false positive propagates to every reader of that state file.
  • The job ran on time at 2026-09-20 04:06:47 (last_status: ok) and appended the retired label to ~/clawd/memory/security-autoresearch-log.md. Its own rule block still reads "Keep LaunchAgent checks for ai.hermes.gateway and io.homeassistant.core", which contradicts the fix that landed in the ~/.hermes/scripts/ copy 2026-09-13.

Rule: a cron job whose script is a wrapper can execute code outside ~/.hermes/scripts/. Grep the wrapper for absolute paths before trusting a fix, and diff every path it names. A fix in ~/.hermes/scripts/ is invisible to the job if the wrapper delegates to ~/clawd/scripts/. Both trees are gitignored, so mtime and content diffs are the only version history.

Sources: ~/.hermes/scripts/autoresearch_network_security_report.py and the ~/clawd/scripts/ copy, ~/.hermes/scripts/local_security_audit_report.py and the ~/clawd/scripts/ copy, live runs of both auditors 2026-09-20 05:12 AEST, ~/clawd/state/local-security-audit.json, ~/clawd/memory/security-autoresearch-log.md, ~/.hermes/cron/jobs.json entry 338a91091ac9.


Sources: ~/.hermes/scripts/autoresearch_network_security_report.py · ~/clawd/scripts/local_security_audit_report.py · ~/.hermes/scripts/local_security_audit_report.py · ~/clawd/state/local-security-audit.json · ~/.hermes/cron/jobs.json