diff --git a/docs/cc-2.1.x-gap-matrix.md b/docs/cc-2.1.x-gap-matrix.md index c13314f..2fbf102 100644 --- a/docs/cc-2.1.x-gap-matrix.md +++ b/docs/cc-2.1.x-gap-matrix.md @@ -10,6 +10,41 @@ > `.mcp.json`-dokumentasjon FØR endring — agenten kan ta feil i begge retninger. Manuelt forhåndsverifisert av > hovedkontekst: `xhigh` (settings-validator.mjs:66), manglende hook-events, 4.7-hardkoding, feature-evolution v2.1.111. +## v5.3.0 reconciliation (2026-06-19 — supersedes stale rows below) + +This matrix was the **v5.2.0** plan. Verified against HEAD (`9b828fa`) during the v5.3.0 Session A +audit. **Read this block first** — individual rows below predate the v5.2.0 + 8-commit work. + +**CLOSED in v5.2.0** (entire HIGH-priority false-positive cluster — verified in current code): +- `settings-validator.mjs` — all 11 keys + `xhigh` are in `KNOWN_KEYS`/`VALID_EFFORT_LEVELS` + (incl. `footerLinksRegexes`, `agent`, `parentSettingsBehavior`, `sandbox`, `enforceAvailableModels`, + `fallbackModel`, `disableBundledSkills`, `pluginSuggestionMarketplaces`, `requiredMin/MaxVersion`, + `allowAllClaudeAiMcps`, `wheelScrollAccelerationEnabled`). All `settings.json`/`model lineup`/ + `permissions` now-wrong settings rows → CLOSED. +- `hook-validator.mjs` — 28 events incl. `MessageDisplay` + `post-session`; knowledge says 28. CLOSED. +- `mcp-config-validator.mjs` — POSIX/auto-injected env allowlisted; `trust` removed. CLOSED. +- `claude-md-linter.mjs` — HIGH@500 → MEDIUM token-cost reframe, context-window aware. CLOSED. +- DIS/CNF — parameter-aware identity (Agent(model:…)/WebFetch(domain:…) no longer collapsed). CLOSED. + +**CLOSED by the 8 unreleased commits (v5.3.0 candidates):** +- disableBundledSkills recommendation (row 167) → `dfe9049`. +- permissions `'*'` deny-all + allow non-MCP glob (row 138) → `03949c6`. +- CLAUDE.md char budget on top of the reframe → `b0bf8c5` (new `CA-CML`). +- DIS forbidden-param check (rows 137/139, beyond matrix) → `d678765`. +- PLH namespace collision (search-first; **NOT** the row-129 shadow-folder check) → `c6c5f17`. +- SKL aggregate skill-listing budget (row 169) shipped in v5.2.0 (`CA-SKL-002`); `0a631e3` extracted + the shared `context-window.mjs`. + +**STILL OPEN → all DEFER to v5.4 (none are bugs/false-positives; all M-effort enhancements):** +row 129 PLH shadow-folder · row 141 acceptEdits-prompts-on-config-writes · row 140 Read-deny-hides- +Glob/Grep + Windows path · row 144 autoMode.hard_deny structure · row 130 PLH `skills:`-array · +rows 104/131 nested `.claude` closest-wins detection. Plus the L-priority `update-knowledge` rows +(env vars, model nuance, hook-output fields, plugin/skill doc) → rolling knowledge maintenance. + +**v5.3.0 ship-list = EMPTY** (operator GO 2026-06-19, "Release-only"). 3 knowledge-backing entries +(`disableBundledSkills`, 40k char-budget, forbidden-param — absent from corpus, grep-verified) +fold into the v5.3.0 docs step. See `docs/v5.3.0-release-plan.md` § "v5.3.0 scope decision". + ## Executive summary config-audits kunnskapsbase og scanner-kjent-sett er frosset ved ~v2.1.111; CC har shippet til v2.1.181 (Opus 4.8-æra). Av 130 verifiserte rader er det mest akutte en **klynge aktive false positives** — gyldig, dokumentert konfig flagges som feil i dag: diff --git a/docs/v5.3.0-release-plan.md b/docs/v5.3.0-release-plan.md index 4bb321d..607d8f6 100644 --- a/docs/v5.3.0-release-plan.md +++ b/docs/v5.3.0-release-plan.md @@ -131,3 +131,110 @@ pluginGrade ≥ A, readmeCheck.passed; contamination-grep + gitleaks clean on an - New CC-gap features beyond Session A's approved ship-list. - Any scanner refactor not required by an approved feature. - Marketplace-wide changes beyond the config-audit catalog entry. + +--- + +## v5.3.0 scope decision (Session A output, 2026-06-19) + +### Operator GO (recorded verbatim) +> **"Release-only, ship-list tom"** — Session B SKIP; knowledge-backing (disableBundledSkills, +> 40k char-budget, forbidden-param) folded into Session C; open M-gaps → v5.4 backlog. + +**Ship-list = EMPTY.** Session B is skipped entirely. v5.3.0 is a docs + knowledge + release +of the work already on `main`. No new feature build. + +### Reconciliation result (matrix vs. current code) +The gap-matrix was the **v5.2.0** plan. Verified against HEAD: the entire HIGH-priority +false-positive cluster is **already CLOSED** — `settings-validator` (all 11 keys + `xhigh`), +`hook-validator` (28 events incl. `MessageDisplay`/`post-session`), `mcp-config-validator` +(POSIX/auto-injected env + `trust` removed), `claude-md-linter` (HIGH→MEDIUM reframe), DIS/CNF +(param-aware). The 8 unreleased commits add incrementally on top. **No active false positive or +behavior bug remains unshipped.** Full row-by-row verdicts appended to `cc-2.1.x-gap-matrix.md`. + +### Still-open gaps → verdicts (all defer; none are bugs) +| Gap (matrix row) | Effort | Verdict | +|---|---|---| +| PLH shadow-folder: plugin.json key shadows default component folder (129) | M | defer-5.4 | +| permissions: acceptEdits prompts on shell-startup/build-config writes (141) | M | defer-5.4 | +| permissions: Read-deny hides Glob/Grep; Windows backslash/case path (140) | M | defer-5.4 | +| settings: autoMode.hard_deny nested-structure validation (144) | M | defer-5.4 | +| PLH: validate `skills:` array entries are dirs within plugin (130) | M | defer-5.4 | +| CLAUDE.md: nested `.claude` closest-wins conflict detection (104, 131) | M | defer-5.4 | +| Knowledge L-rows: env vars, model-lineup nuance, hook-output fields, plugin/skill doc rows | S | defer (rolling knowledge maintenance) | + +### Draft CHANGELOG narrative (all 9 commits `1576909..HEAD` accounted for) + +**Added** +- **DIS forbidden-param rules** (`d678765`) — flags `Tool(param:value)` whose key is the tool's + own canonicalizing field (`command`/`file_path`/`path`/`notebook_path`/`url`); CC ignores these + and emits a startup warning. Severity by intent: **deny/ask = false security (medium)**, + **allow = dead config (low)**. Valid forms (`Bash(npm:*)`, `WebFetch(domain:host)`, + `Agent(model:opus)`) never flagged. Predicate `forbiddenParamRule` in `permission-rules.mjs`. +- **DIS ineffective allow wildcards + `Tool(*)` deny-all** (`03949c6`) — flags unanchored + tool-name globs in `permissions.allow` (`*`, `B*`, `mcp__*`) that CC silently skips (low); + treats `Tool(*)` as deny-all (`Bash(*)` ≡ `Bash`) so a bare allow killed by it is reported + as dead config. Valid `mcp____*` never flagged. +- **CML context-window-scaled char budget** (`b0bf8c5`) — new `CA-CML` finding mirroring CC's + startup warning *"Large CLAUDE.md will impact performance (X chars > 40.0k)"*. Anchors on the + conservative 200k window; discloses the relaxed ~200,000-char figure at 1M context. Severity + **medium** (token cost). Char-keyed, complementary to the 200/500-line checks. Window constants + in shared `scanners/lib/context-window.mjs`. +- **PLH plugin namespace collision** (`c6c5f17`) — flags 2+ discovered plugins declaring the same + `name` in `plugin.json`. Namespaces collapse; CC picks an undocumented winner; the loser's + commands/skills/agents go silently unreachable. Severity **medium** (dead config), + `category: 'plugin-hygiene'`, COL-shaped `details.namespaces`. Keys on declared `name`, not + `basename(dir)`; name-less plugins excluded. +- **feature-gap `disableBundledSkills` lever** (`dfe9049`) — conditional recommendation to set + `disableBundledSkills` when the active skill listing is over budget; remediation companion to + SKL `CA-SKL-002`. + +**Changed** +- **PLH cross-plugin command-name overlap: HIGH → LOW** (`0874188`) — reframed from "conflict" to + "ambiguity". Commands are namespaced (`/name:command`) so both stay reachable; only a same-`name` + plugin collision loses components (covered by the new namespace-collision finding). Now + group-first (one finding per command name listing every namespace), COL-shaped + `details.namespaces`. The old HIGH `Cross-plugin command name conflict` finding **and its + humanizer entry are removed**. Scoring impact: configs with cross-plugin command overlap score + slightly higher. **Not a `--json`-shape break** — no test/consumer asserted the old HIGH. + +**Fixed** +- **README scanner table** (`96743ec`) — added the missing SKL row (12 → 13 rows); the prose table + lagged the badge/self-audit count (the `--check-readme` gate is number-only and didn't catch it). + +**Internal** +- **Extract skill-listing budget to shared lib** (`0a631e3`) — `scanners/lib/context-window.mjs` + as single source of truth for the 200k/1M window constants, re-exported by + `skill-listing-budget.mjs` and consumed by the new CML char-budget finding. + +**Excluded from changelog:** `9b828fa` `docs(plan): v5.3.0 multi-session release plan [skip-docs]` +— the plan meta-commit itself, not a product change. (9 commits total = 8 mapped + 1 excluded.) + +### What's New in v5.3.0 (draft prose) +> **v5.3.0 — permission-rule & plugin-hygiene hardening.** Five additive scanner findings extend +> the permission, CLAUDE.md, and plugin surfaces: DIS now catches forbidden-parameter rules and +> ineffective allow-wildcards that Claude Code silently ignores; CML mirrors CC's own 40.0k-char +> "large CLAUDE.md" startup warning, context-window scaled; PLH flags two plugins that declare the +> same name (one silently shadows the other); and feature-gap recommends `disableBundledSkills` +> when the skill listing is over budget. The cross-plugin command-name finding is reframed from a +> HIGH conflict to a LOW ambiguity to match Claude Code's namespacing. Scanner count stays **13** +> (all extend existing scanners). `--json`/`--raw` remain byte-stable. + +### Version & non-breaking confirmation +- **5.3.0** (minor). Additive findings + one severity downgrade (PLH HIGH→LOW). No envelope/JSON + shape change; `json-backcompat` + `raw-backcompat` + SC-5 snapshot green at HEAD. The PLH change + alters a severity VALUE, not the shape. **Document the downgrade under Changed, not Breaking.** + +### Knowledge-touch list (apply in Session C step 4) +Three short backing entries for the v5.3.0 features (rows currently absent from the corpus — +verified by grep, 0 files each). Pure docs, no scanner/test impact: +1. `knowledge/prompt-cache-patterns.md` — `disableBundledSkills` as a token-efficiency lever + (hides bundled-skill descriptions from the system prompt). (matrix row 167) +2. `knowledge/claude-code-capabilities.md` *or* `prompt-cache-patterns.md` — the CC 40.0k-char + "Large CLAUDE.md will impact performance" startup warning + 2.1.169 context-window scaling + (backs the new CML finding). +3. `knowledge/claude-code-capabilities.md` — `Tool(param:value)` permission semantics: param + matching is deny/ask-only, and the canonicalizing-field rules CC ignores (backs DIS + forbidden-param). (matrix rows 137, 139) + +Everything else in the matrix (env-var rows, model-lineup nuance, hook-output fields, plugin/skill +doc rows) → **defer** to rolling knowledge maintenance; not required for 5.3.0 correctness.