config-audit/scanners
Kjell Tore Guttormsen 3d6ddb273c fix(scanners): the fix engine downgraded a near-miss on xhigh to high (C2)
`fix-engine.mjs` carried its own copy of the valid `effortLevel` list, and
that copy had gone stale on `xhigh` (CC 2.1.154's top Opus tier) while
`settings-validator.mjs` had all five. The nearest-match "fix" therefore
corrected `xhig` — and `XHIGH` — to `high`: the tool silently changed the
tier the user asked for, in the one code path whose whole job is to write
the corrected value back to disk.

Fixed by sharing the validator's table instead of aligning the copy, so the
two cannot drift again. Guard asserts the blanket invariant — a one-character
near-miss on EVERY valid tier corrects back to that same tier — rather than
pinning the one level that happened to be missing; verified red against the
original stale array.

Suite 1488/0. Frozen v5.0.0 snapshots untouched.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014P6Rh59Mtj4uYrdYMCYZJE
2026-08-09 21:29:00 +02:00
..
lib fix(scanners): a target path that does not exist is an error, not a grade 2026-08-09 21:18:18 +02:00
agent-listing-scanner.mjs feat(scanner): add AGT per-agent description bloat advisory (v5.9 B1-rest) 2026-06-23 16:27:24 +02:00
cache-prefix-scanner.mjs fix(acr): CPS ignores fenced/inline code + CC-stable path vars (M-BUG-7) 2026-06-26 12:45:14 +02:00
campaign-cli.mjs fix(commands): stop answering questions the caller did not ask 2026-08-01 21:26:39 +02:00
campaign-export-cli.mjs fix(commands): stop answering questions the caller did not ask 2026-08-01 21:26:39 +02:00
campaign-write-cli.mjs fix(commands): stop answering questions the caller did not ask 2026-08-01 21:26:39 +02:00
claude-md-linter.mjs feat(skl,cml): --context-window calibration, advisory when unknown (v5.11 B8) [skip-docs] 2026-06-23 21:44:52 +02:00
collision-scanner.mjs feat(config-audit): cross-plugin collision scanner COL (v5 N6) [skip-docs] 2026-05-01 07:46:15 +02:00
conflict-detector.mjs fix(acr): conflict-detector segregates plugin-bundled configs (M-BUG-2) 2026-06-26 17:24:08 +02:00
disabled-in-schema-scanner.mjs feat(dis): flag forbidden-param permission rules CC silently ignores 2026-06-19 14:04:25 +02:00
drift-cli.mjs fix(scanners): a target path that does not exist is an error, not a grade 2026-08-09 21:18:18 +02:00
feature-gap-scanner.mjs fix(acr): feature-gap scopes presence checks to authored config + reads settings cascade (M-BUG-13) 2026-06-30 10:09:10 +02:00
fix-cli.mjs fix(scanners): a target path that does not exist is an error, not a grade 2026-08-09 21:18:18 +02:00
fix-engine.mjs fix(scanners): the fix engine downgraded a near-miss on xhigh to high (C2) 2026-08-09 21:29:00 +02:00
hook-validator.mjs feat(hooks): additionalContext injection advisory + filter-before lever (v5.10 B5) [skip-docs] 2026-06-23 20:28:33 +02:00
import-resolver.mjs feat(ultraplan-local): v1.6.0 — /ultraresearch-local deep research command 2026-04-08 08:58:35 +02:00
knowledge-refresh-cli.mjs fix(commands): stop answering questions the caller did not ask 2026-08-01 21:26:39 +02:00
manifest.mjs fix(commands): stop answering questions the caller did not ask 2026-08-01 21:26:39 +02:00
mcp-config-validator.mjs feat(tokens): MCP tool-schema deferral check + CLI-over-MCP lever (v5.10 B4) 2026-06-23 19:59:14 +02:00
optimization-lens-scanner.mjs feat(opt): optimization lens CA-OPT-001 (procedure→skill) — v5.7 Fase 1 Chunk 2a 2026-06-20 23:10:03 +02:00
optimize-lens-cli.mjs fix(commands): stop answering questions the caller did not ask 2026-08-01 21:26:39 +02:00
output-style-scanner.mjs feat(ost): v5.6 C — output-style scanner (CA-OST, count 13→14) 2026-06-20 21:02:44 +02:00
plugin-health-scanner.mjs fix(scanners): a target path that does not exist is an error, not a grade 2026-08-09 21:18:18 +02:00
posture.mjs fix(scanners): a target path that does not exist is an error, not a grade 2026-08-09 21:18:18 +02:00
rollback-engine.mjs fix(rollback): restore the backup path contract the engine and the commands disagreed on 2026-07-31 17:23:30 +02:00
rules-validator.mjs fix(rul): globToRegex corrupts mid-pattern /**/ globs (M-BUG-19) 2026-07-17 03:53:06 +02:00
scan-orchestrator.mjs fix(scanners): a target path that does not exist is an error, not a grade 2026-08-09 21:18:18 +02:00
self-audit.mjs fix(scanners): stop discarding our own stdout when it is a pipe 2026-07-31 21:40:15 +02:00
settings-validator.mjs fix(scanners): the fix engine downgraded a near-miss on xhigh to high (C2) 2026-08-09 21:29:00 +02:00
skill-listing-scanner.mjs feat(skl,cml): --context-window calibration, advisory when unknown (v5.11 B8) [skip-docs] 2026-06-23 21:44:52 +02:00
token-hotspots-cli.mjs fix(commands): stop answering questions the caller did not ask 2026-08-01 21:26:39 +02:00
token-hotspots.mjs fix(acr): token estimator discounts block-level HTML comments (M-BUG-6) 2026-06-26 14:29:24 +02:00
whats-active.mjs fix(commands): stop answering questions the caller did not ask 2026-08-01 21:26:39 +02:00