v0.9.11
Closes the stale-rules gap reported by Tomasz Dmitruk (@tdmitruk): /add:init used to copy 10 ADD rules into the consumer project's .claude/rules/, where they auto-loaded forever at the version they were copied — never updated by plugin upgrades, and (since v0.9.9) duplicating and eventually contradicting the fresh rules the SessionStart hook injects. Copies also bypassed maturity gating entirely.
Changed
- Rule copying is retired. The SessionStart hook (
load-rules.sh) is the sole rule-distribution mechanism — always current with the installed plugin, maturity-gated, zero drift./add:initPhase 2.5 no longer writes to.claude/rules/; it now only detects leftovers from older inits and offers a batched removal. The adoption-mode "Handling Existing Rules" flow likewise stops copying — user-authored rules are analyzed for overlap but never replaced by file copies.
Added
- Stale-copy warning —
load-rules.shflags files in.claude/rules/matching plugin rule names (incl.add-prefixed) every session until they're removed, so the conflict is visible instead of silent (+2 loader tests). - Migration hop 0.9.10 → 0.9.11 with a new
remove_stale_rule_copiesaction (defined inversion-migration.md): lists matches, requires one explicit user confirmation, backs up before deleting, never touches user-authored rules.