config-audit/docs/v5.2.0-release-plan.md
Kjell Tore Guttormsen 157690993f release: v5.2.0 — CC 2.1.114→181 compat + skill-listing budget (SKL)
New orchestrated scanner SKL (CA-SKL-001 1,536-char listing cap, CA-SKL-002
listing-budget sum) → 13 orchestrated scanners. Five validators refreshed for
the CC 2.1.114→181 settings/hook surface (xhigh effort, MessageDisplay +
post-session events). False positives eliminated in MCP and permissions
scanners. Hermetic HOME isolation across all CLI-spawning tests.

Version sync: plugin.json 5.1.0→5.2.0, README badges (version + tests-875+),
5 stale "12→13 scanners" prose fixes, What's New + version-history rewrite,
CHANGELOG [5.2.0] entry. 875/875 tests; self-audit configGrade A, pluginGrade A,
readmeCheck.passed:true.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ter3E2JSi1Khgmuf2kady8
2026-06-18 20:37:45 +02:00

9.9 KiB
Raw Permalink Blame History

v5.2.0 Release — Execution Plan

Status: EXECUTED 2026-06-18. All edits applied, verified (875/875 tests, self-audit configGrade A / pluginGrade A / readmeCheck.passed:true), committed and tagged v5.2.0. This doc is retained as the release record. Operator chose "v5.2.0-release first, then later sessions for net-new capabilities" (2026-06-18).

Bump: 5.1.0 → 5.2.0 (minor: one new scanner + fixes, backward-compatible). 17 commits since v5.1.0 tag.


Pre-verified facts (do NOT re-derive)

  • Tests: 875/875 pass, 0 failnode --test 'tests/**/*.test.mjs' tests 875 / pass 875 / fail 0 (run 2026-06-18, 15.99s). 55 test files (was 52 at v5.1.0).
  • Scanner count = 13 orchestrated. countScannerShape in self-audit.mjs returns 13: CML, SET, HKV, RUL, MCP, IMP, CNF, TOK, CPS, DIS, COL, GAP, SKL. PLH excluded (standalone). Badge scanners-13 already correct. SKL exports scan + wired into scan-orchestrator (line 66).
  • No package.json in this plugin. Canonical version lives in .claude-plugin/plugin.json.
  • self-audit README gate (node scanners/self-audit.mjs --json --check-readme): currently passed: false, single mismatch {kind: tests, expected: 875, foundInReadme: 792}. configGrade A (96), pluginGrade A (100). Fixing the tests badge → gate passes.
  • SKL history: at v5.1.0 the badge was scanners-12 + prose "12" (consistent). The SKL feat commit (7bb2547) bumped badge 12→13 and updated docs/scanner-internals (14 prefixes) + humanizer-data (14 TRANSLATIONS), but missed the 5 README prose locations still saying "12". Fixing those is part of shipping SKL. (Version-history row for 5.0.0 at README:602 says "→ 12 deterministic scanners" — that is HISTORICAL, leave it.)
  • Push window: weekday 20:0023:00 CEST, weekends/holidays anytime. Re-check date '+%u %H:%M' immediately before push. (At plan time: Thu 20:24 → in window.)

Edit targets

1. Version pointers (bump)

File:line Find → Replace
.claude-plugin/plugin.json (the "version" field) "version": "5.1.0""version": "5.2.0"
README.md:9 badge version-5.1.0-blueversion-5.2.0-blue
README.md:15 badge (required for gate) tests-792+-brightgreentests-875+-brightgreen

2. Stale-by-SKL prose: "12" → "13" orchestrated scanners (5 exact-match edits)

Badge scanners-13 is already correct — do NOT touch the badge. Only these prose fragments:

  • README.md:1812 deterministic scanners across 10 quality areas13 deterministic scanners across 10 quality areas
  • README.md:95(12 scanners + standalone PLH)(13 scanners + standalone PLH)
  • README.md:10712 deterministic scanners verify correctness13 deterministic scanners verify correctness
  • README.md:33612 Node.js scanners that perform structural analysis13 Node.js scanners that perform structural analysis
  • README.md:477runs all 12 scanners + the standalone plugin-health scannerruns all 13 scanners + the standalone plugin-health scanner

