From 90a551399f3bc62537b8c5d59d1a9fe2561c3c32 Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Sun, 23 Aug 2026 20:11:22 +0000 Subject: [PATCH] fix(source-control): name --keep-data in setup uninstall guidance (0.55.6) Document that uninstalling from the last remaining scope deletes ${CLAUDE_PLUGIN_DATA} unless --keep-data is passed, and say what this plugin loses: babysit-prs state and any worktree that resolved to that directory. Closes #3131 Co-authored-by: Kyle Sexton --- .../source-control/.claude-plugin/plugin.json | 2 +- plugins/source-control/CHANGELOG.md | 24 +++++++++++++++++++ plugins/source-control/skills/setup/SKILL.md | 13 ++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/plugins/source-control/.claude-plugin/plugin.json b/plugins/source-control/.claude-plugin/plugin.json index d4427e1074..c01771ea01 100644 --- a/plugins/source-control/.claude-plugin/plugin.json +++ b/plugins/source-control/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "source-control", - "version": "0.55.5", + "version": "0.55.6", "description": "Git and GitHub delivery workflow: /commit (Conventional Commits + Co-authored-by trailer via safe heredoc mechanics), /pull-request (prep, create, CI monitoring, review-comment triage, merge, CI-log fetch), /babysit-prs (self-pacing fleet loop — safe by default; opt-in worker/autopilot tiers add gate-checked merge and thread resolution behind a deterministic Python engine), /babysit-loop (the loop-lane merge lane: a standing or drain loop that invokes babysit-prs per cycle, configured through repo-scoped babysit_loop_* keys on the layered source-control.md seam, with merge authority human-only until the target repo's tracked config adopts the lane, a gate-proven C2-mechanical baseline once adopted, and standing merge-rung raises binding from the team-tracked layer only — with one named exception, where an invocation line explicitly typing both the autopilot tier keyword and the dedicated raise argument --merge c3-this-run widens that single invocation's merge authority up to C3 behind a fresh independent frontier-tier resolver, while C4-structural and C5-untrusted-provenance stay unconditionally human-merge), /worktree (create, status, cleanup, audit for parallel-session isolation), /setup (check the effective commit-subject / PR-title convention merged across its config layers and the babysit-prs config, or apply — interview the repo and write the convention config to a chosen layer), and /resolve-conflicts (intent-first merge/rebase conflict resolution with a semantic-conflict sweep — never --abort). The commit-subject / PR-title convention is configurable via a source-control.md config written by a re-runnable setup skill, layered across a ~/.claude user-global file, the tracked team file, and a gitignored .claude/source-control.local.md personal overlay merged per key; Conventional Commits is the default when no convention is declared.", "author": { "name": "Melodic Software", diff --git a/plugins/source-control/CHANGELOG.md b/plugins/source-control/CHANGELOG.md index 14be669ab0..ac4d657047 100644 --- a/plugins/source-control/CHANGELOG.md +++ b/plugins/source-control/CHANGELOG.md @@ -3,6 +3,30 @@ All notable changes to the `source-control` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.55.6] + +### Fixed + +- **`setup` skill:** the babysit-config guidance now names `claude plugin uninstall`'s + `--keep-data` flag. The section already warned against uninstalling in order to reconfigure, + citing the lost `pluginConfigs` entry, but stopped there, and `--keep-data` appeared nowhere in + the plugin. An operator who uninstalled for any of the other legitimate reasons (troubleshooting, + changing scopes, reinstalling a version) had no warning that uninstalling from the **last + remaining scope** deletes `${CLAUDE_PLUGIN_DATA}` by default. That directory holds + `${CLAUDE_PLUGIN_DATA}/state/babysit-prs`, meaning the babysit-prs queue state, the worker + leases, and the feedback ledger, none of which any `userConfig` key relocates. It is also the + last resolution rung for both worktree roots, so a `/source-control:worktree` tree holding + uncommitted work can sit there too. The added paragraph names the flag, states what the directory + holds, and states which rung each root has to fall through to land in it, since "left unset" is + necessary but not sufficient for `worktree_root`: a repository's `melodic.worktreeroot` git + config outranks it. The existing advice against uninstalling to reconfigure is unchanged. The + plugin README carries a parallel warning, but that copy sits inside the generated options block + every plugin README shares, so changing it is a marketplace-wide edit to + `scripts/sync-plugin-options-docs.py` rather than a source-control one. Follows the marketplace's + own `docs/conventions/plugin-data-report-keying/README.md` Rule 4, which asks a component to + state its uninstall fragility where its only durable copy lives + ([#3131](https://github.com/melodic-software/claude-code-plugins/issues/3131)). + ## [0.55.5] ### Added diff --git a/plugins/source-control/skills/setup/SKILL.md b/plugins/source-control/skills/setup/SKILL.md index e9ab70cded..b63c5e9d0e 100644 --- a/plugins/source-control/skills/setup/SKILL.md +++ b/plugins/source-control/skills/setup/SKILL.md @@ -258,6 +258,19 @@ sanctioned paths: `claude plugin list` reports for this plugin, and run from that project's directory for a `project`/`local` scope, or the write lands at a scope that does not load. +When an uninstall is warranted for a reason other than reconfiguring (troubleshooting, changing +scopes, reinstalling a version), pass `--keep-data`. Uninstalling from the **last remaining scope** +otherwise deletes this plugin's `${CLAUDE_PLUGIN_DATA}` directory (Rule 4 of the marketplace's +`plugin-data-report-keying` convention). That directory holds +`${CLAUDE_PLUGIN_DATA}/state/babysit-prs`: the babysit-prs queue state, the worker leases, and the +feedback ledger, which no `userConfig` key relocates. It is also the **last** resolution rung for +both worktree roots. `babysit_worktree_root` falls back to `${CLAUDE_PLUGIN_DATA}/worktrees` +whenever it is unset, while `/source-control:worktree create` reaches that same directory only when +neither the target repository's `melodic.worktreeroot` git config nor `worktree_root` resolves. So +check where the roots actually resolve before assuming the directory is disposable: babysit's own +worktrees are ephemeral scratch that rebuild from GitHub, but the state directory and any +`/source-control:worktree` tree still holding uncommitted work do not. + Reconfiguring `userConfig` does not reach the already-running session, after either path, the new values become visible only in a fresh session. Do not re-run the babysit `check` in the same session expecting the change and report a false failure; instead report "reconfigured; verify with `check` in