Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion plugins/source-control/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "source-control",
"version": "0.26.2",
"version": "0.26.3",
"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 merge-rung raises binding from the team-tracked layer only), /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",
Expand Down
13 changes: 13 additions & 0 deletions plugins/source-control/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,19 @@
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.26.3]

### Changed

- **The plugin is now the canonical, sole source for the worktree conventions (#401).** The
`babysit-prs` skill's `reference/worktrees.md` states it owns the ephemeral babysit-worktree
exemption (lease-scoped cleanup, never a global open-PR prune — machine-enforced by
`prune_babysit_worktrees.py`) and that rooting those worktrees outside a repository's discoverable
tree keeps them out of enumeration such as `ghq list`; the `worktree` skill states it owns the
parallel-session external-root convention going forward. Both close the SSOT gap left by the
retired external `ghq-layout-sibling-pr-worktrees` prose doc (physical deletion of that doc is a
separate follow-up in the dotfiles repo).

## [0.26.2]

### Fixed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@ key's resolved value and its unset fallback; `<worktree-root>` defaults to the `
subdirectory of the plugin data directory, and `<state-dir>` is its `state/babysit-prs`
subdirectory.

This file is the canonical, sole source for the babysit ephemeral-worktree convention — the
plugin owns it, not any external prose doc. Rooting these worktrees outside every repository's
discoverable tree (the plugin data directory by default) is deliberate: it keeps ephemeral
scratch out of repository enumeration such as `ghq list`. Repointing `babysit_worktree_root`
back under a discoverable tree reintroduces that pollution.

## Policy

- At the start of a queue run holding the queue lease, remove only unleased clean babysit
Expand Down
2 changes: 2 additions & 0 deletions plugins/source-control/skills/worktree/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ Orchestrate git worktree lifecycle from creation through cleanup. **Front-half**

**Why this exists:** worktrees are the isolation mechanism for parallel code changes — multiple Claude Code sessions on different tasks without stepping on each other. In repos where branch protection blocks direct commits to main, every feature, fix, or refactor starts with a worktree or branch; this skill makes that seamless.

This skill is the canonical owner of the parallel-session worktree convention going forward — no external prose doc. Worktrees live at an external `worktree_root` (`<root>/<owner>-<repo>-<slug>`, outside every repository), never nested inside any repository's tree — that nesting invariant is what creation enforces (the abandoned sibling-layout convention re-triggered the #400 double-load bug). Keeping `worktree_root` clear of repository-discovery roots (such as a ghq root) is convention, not machine-checked: creation rejects only paths inside an existing repository, and a discovery-root placement would pollute repository enumeration the same way the sibling layout did — choose the root accordingly.

## Adapting to your environment (graceful degrade)

This skill is self-contained — every action runs on plain `git`, plus `gh` for PR cross-referencing where available. Where it mentions an adjacent capability (an issue tracker, a build/lint verifier, a session-start setup hook), treat it as optional: use it when your environment provides it, proceed without it otherwise. Project-specific conventions — branch naming, worktree layout, which gitignored files a fresh worktree needs — come from the consuming project's own `CLAUDE.md`, rules, and hooks; read them before creating or removing anything.
Expand Down