diff --git a/docs/cc-2.1.x-changelog-delta.md b/docs/cc-2.1.x-changelog-delta.md new file mode 100644 index 0000000..0eb7fec --- /dev/null +++ b/docs/cc-2.1.x-changelog-delta.md @@ -0,0 +1,111 @@ +# Claude Code config-surface delta — v2.1.114 → v2.1.181 (DRAFT) + +> **Status: DRAFT.** Produced by claude-code-guide research agent 2026-06-18 from the official +> changelog. Treated as a checklist — **each row is independently re-verified per-surface in Fase 2** +> (workflow `config-audit-cc-gap`) against https://raw.githubusercontent.com/anthropics/claude-code/main/CHANGELOG.md +> before any action. Items below the 2.1.114 floor (e.g. 2.1.105) are kept for the token-management +> thread (Fase 4) but are out of the primary window. + +**Current latest:** v2.1.181 · **Window:** 2.1.114 → 2.1.181 + +## 1. settings.json / settings.local.json +- 2.1.181 `sandbox.allowAppleEvents` (macOS opt-in) — HIGH +- 2.1.181 env `CLAUDE_CLIENT_PRESENCE_FILE` (suppress mobile notifications) — HIGH +- 2.1.175 `enforceAvailableModels` (managed, constrains default model) — HIGH +- 2.1.176 `footerLinksRegexes` (footer badges) — MED +- 2.1.174 `wheelScrollAccelerationEnabled` — LOW +- 2.1.169 `disableBundledSkills` — HIGH +- 2.1.166 `fallbackModel` (chain up to 3) — HIGH +- 2.1.163 managed `requiredMinimumVersion`, `requiredMaximumVersion` — HIGH +- 2.1.161 env `OTEL_RESOURCE_ATTRIBUTES` — MED +- 2.1.154 `agent` (run main thread as named subagent) — HIGH +- 2.1.154 `fastModePerSessionOptIn` — HIGH +- 2.1.153 `skipLfs` (Git plugin sources) — MED +- 2.1.149 managed `allowAllClaudeAiMcps` — HIGH +- 2.1.143 `worktree.bgIsolation: 'none'` — HIGH +- 2.1.141 env `CLAUDE_CODE_PLUGIN_PREFER_HTTPS`, `ANTHROPIC_WORKSPACE_ID` — MED/HIGH +- 2.1.133 managed `parentSettingsBehavior`, `policyHelper` — HIGH +- 2.1.129 `skillOverrides` (per-skill visibility) — HIGH + +## 2. CLAUDE.md / memory +- 2.1.169 `--safe-mode` disables customizations (CLAUDE.md not loaded) — MED +- 2.1.157 plugins in `.claude/skills` auto-load; "closest .claude/ wins" precedence — HIGH +- 2.1.178 nested `.claude/skills` directory loading — MED + +## 3. Hooks +- 2.1.178 new matcher syntax `Tool(param:value)` — HIGH +- 2.1.172 OTEL `model` attribute in hook output context — MED +- 2.1.169 new event `post-session` (self-hosted runners) — HIGH +- 2.1.163 `SubagentStop` supports `additionalContext` return — HIGH +- 2.1.157 hook "args: string[]" exec form (no shell wrap) — HIGH +- 2.1.152 new event `MessageDisplay` — HIGH +- 2.1.145 hook input fields `background_tasks`, `session_crons` — HIGH +- 2.1.141 hook output field `terminalSequence` — HIGH +- 2.1.139 hook condition "if" syntax — HIGH + +## 4. MCP (.mcp.json) +- 2.1.153 `skipLfs` for Git-based sources — MED +- 2.1.149 managed `allowAllClaudeAiMcps` (auto-approve claude.ai connectors) — HIGH +- 2.1.141 env `CLAUDE_CODE_PLUGIN_PREFER_HTTPS` (transport) — MED +- (format stdio/SSE/HTTP, scopes local/project/user, OAuth: stable in window) + +## 5. Plugins & marketplace +- 2.1.178 "closest .claude/" precedence; nested `.claude/skills` — HIGH +- 2.1.157 plugins auto-load from `.claude/skills/`; `claude plugin init` — HIGH/MED +- 2.1.154 plugin `defaultEnabled: false` manifest field — HIGH +- 2.1.149 managed `pluginSuggestionMarketplaces` — MED +- 2.1.143 plugin dependency enforcement (disable/enable) — MED +- 2.1.142 root-level `SKILL.md` plugin surfacing — MED +- 2.1.128 `--plugin-dir ./x.zip` + `--plugin-url` (below window but note) — HIGH + +## 6. Skills +- 2.1.178 nested `.claude/skills` directory loading — HIGH +- 2.1.163 `\$` escape for literal `$` in descriptions — MED +- 2.1.152 frontmatter `Skill` type indicator + `disallowed-tools`; `/reload-skills` — HIGH +- 2.1.142 root-level `SKILL.md` — MED +- (below window, Fase 4) 2.1.105 `skillListingBudgetFraction`, `maxSkillDescriptionChars` + +## 7. Subagents / agents +- 2.1.178 "closest .claude/" precedence for agent conflicts — HIGH +- 2.1.172 nested sub-agents (5-level depth limit) — HIGH +- 2.1.157 `subagent_type` case/separator-insensitive; `/agents` discovery — MED +- 2.1.154 settings `agent` key; plugin `defaultEnabled` applies to agents — HIGH +- 2.1.143 agent spawning in auto mode — MED + +## 8. Slash commands +- 2.1.147 `/simplify` → `/code-review` rename — LOW +- 2.1.152 `/code-review --fix` — LOW +- 2.1.139 `/goal`, `/scroll-speed` new commands — LOW +- (frontmatter argument-hint/allowed-tools/model + namespacing: stable) + +## 9. Permissions +- 2.1.178 `Tool(param:value)` parameter-level matching — HIGH +- 2.1.166 glob pattern support in deny rule tool-name position — HIGH +- 2.1.154 auto mode hard-deny rules — HIGH +- 2.1.162 WebFetch precedence fixes — MED +- 2.1.160 single-file grep satisfies read-before-edit — MED +- (allow/deny/ask arrays: stable) + +## 10. Model lineup +- 2.1.154 **Opus 4.8** new default; `/effort xhigh` new effort level — HIGH +- 2.1.158 auto mode on Bedrock/Vertex/Foundry for Opus 4.7/4.8 — HIGH +- 2.1.170 **Fable 5** (Mythos-class) introduced — HIGH +- 2.1.173 Fable 5 name normalization (`[1m]` suffix) — HIGH +- 2.1.142 fast mode default Opus 4.6 → 4.7 — HIGH +- settings model keys: `model`, `availableModels`, `enforceAvailableModels`, `fallbackModel`, `effortLevel` (now incl. `xhigh`) + +## 11. Output styles / statusline / background / managed / sandbox +- 2.1.181 `sandbox.allowAppleEvents` — HIGH +- 2.1.176 `footerLinksRegexes`; `language` key — MED +- 2.1.169 `--safe-mode`; env `CLAUDE_CLIENT_PRESENCE_FILE` — HIGH +- 2.1.166 env `MAX_THINKING_TOKENS=0` — MED +- 2.1.153 statusline env `COLUMNS`, `LINES` — MED +- 2.1.143 `worktree.bgIsolation` — HIGH +- 2.1.141 hook `terminalSequence`; background agent permission-mode preservation — HIGH/MED +- 2.1.140 settings symlink hot-reload — MED +- 2.1.133 managed `parentSettingsBehavior`, `policyHelper` — HIGH +- 2.1.128 env `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` — MED + +## Sources +- Official changelog: https://raw.githubusercontent.com/anthropics/claude-code/main/CHANGELOG.md +- What's new: https://code.claude.com/docs/en/whats-new · Settings: https://code.claude.com/docs/en/settings · Plugins: https://code.claude.com/docs/en/plugins diff --git a/docs/cc-2.1.x-gap-matrix.md b/docs/cc-2.1.x-gap-matrix.md new file mode 100644 index 0000000..78b7019 --- /dev/null +++ b/docs/cc-2.1.x-gap-matrix.md @@ -0,0 +1,188 @@ +# Gap-matrise — Claude Code 2.1.114→181 vs config-audit-dekning + +**Generert:** 2026-06-18 · **Metode:** workflow `config-audit-cc-gap` (12 surface-verifikatorer + syntese) · **Scope:** kun `config-audit/` + +> **Dekningsstatus:** 12/12 surfaces verifisert (130 + 32 = 162 rader). Re-run `config-audit-cc-gap-rerun` +> (task `wyk5istx7`) fullførte subagents/agents, token management, slash commands. Se «Surfaces 10–12» nederst. +> Re-run fanget også versjonsfeil i draft-korpuset — se «Draft-korreksjoner». + +> **Verifiseringsplikt:** Rader merket UNVERIFIED, og **særlig MCP `trust`-feltet**, må verifiseres mot offisiell +> `.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. + +## 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: + +- **`settings-validator.mjs`** avviser `xhigh` og flagger `sandbox`, `fallbackModel`, `enforceAvailableModels`, `disableBundledSkills`, `pluginSuggestionMarketplaces` + 5 til som «unknown». +- **`mcp-config-validator.mjs`** flagger `${CLAUDE_PROJECT_DIR}` og POSIX `${var%pattern}` (CC fikset dette i 2.1.142). Dessuten: `trust`-feltet ser ut til å være **oppfunnet/uverifisert** — gir en medium på hver normal `.mcp.json`. +- **`disabled-in-schema-scanner.mjs`** kollapser param-kvalifiserte permission-regler (`Agent(model:opus)` deny + `Agent(model:sonnet)` allow) → feil «dead config». +- **`claude-md-linter.mjs`** gir HIGH ved 500 linjer med «significantly reduce adherence» — motsagt av CC (2.1.169 skalerer terskel etter kontekstvindu) og av pluginens egen knowledge. +- **`hook-validator.mjs`** mangler `MessageDisplay` (2.1.152) + `post-session` (2.1.169) → flagger gyldige hooks som ukjente. + +Resten er stort sett L-prioritets knowledge-oppdateringer (env vars, modell-lineup inkl. Fable 5, doc-nyanser) uten scanner-impact. De fleste fiksene er S-effort kjent-sett/terskel-edits; en håndfull (DIS param-bevissthet, nye PLH/permissions-checks) er M. + +## Anbefalt release +**v5.2.0** — endringssettet domineres av additive kjent-sett-utvidelser, terskel/ordlyd-fikser og knowledge-oppdateringer. `--json` og `--raw` forblir byte-stabile; false-positive-fiksene *fjerner* funn, endrer ikke envelope-skjemaet. Kun MCP `trust`-demoteringen endrer eksisterende output materielt (ikke-breaking kvalitetsfiks). v6.0.0 reserveres for fremtidig humanizer/envelope-skjemaendring. + +## Voyage-eskalering: **NEI** +Netto-nytt scanner-arbeid (DIS param-bevissthet, PLH shadow-folder-check, permissions deny-all/glob, disableBundledSkills-anbefaling) er en håndfull uavhengige M-poster med klare specs og eksisterende fixture-mønstre — ikke en stor/usikker greenfield-build. Vanlig TDD per scanner holder. Eskalér kun hvis permissions-param-matchingen viser seg å trenge et delt rule-parsing-refactor på tvers av conflict-detector + DIS + settings-validator. + +## False positives (dagens bugs — verdict = now-wrong) + +| Tittel | Fil | Fiks (kort) | +|---|---|---| +| `effortLevel: xhigh` avvist | `settings-validator.mjs` | Legg `xhigh` i `VALID_EFFORT_LEVELS`. IKKE legg til `ultracode` (slash-alias, ikke settings-verdi) | +| `sandbox`-blokk «unknown» | `settings-validator.mjs` | Legg `sandbox` i `KNOWN_KEYS` (top-level er triggeren) | +| `fallbackModel` «unknown» | `settings-validator.mjs` | Legg i `KNOWN_KEYS`; verdi er string ELLER array(≤3) — ikke single-type TYPE_CHECK | +| `enforceAvailableModels` «unknown» | `settings-validator.mjs` | Legg i `KNOWN_KEYS` (managed) | +| `disableBundledSkills` «unknown» | `settings-validator.mjs` | `KNOWN_KEYS` + boolean TYPE_CHECK | +| `pluginSuggestionMarketplaces` «unknown» | `settings-validator.mjs` | `KNOWN_KEYS` (managed, array) | +| `requiredMin/MaximumVersion` «unknown» | `settings-validator.mjs` | `KNOWN_KEYS` (managed) | +| `allowAllClaudeAiMcps` «unknown» | `settings-validator.mjs` | `KNOWN_KEYS` (managed, boolean) | +| `footerLinksRegexes` «unknown» | `settings-validator.mjs` | `KNOWN_KEYS` (array) | +| `wheelScrollAccelerationEnabled` «unknown» | `settings-validator.mjs` | `KNOWN_KEYS` + boolean | +| `parentSettingsBehavior` «unknown» | `settings-validator.mjs` | `KNOWN_KEYS` (enum first-wins\|merge) | +| MCP `${CLAUDE_PROJECT_DIR}` «unreferenced» | `mcp-config-validator.mjs` | Allowlist auto-injiserte runtime-env-vars | +| MCP POSIX `${var%pattern}` «missing env» | `mcp-config-validator.mjs` | Begrens env-sjekk til bart `${IDENTIFIER}`; skip POSIX-operatorer | +| DIS kollapser `Agent(model:…)` deny/allow | `disabled-in-schema-scanner.mjs` | Gjør identitet param-bevisst (`bareTool()` :29-33) | +| DIS kollapser `WebFetch(domain:…)` | `disabled-in-schema-scanner.mjs` | Samme rotårsak — behandle domain:/param: som distinkt | +| `claude-md-linter` HIGH@500 + «reduce adherence» | `claude-md-linter.mjs` | Skaler terskel etter kontekstvindu / fjern absolutt HIGH; reframe til cache-prefix (CPS) | +| hook `MessageDisplay` «unknown event» | `hook-validator.mjs` | Legg i `VALID_EVENTS` + knowledge | +| hook `post-session` «unknown» | `hook-validator.mjs` | Legg i `VALID_EVENTS` (kebab, ≠ SessionEnd) | +| stale «26 total» hook-count | `hook-validator.mjs:137` + `hook-events-reference.md:3` | 26 → 28 i takt med de to nye | +| MCP `trust` oppfunnet/enforced (**VERIFISER FØRST**) | `mcp-config-validator.mjs` | Hvis feltet ikke finnes i offisiell schema: demote/fjern CA-MCP-001 + koordiner på tvers av 5 knowledge/humanizer-filer | +| `feature-evolution.md`/`capabilities.md` frosset v2.1.111 | `knowledge/*` | Opus 4.8 default + Fable 5; `/simplify`→`/code-review` | + +## Quick wins (S-effort, høy verdi) +1. **`settings-validator.mjs`:** +11 gyldige nøkler i `KNOWN_KEYS` + `xhigh` i `VALID_EFFORT_LEVELS` (fix-false-positive). +2. **`hook-validator.mjs`:** +`MessageDisplay` +`post-session` til `VALID_EVENTS`; 26→28. +3. **`mcp-config-validator.mjs`:** begrens env-sjekk til bart `${IDENTIFIER}`; allowlist `CLAUDE_PROJECT_DIR`. +4. **knowledge-refresh:** `feature-evolution.md`/`capabilities.md` → Opus 4.8 default, Fable 5, `/effort xhigh`, `/simplify`→`/code-review`, lean system prompt. +5. **`hook-events-reference.md`:** dokumenter `additionalContext`, `reloadSkills`/`sessionTitle`, `args[]`-exec, `terminalSequence`, `CLAUDE_CODE_SESSION_ID`. +6. **skills:** +`disallowed-tools` i frontmatter-kjent-sett. +7. **plugins:** +`defaultEnabled`, `.claude/skills` auto-load, `claude plugin init`, root-SKILL.md, `allowAllClaudeAiMcps` i knowledge. +8. **env:** +window-env-vars i `configuration-best-practices.md`. +9. **rett draft-feil** i `docs/cc-2.1.x-changelog-delta.md` (skipLfs/HTTPS mis-filed under MCP; `Tool(param:value)` er permissions, ikke hooks). + +## Større poster (M-effort) +| Tittel | Surface | Begrunnelse | +|---|---|---| +| DIS (+conflict-detector) param/domain-bevisst regel-identitet | permissions | `bareTool()`-kollaps gir ekte false positives nå som CC har param-matching (2.1.178) + domain-regler (2.1.172). conflict-detector.mjs:156 deler blindsonen | +| Skaler CLAUDE.md-lengdeterskel etter kontekstvindu | CLAUDE.md/memory | CC sluttet å flagge lange filer på 1M-modeller (2.1.169); krever modell-kontekst-deteksjon + tekst-rework + snapshot-tester | +| Ny PLH: advarsel når plugin.json-nøkkel skygger default-mappe | plugins | Speiler CCs egen 2.1.139/140-advarsel; ekte config-fallgruve | +| Nye permissions-checks: `*`-deny = deny-all; ikke-MCP-glob i allow / ukjent tool i deny | permissions | CC avviser/varsler ved startup (2.1.166) | +| feature-gap/posture: `disableBundledSkills` som token-effektivitets-lever | skills/tokens | Skjuler bundled-skill-descriptions fra system-prompt — ekte token-saver tokens-scanneren kan anbefale | +| PLH-paritet med `claude plugin validate`: valider `skills:`-array | plugins | Lav prioritet; PLH parser ikke `skills:`-arrays i dag | + +## Full matrise (9/12 surfaces) + +| surface | cc change | versions | verdict | action | target file | priority | effort | +|---|---|---|---|---|---|---|---| +| settings.json | effortLevel gains 'xhigh' tier | 2.1.154 | now-wrong | fix-false-positive | scanners/settings-validator.mjs | H | S | +| settings.json | sandbox.* block (+ allowAppleEvents) valid top-level key | ~2.1.77-83; 2.1.181 | now-wrong | fix-false-positive | scanners/settings-validator.mjs | H | S | +| settings.json | enforceAvailableModels managed setting | 2.1.175 | now-wrong | extend-scanner-known-set | scanners/settings-validator.mjs | H | S | +| settings.json | fallbackModel (string or up-to-3 array) | 2.1.166 | now-wrong | extend-scanner-known-set | scanners/settings-validator.mjs | H | S | +| settings.json | disableBundledSkills setting | 2.1.169 | now-wrong | extend-scanner-known-set | scanners/settings-validator.mjs | H | S | +| settings.json | requiredMinimumVersion / requiredMaximumVersion | 2.1.163 | now-wrong | extend-scanner-known-set | scanners/settings-validator.mjs | M | S | +| settings.json | allowAllClaudeAiMcps managed setting | 2.1.149 | now-wrong | extend-scanner-known-set | scanners/settings-validator.mjs | M | S | +| settings.json | footerLinksRegexes setting | 2.1.181 | now-wrong | extend-scanner-known-set | scanners/settings-validator.mjs | M | S | +| settings.json | wheelScrollAccelerationEnabled setting | 2.1.174 | now-wrong | extend-scanner-known-set | scanners/settings-validator.mjs | L | S | +| settings.json | pluginSuggestionMarketplaces managed setting | 2.1.152 | now-wrong | extend-scanner-known-set | scanners/settings-validator.mjs | M | S | +| settings.json | worktree.bgIsolation nested value | 2.1.154 | partial | update-knowledge | knowledge/claude-code-capabilities.md | L | S | +| settings.json | env CLAUDE_CLIENT_PRESENCE_FILE | 2.1.181 | missing | update-knowledge | knowledge/claude-code-capabilities.md | L | S | +| settings.json | env OTEL_RESOURCE_ATTRIBUTES labels | 2.1.161 | missing | update-knowledge | knowledge/claude-code-capabilities.md | L | S | +| settings.json | env CLAUDE_CODE_PLUGIN_PREFER_HTTPS | 2.1.141 | missing | update-knowledge | knowledge/claude-code-capabilities.md | L | S | +| settings.json | env ANTHROPIC_WORKSPACE_ID | 2.1.141 | missing | update-knowledge | knowledge/claude-code-capabilities.md | L | S | +| settings.json | env MAX_THINKING_TOKENS=0 disables thinking | 2.1.166 | missing | update-knowledge | knowledge/claude-code-capabilities.md | L | S | +| settings.json | parentSettingsBehavior / policyHelper (UNVERIFIED) | 2.1.133 | missing | new-feature-gap-check | scanners/settings-validator.mjs | L | S | +| settings.json | skillOverrides (UNVERIFIED, below floor) | 2.1.129 | missing | new-feature-gap-check | scanners/settings-validator.mjs | L | S | +| settings.json | skillListingBudgetFraction / maxSkillDescriptionChars (UNVERIFIED, below floor) | 2.1.105 | missing | new-feature-gap-check | scanners/settings-validator.mjs | L | S | +| CLAUDE.md / memory | 'too long' threshold now scales with context window | 2.1.169 | now-wrong | fix-false-positive | scanners/claude-md-linter.mjs | H | M | +| CLAUDE.md / memory | --safe-mode / CLAUDE_CODE_SAFE_MODE disables customizations | 2.1.169 | missing | update-knowledge | knowledge/configuration-best-practices.md | L | S | +| CLAUDE.md / memory | plugins in .claude/skills auto-load (cascade/token accounting) | 2.1.157 | partial | new-feature-gap-check | knowledge/configuration-best-practices.md | M | M | +| CLAUDE.md / memory | nested .claude closest-wins precedence +