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
33 changes: 33 additions & 0 deletions .claude/.claude-plugin/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,39 @@ All notable changes to the `orchestrator` plugin are documented in this file. Fo
[Keep a Changelog](https://keepachangelog.com/en/1.0.0/); versions track `plugin.json` /
`marketplace.json`.

## [0.2.2] - 2026-07-17

### Changed
- **Stopped vendoring the runtime harness (issue #134, reverting issue #128).** `/orchestrator:setup`/
`/orchestrator:sync` no longer copy the plugin's own `agents/`, `commands/`, `hooks/`, `scripts/`,
`skills/` into a consumer repo's local `.claude/` — those now resolve at runtime via
`${CLAUDE_PLUGIN_ROOT}`, so **the plugin must stay enabled for everyday sessions**, not just to run
setup/sync. Nothing kept an unmanaged vendored copy updated, and `resolve-roots.sh` deliberately makes
a repo-tracked `.claude/scripts` layout win over `${CLAUDE_PLUGIN_ROOT}`, so a stale vendored copy
permanently shadowed a fresh plugin install (the reDeploy incident that prompted this issue). The
`.claude/.orchestrator-vendor` marker and the vendor copy machinery are removed.
- **`pr-loop.service` → v2**: `ExecStart` now resolves `loop-daemon.sh` at unit-start time — prefers a
repo-tracked `.claude/scripts/loop-daemon.sh` (self-hosting), else the newest
`~/.claude/plugins/cache/*/orchestrator/*/scripts/loop-daemon.sh` — instead of assuming a vendored
repo-local copy.
- **`.claude/settings.json` template**: hook commands now resolve via
`${CLAUDE_PLUGIN_ROOT:-$CLAUDE_PROJECT_DIR/.claude}/scripts/...` instead of a hardcoded
`$CLAUDE_PROJECT_DIR/.claude/scripts/...` path, matching the no-longer-vendored layout.

### Added
- **`/orchestrator:sync` detects and warns about stale/unmanaged local copies** of the
now-unvendored `agents/commands/hooks/scripts/skills` directories instead of silently deleting or
restamping them — flags byte-identical leftovers as safe to delete, diverging copies as a possible
deliberate override, and calls out a leftover `.claude/.orchestrator-vendor` marker.

### Notes for downstream installs
- If your repo onboarded while vendoring was active (between #128 and #134), run `/orchestrator:sync`
to get the stale-vendor report, then see `docs/MIGRATION.md` → "If you onboarded between issues #128
and #134" for cleanup steps. **Keep the plugin enabled** after cleaning up.
- **Migration caveat:** deleting/refreshing files on disk is not enough for a repo with the loop already
armed — a running `pr-loop`/`claude-rc` systemd unit holds its OLD script in memory until its unit
restarts: `systemctl --user restart pr-loop-<repo-slug>.service claude-rc-<repo-slug>.service`.

## [0.2.1] - 2026-07-15

Everything shipped since 0.2.0. Headline: the driver now enforces a one-shot contract (no turn
Expand Down
4 changes: 2 additions & 2 deletions .claude/.claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
"name": "Roberto Cano"
},
"description": "reCode: multi-agent orchestration harness — fan out sub-tasks to isolated worktree implementers, gate them, and route results through reviewers.",
"version": "0.2.1",
"version": "0.2.2",
"plugins": [
{
"name": "orchestrator",
"source": "./",
"description": "reCode: multi-agent orchestration harness — fan out sub-tasks to isolated worktree implementers, gate them, and route results through reviewers.",
"version": "0.2.1",
"version": "0.2.2",
"author": {
"name": "Roberto Cano"
}
Expand Down
2 changes: 1 addition & 1 deletion .claude/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "orchestrator",
"version": "0.2.1",
"version": "0.2.2",
"description": "reCode: multi-agent orchestration harness — fan out sub-tasks to isolated worktree implementers, gate them, and route results through reviewers.",
"author": { "name": "Roberto Cano" },
"commands": [
Expand Down
23 changes: 0 additions & 23 deletions .claude/.orchestrator-vendor

This file was deleted.

9 changes: 9 additions & 0 deletions .claude/scripts/loop-census.test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,15 @@ cat > "$scripts_dir/pr-ci-fix.sh" <<'EOF'
printf '10\tfeat/issue-10-a\tbuild\tsha10\n'
printf '11\tfeat/issue-11-a\tbuild\tsha11\n'
EOF
# Commit this swap into fixture1's git history — fixture1 is reused for the
# main_dirty checks much further below, which assume the fixture is otherwise
# clean; leaving this rewrite uncommitted made `git status --porcelain` show
# a real ` M .claude/scripts/pr-ci-fix.sh` line for the rest of the fixture's
# life, permanently tripping main_dirty=yes regardless of which exclusion was
# actually under test (unrelated pre-existing gap, not part of what's being
# tested here).
git -C "$fixture" add .claude/scripts/pr-ci-fix.sh
git -C "$fixture" -c [email protected] -c user.name=t commit -q -m "swap in ci_fix_prs stub (test fixture)"
outCiFix="$(env -u GATES_FILE bash "$scripts_dir/loop-census.sh" "acme/repo")"
check "ci_fix_prs=2 counted when pr-ci-fix.sh reports two candidates" bash -c 'printf "%s\n" "$1" | grep -qx "ci_fix_prs=2"' _ "$outCiFix"

Expand Down
Loading
Loading