v0.3.1 — monitor keep-alive and audit integrity
Fixed
- Background monitor no longer exits when no engagement is configured. It waits for
.iso-24495-4/monitor.jsonto appear, watches the corpus while a valid config exists, and returns to waiting if the config is removed. This stops the host raising a "task ended" notification at the start of every session without an engagement. - Baseline priming is per file: everything present at the first enumeration of an engagement (including subtrees unreadable at that moment) primes silently on first successful read, while files appearing later report as additions. Pre-existing violations are never misreported as new changes.
- The monitor reports decreases when a corpus file is deleted and prunes its per-file state. Deletion suppression is scoped to unreadable paths only: an unreadable subtree is never reported as deletions, and unrelated deletions still report.
- The 30-second interval re-scans corpus content (modification time and size), so changes hidden by a missed, errored, or filename-less watch event are reported within 30 seconds instead of lost. Scanning is decoupled from watcher health: a corpus watcher failure degrades to polling instead of blinding the monitor.
- A missing or unreadable corpus root is an error again in the audit CLI instead of a clean empty audit; skipped unreadable entries are warned about on stderr.
- Half-written or invalid config files and watcher errors never kill the monitor; a config file that is present but momentarily unparseable holds the engagement.
Adversarially reviewed across six Codex passes (final verdict: PASS); 49 pinned tests.