== C1: hermes attestation generate -> verify -> tamper -> drift == generate rc=0 (attestation 1355 bytes, fingerprints: 2) verify(untampered) rc=0 CRITICAL: WATCHED_FILE_DRIFT - /tmp/clawsec-fake-hermes3/skills/demo-skill/SKILL.md fingerprint changed CRITICAL: diff severity threshold exceeded (highest=critical, threshold=high) verify(tampered watched file, fail-on-severity high) rc=2 == C2: signed advisory feed verification, positive then tampered == Signature valid: advisories/feed.json feed verify(positive) rc=0 Signature INVALID: advisories/feed.json feed verify(tampered) rc=1 == C3: soul-guardian lifecycle (init -> approve -> tamper -> check/restore) == init rc=0 approve rc=0 check(tampered) rc=2 "event": "SOUL_GUARDIAN_DRIFT" SOUL.md line 2 after check: be helpful. == C4: soul-guardian committed unit tests == OK: soul-guardian minimal tests passed test_soul_guardian.py rc=0 OK: install_launchd_plist default state-dir tests passed test_install_launchd_plist.py rc=0 == C5: clawsec-scanner SAST: documented invocation vs foreign cwd == sast(from skill dir) rc=0 bytes= 1766 [semgrep] semgrep command not found, skipping JavaScript/TypeScript SAST [bandit] bandit command not found, skipping Python SAST sast(foreign cwd, absolute path) rc=0 bytes= 0 (silent no-op?)