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
164 lines
9.9 KiB
Markdown
164 lines
9.9 KiB
Markdown
# 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 fail** — `node --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:00–23: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-blue` → `version-5.2.0-blue` |
|
||
| `README.md:15` badge **(required for gate)** | `tests-792+-brightgreen` → `tests-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:18` — `12 deterministic scanners across 10 quality areas` → `13 deterministic scanners across 10 quality areas`
|
||
- `README.md:95` — `(12 scanners + standalone PLH)` → `(13 scanners + standalone PLH)`
|
||
- `README.md:107` — `12 deterministic scanners verify correctness` → `13 deterministic scanners verify correctness`
|
||
- `README.md:336` — `12 Node.js scanners that perform structural analysis` → `13 Node.js scanners that perform structural analysis`
|
||
- `README.md:477` — `runs all 12 scanners + the standalone plugin-health scanner` → `runs 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:48–100` — 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]`)
|
||
|
||
```markdown
|
||
## [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.114–181, 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.114–181 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:48–100)
|
||
|
||
```markdown
|
||
## 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.114–181 (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)
|
||
|
||
```markdown
|
||
| **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.114–181 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-readme` → `readmeCheck.passed: true`, `mismatches: []`, configGrade A, pluginGrade A.
|
||
2. `grep -nc "12 deterministic\|(12 scanners +\|12 Node.js scanners\|all 12 scanners" README.md` → `0` (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.json` → `5.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:00–23: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.
|