Skip to content

fix(setup): unstamped --config claim prescribes a destructive reinstall across 18 setup skills #3111

Description

@kyle-sexton

Problem

scripts/sync-plugin-options-docs.py:93 generates route 2 as "Headless, at install time", and 18 setup skills carry a stronger, load-bearing form of the same premise:

Headless: --config only applies on a fresh install (ignored once installed), so reconfigure via claude plugin uninstall <p> -s <scope> then claude plugin install <p>@<mkt> -s <scope> --config KEY=VALUE

That premise does not hold on Claude Code 2.1.240. Verified by writing an arbitrary non-default value to an already-installed plugin and restoring it:

BEFORE  {"options":{"settings_write_ask_enabled":true}}
$ claude plugin install context-budget@melodic-software -s user --config settings_write_ask_enabled=false
  ✔ Plugin "context-budget@melodic-software" is already installed (scope: user)
        {"options":{"settings_write_ask_enabled":false}}
$ claude plugin install context-budget@melodic-software -s user --config settings_write_ask_enabled=true
AFTER   {"options":{"settings_write_ask_enabled":true}}

This rules out both "it only worked because the value equalled the manifest default" and "it only worked because the key was absent".

Why it matters

The prescribed uninstall drops the entire pluginConfigs entry. Following that guidance resets 34 options on source-control, 20 on guardrails, 14 on claude-ops. The claude-ops setup skill documents that hazard at length — a hazard the working route makes unnecessary.

Framing

The claim landed 2026-07-18 in fe28ffa70 ("adopt the uniform setup contract across 17 shape-B plugins", #360) via template sweep, carrying no version stamp. CC 2.1.221 changed install-activation behaviour in this area, so "always false" and "true when written, fixed since" are not distinguishable from available evidence — and need not be.

The defect is: an unversioned harness claim, propagated by template to 18 skills, prescribing a destructive path for a case where the safe route demonstrably works. Remediation is to correct and stamp, matching the house style already used in plugins/claude-ops/skills/plugins/context/scope-semantics.md ("Empirically verified on Claude Code 2.1.228").

Also in scope

  • Coverage rule — declares userConfig ⇒ ships a setup skill. Three violations: context-budget, repo-hygiene, visualization.
  • Verify-it-landed — the setup contract's apply should read back the effective value after routing a reconfiguration rather than claiming an unobserved change. 34 setup skills reference pluginConfigs already, but none asserts post-write.

Motivating incident: three consecutive /plugin configure context-budget@melodic-software attempts on 2.1.240 returned No configuration changes., (no content), Configuration cancelled. and persisted nothing, with no error surfaced. Related upstream issues (anthropics/claude-code#51538, #52724, #46477) are all closed, and #52724's one named user-side cause — a custom ~/.claude/keybindings.json — did not apply.

Related

No linked issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions