4382de3a79
Pure regex/JSON, 0 LLM calls. 4 Vitest tests GREEN. Per ADR-011 + spec §6.1. Smoke run surfaces REAL drift (DONE_WITH_CONCERNS — plan B5 said «that's a real signal, document, don't fix here»): 9 plugins in ~/.claude/settings.json enabledPlugins NOT formalized by exact «name@source» string in Tooling Прил. Н: - frontend-design@claude-plugins-official (informally as #30 «Frontend Design plugin») - 8× ToB plugins @trailofbits (differential-review, audit-context- building, supply-chain-risk-auditor, insecure-defaults, sharp- edges, static-analysis, variant-analysis, agentic-actions-auditor) informally as #39 «Trail of Bits Skills» This is naming-vocabulary mismatch (Tooling uses human-readable names; settings.json uses machine names). Not architectural drift. Resolution options for follow-up: - Add machine names as «external_id» attribute to Tooling Прил. Н rows. - Add tools/.l1-watcher-aliases.txt with accepted machine→human map. Until resolved: C1 will FAIL on lefthook (C5 wiring) — addressed in C5 by adding alias mechanism OR temporarily downgrade to WARN. Also fixed CLI guard bug in observer-stop-hook.mjs (B3) and l1-watcher — old guard `import.meta.url === \`file://\${argv[1]}\`` did not match on Windows (file:/// triple-slash vs file:// double-slash + relative argv[1]). New guard: argv[1].endsWith('/<filename>.mjs'). Weekly GH Actions cron (Mon 09:00 MSK) opens issue on drift. Vitest config extended to ../tools/*.test.mjs with exclude for ruflo-* and subagent-prompt-prefix tests (pre-existing, not part of brain governance). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>