3. README "What's New" section + TOC

  • README.md:24 TOC — - [What's New in v5.1.0](#whats-new-in-v510)- [What's New in v5.2.0](#whats-new-in-v520)
  • README.md:48100 — replace the ENTIRE "## What's New in v5.1.0" section (heading line 48 through line 100, i.e. up to but NOT including ## What Is This? at line 101) with the What's New block below. (Verify boundaries with grep -n '^## ' README.md before editing — next ## heading after What's New marks the end.)

4. README version-history table — insert new row ABOVE the **5.1.0** row (currently README:601)

Use the version-history row below.

5. CHANGELOG.md — insert the [5.2.0] block ABOVE ## [5.1.0] (currently CHANGELOG:8)

Use the CHANGELOG block below.

Leave unchanged (historical-accurate)

  • CLAUDE.md humanizer "(v5.1.0)" references (lines 65, 67) — describe when the humanizer landed.
  • docs/humanizer.md "(v5.1.0)" references.
  • README:602 (5.0.0 history row).

Open decision (operator)

  • scanners/lib/humanizer-data.mjs:2 header comment "config-audit v5.1.0" — trivial; bump to v5.2.0 for consistency OR leave. Not required for correctness. Default: leave unless operator says bump.

New content blocks

CHANGELOG block (insert above ## [5.1.0])

## [5.2.0] - 2026-06-18

### Summary
Claude Code 2.1.114→181 compatibility + skill-listing budget release. Adds a new
orchestrated scanner (SKL) for the model's skill-listing token budget, refreshes five
validators to recognize the settings/hook surface shipped across CC 2.1.114181, and
eliminates a batch of false positives surfaced by an adversarial gap-review. Scanner
internals only — no command, agent, or output-format changes.

### Added
- **`scanners/skill-listing-scanner.mjs` (SKL)** — new orchestrated deterministic scanner
  (→ 13 orchestrated scanners). `CA-SKL-001` (medium): an active skill description over the
  verified 1,536-char listing cap (CC 2.1.105) is silently truncated in the model's skill
  listing. `CA-SKL-002` (low): the summed length of all active descriptions (each counted up
  to the cap) over the listing budget (~2% of context, CC 2.1.32) — anchored on a conservative
  200k window with a note that the budget scales 5× on 1M-context models; leads with the
  measured sum, an estimate not telemetry. HOME-scoped (all user + plugin skills). Remediation
  surfaces `disableBundledSkills` / `skillOverrides` / description trimming.

### Changed
- **settings-validator** — accepts CC 2.1.114181 settings keys and `xhigh` reasoning effort.
- **hook-validator** — recognizes `MessageDisplay` and post-session hook events (28 events).
- **claude-md-linter** — CLAUDE.md length reframed from a HIGH "adherence cliff" to a MEDIUM
  token-cost finding (model-neutral, context-window aware).
- **tokens** — stale "Opus 4.7" framing refreshed to model-neutral with an Opus 4.8 anchor.
- **Knowledge corpus** — refreshed to the Opus 4.8 era (CC 2.1.114→181).

### Fixed
- **mcp-config-validator** — no longer flags auto-injected or POSIX-style env vars; removed an
  invented `trust` field that does not exist in the MCP config schema.
- **permissions (DIS/CNF)** — dead-allow detection and conflict matching are now parameter-aware,
  removing false positives on parameterized permission rules.

### Internal
- **Hermetic test isolation** — byte/snapshot tests and all 12 CLI-spawning test files now isolate
  `HOME` via the `hermetic-home` helper, closing a leak class where the real `~/.claude` skills and
  config bled into fixture-scoped runs (notably SKL, which is HOME-scoped regardless of
  `includeGlobal`). Adversarially verified via a devil's-advocate gap-review pass.

### Test count
- 792 → 875 tests across 52 → 55 test files.

### Verification
- 875/875 tests pass (`node --test 'tests/**/*.test.mjs'`).
- `node scanners/self-audit.mjs --json --check-readme``configGrade: A` (96),
  `pluginGrade: A` (100), `readmeCheck.passed: true`.
- README badge updated: `tests-792+``tests-875+`.

What's New block (replaces README:48100)

## What's New in v5.2.0

**Claude Code 2.1.114→181 compatibility + skill-listing budget.** A new orchestrated
scanner, **SKL**, checks the model's skill-listing token budget: `CA-SKL-001` flags any
active skill description over the 1,536-char listing cap (silently truncated by CC 2.1.105),
and `CA-SKL-002` flags when the summed descriptions exceed the listing budget (~2% of context).
Five validators were refreshed for the settings and hook surface that shipped across
CC 2.1.114181 (new settings keys, `xhigh` effort, `MessageDisplay` + post-session hook
events), and an adversarial gap-review eliminated a batch of false positives in the MCP and
permissions scanners. → **13 orchestrated deterministic scanners** (+ standalone plugin-health).

Version-history row (insert above the **5.1.0** row at README:601)

| **5.2.0** | 2026-06-18 | CC 2.1.114→181 compatibility + skill-listing budget. New orchestrated scanner **SKL** (`CA-SKL-001` 1,536-char listing cap, `CA-SKL-002` listing-budget sum) → 13 orchestrated scanners. Five validators refreshed for CC 2.1.114181 settings/hook surface (`xhigh` effort, `MessageDisplay` + post-session events, 28 hook events). False positives eliminated in MCP (auto-injected/POSIX env vars, invented `trust` field) and permissions (param-aware DIS/CNF). Hermetic HOME isolation across all CLI-spawning tests. 875 tests |

Verification (after edits, before commit)

  1. node scanners/self-audit.mjs --json --check-readmereadmeCheck.passed: true, mismatches: [], configGrade A, pluginGrade A.
  2. grep -nc "12 deterministic\|(12 scanners +\|12 Node.js scanners\|all 12 scanners" README.md0 (no stale current-state prose; the 5.0.0 history row at :602 is allowed and uses "→ 12 deterministic scanners" which these patterns do not match).
  3. node --test 'tests/**/*.test.mjs' → 875/875, no snapshot drift.
  4. git diff tests/snapshots/ → empty (contamination check; grep for sadhguru/vegnorm/linkedin/ms-ai if any snapshot changed).
  5. grep version .claude-plugin/plugin.json5.2.0; README badges show version-5.2.0 + tests-875+.

Commit / tag / push

  1. git add -A (CHANGELOG.md, README.md, .claude-plugin/plugin.json [+ humanizer-data.mjs if operator approved]).
  2. Commit: release: v5.2.0 — CC 2.1.114→181 compat + skill-listing budget (SKL) + standard Co-Authored-By/Session trailers.
  3. git tag v5.2.0.
  4. Re-check push window date '+%u %H:%M'. In window (weekday 20:0023:00 / weekend / holiday) → git push origin main && git push origin v5.2.0. Out of window → hold both, tell operator when window opens.
  5. After: overwrite STATE.md (release done), and the net-new-capabilities track becomes the next open item.