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.53.0",
"version": "0.53.1",
"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 \u2014 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 \u2014 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 \u2014 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 \u2014 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
16 changes: 16 additions & 0 deletions plugins/source-control/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,22 @@
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.53.1]

### Fixed

- **The paused-merge case pins both halves of the in-progress reason, and the landed+in-progress
fixture's comment corrects the cherry-pick rationale (#2257).** 0.51.16 rewrote the in-progress
reason to "…(staged result recomputable from base, sequencer position) dies with the directory",
but the suite asserted only "recomputable" — the clause carried over from the old wording — so
the #2257 half (the transient state is LOST with the directory, close to the opposite claim)
could regress silently; a second assertion now pins it. The fixture comment also claimed a
cherry-pick "would reuse the same object", which is wrong on two counts: cherry-pick mints a new
commit, and with this fixture's ordering (`unrelated on main` lands before the twin) a
cherry-pick would not have parent == HEAD at the branch tip and would carry `unrelated.txt` in the
tree — different parent, tree, and SHA even within the same second. The twin-with-different-subject
sequence below is deliberate; do not replace it with a cherry-pick.

## [0.53.0]

### Changed
Expand Down
13 changes: 11 additions & 2 deletions plugins/source-control/scripts/landed-work.test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -454,6 +454,11 @@ assert_eq "the conflicted files are counted apart from the staged tree" \
"1" "$(col "$R" $C_CONFLICTED)"
assert_contains "the reason says the staged tree is recomputable" \
"$(col "$R" $C_REASON)" "recomputable"
# Pins the #2257 half of the reason as well: "recomputable" alone survived the
# rewrite that added it, so only this clause proves the reason still says the
# transient state is LOST with the directory — close to the opposite claim.
assert_contains "the reason says the operation's transient state dies with the directory" \
"$(col "$R" $C_REASON)" "dies with the directory"

# --------------------------------------------------------------------------
# A truncated pass fails loudly
Expand Down Expand Up @@ -543,8 +548,12 @@ git -C "$WT_BISECT" bisect reset >/dev/null 2>&1
# as safe-to-remove, and removal mid-operation kills the operation's transient
# state even when every commit is durable. Fixture holds both signals at once —
# the branch's one commit matches the base by patch-id via a different SHA on
# origin/main (not a cherry-pick, which would reuse the same object and leave
# unpushed=0), then a merge is left open with --no-commit (MERGE_HEAD present).
# origin/main, then a merge is left open with --no-commit (MERGE_HEAD present).
# The twin is committed with a different subject on main (never cherry-picked):
# unrelated lands on main before the twin, so a cherry-pick would not have
# parent == HEAD at the branch tip and would carry unrelated.txt in the tree —
# different parent, tree, and SHA even within the same second. The sequence
# below is deliberate; do not replace the twin with a cherry-pick.
W="$(mkfixture)"
WT_OP="$TEST_TMPDIR/wt-inprog-landed"
git -C "$W" worktree add -q -b feat-inprog "$WT_OP" main >/dev/null 2>&1
Expand Down
Loading