test(llm-security): add red AV-surface probe for the v8.1.0 Defender plan

tests/av-surface.test.mjs walks git ls-files and fails on four surfaces a
clone or the plugin cache puts on a user's disk: (a) own SIG payloads
(webshell/reverse_shell/cryptominer) in a runnable file type, (b) base64
blobs decoding to a shell command, (c) Tag/zero-width/bidi carriers in text
files outside the conformance corpus, (d) known payload trees.

Red on purpose (order S0): it is the failing test for S1-S3. Measured on
this tree: a=3 b=9 (8 files) c=5 d=5. Chosen definitions are documented in
the file header: .mjs/.js/.cjs/.json and scanners/commons/** are outside (a)
so the untouchable signature tables stay out of a gate that must reach
zero; binaries are outside (c) because decoding PNG/WOFF2 as UTF-8 yields
the codepoints by chance.

PLAN.md is local-only, so .gitignore now names it. No production code, no
fixtures, no signature tables touched; golden baseline unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-22 12:39:26 +02:00
commit c7bfd2cfd0
Signed by: ktg
SSH key fingerprint: SHA256:JakMjO6FTBBzN0Bhfj9saOoEjaFxlSdYuZQQpM/lF9Q
2 changed files with 167 additions and 0 deletions

3
.gitignore vendored
View file

@ -24,6 +24,9 @@ HANDOFF-FINDINGS.local.md
# Untracked 2026-08-01 (org-ops finding) after being tracked since project start;
# git history keeps the old commits, this only stops future ones.
STATE.md
# PLAN.md is local-only for the same reason (destination, open questions,
# what NOT to build) — it never reaches the public remote.
PLAN.md
REMEMBER.md
ROADMAP.md
TODO.md