v1.0.4 — throwaway-path noise (oversized tmp/ warn) + enforcement-boundary invariant
⚠️ Correction: this release originally also advertised the pasted-tool-listing / phantom-deliverable fix. It does not ship in an installed 1.0.4 — that fix went into the tree without a version bump, so/plugin updatesaw1.0.4 == 1.0.4and delivered nothing. It is released properly in v1.0.5. What 1.0.4 actually contains is below.
Two throwaway-path fixes from real sessions. 502 self-checks · red-team 14/14.
The oversized-file warn fired every turn on a throwaway tmp/ blob
A 3 MB untracked tmp/reconcile/diff.json — never touched, never committed — produced "untracked file too large to fully scan for secrets" on every single Stop for a whole session. untrackedAdded() skipped only the changed-file set and .claude/groundtruth/, not the throwaway paths (tmp/temp/scratch/…) that excludedScanPath() already knows about; the oversized list bypassed the downstream dropExcludedFiles() filter and leaked straight into findings. Now excluded at the source of the untracked loop — a throwaway file is neither read nor surfaced, and excluded files consume zero scan budget, so more real content gets scanned before the cap.
Not a security change: an excluded path's content was already never scanned via the Stop path, so removing the vestigial warn takes away no coverage.
Enforcement-boundary invariant pinned
The Stop path suppresses tmp/ noise, but the merge gate must not: pre-commit (--pre-commit) and CI (--diff-range) pass the raw diff to analyze(), so a committed tmp/ secret still blocks. That now rests on a silent invariant, so a regression test asserts analyze() still flags a secret on a tmp/ path — it fails loudly if a future refactor unifies the exclusion and takes committed throwaway-path secrets dark at the boundary.
Full symptom → root-cause → fix → regression-test in FIXES.md (v1.0.4).