- SEC-12: drift-detect adds semantic invariants — negation-flip detection (a dropped
"not" now FAILS despite high char-similarity) + env must-keep patterns.
- SEC-29 (X-05): governance-check audit write fails CLOSED — an unwritable audit log
denies the action and empties the output (no unaudited output).
- SEC-30 (X-06): approval-verify records a one-time-use nonce (sha of token/sig) and
rejects replays (enforced mode / when a nonce ledger is set); dev unchanged.
- SEC-15 (low): typosquat distance<=2 with the levenshtein length-sentinel bug fixed
(no false positives); tool-exec fails closed with no timeout backend in enforced
mode; validate-tool-input now validates nested objects/arrays recursively.
Verify: new SEC suites all green via gate, run-casan4 0-FAIL, adversarial 44/44,
track-c 29/0, h5-approval 12/0, no regressions.
Plan-16 P2 remaining: infra-gated only (SEC-14/22/23/24/25/26).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
C1 (V17) action-gate.sh: gates the ACTION, not just the tool name. Outcome model
ALLOW/WARN/REQUIRE_APPROVAL/BLOCK. BLOCK on sensitive-file writes (.env, *.pem,
id_rsa, .github/workflows, .ssh, .aws/credentials, .npmrc) and destructive/
remote-exec commands (rm -rf /, curl|bash, chmod 777, git push --force);
REQUIRE_APPROVAL on dependency installs and non-local network egress (clears
only with an audited CASAN_ACTION_APPROVER). Decisions logged to action-gate.jsonl.
C2 (V18) supply-chain-gate.sh + supply-chain-scan.py: diffs package.json /
requirements.txt / pom.xml / build.gradle against a baseline (explicit or git
HEAD). BLOCK on denylisted/known-malicious packages, typosquats (edit-distance 1
to a known package), and dangerous lifecycle scripts (pre/post/install);
REQUIRE_APPROVAL on any new dependency. Emits a dep-diff report and records
which live scanners (npm audit / pip-audit / osv-scanner) are available.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>