Skip to content

feat(harness): /orchestrator:setup — scaffold non-distributable residue (closes #37) - #45

Merged
robercano-ghbot merged 1 commit into
mainfrom
feat/issue-37-orchestrator-setup
Jul 4, 2026
Merged

feat(harness): /orchestrator:setup — scaffold non-distributable residue (closes #37)#45
robercano-ghbot merged 1 commit into
mainfrom
feat/issue-37-orchestrator-setup

Conversation

@robercano-ghbot

Copy link
Copy Markdown
Collaborator

Summary

Adds an in-plugin /orchestrator:setup skill that scaffolds into a consuming repo everything a Claude Code plugin cannot itself carry — the non-distributable residue — and absorbs the existing /setup-orchestrator interview flow. Phase 2 of the packaging plan; builds on the #36 plugin skeleton.

What it scaffolds (idempotently)

  • User-owned from birth (created only if absent, NEVER touched on re-run): .claude/gates.json (project adapter) and CLAUDE.md.
  • Managed (workflows aren't plugin-distributable): .claude/workflows/feature-fanout.js, stamped with a version marker (below).
  • CI: .github/workflows/gates.yml + .github/actions/setup/action.yml, installed from templates stored under .claude/skills/setup/templates/ (consumer-appropriate — the self-hosting self-gates job is stripped). Created if absent.
  • GitHub/FS: module:* labels (via bot-gh.sh), .gitignore entries (append-if-missing), and .claude/state/.

MANAGED version marker (seam for #38)

templates/feature-fanout.js carries // @orchestrator-managed feature-fanout v1. scaffold.sh holds a single MANAGED_VERSION=1 source of truth and, on re-run: creates if absent, re-stamps when the destination marker is older/missing, reports "up to date" when equal, and never clobbers a newer marker. This is the seam phase 3 (#38) drives to push workflow fixes into already-onboarded repos.

Idempotency

Re-running on an already-scaffolded repo changes nothing user-owned or CI, reports "up to date" for the managed workflow, and never duplicates .gitignore lines. scaffold.sh accepts a target-dir arg (used for testing); reviewers verified fresh-run, no-op re-run, v0 re-stamp, v99 keep-newer, no-marker re-stamp, partial-gitignore append, and missing-template-surfaces-without-stub.

/setup-orchestrator reconciliation

The existing .claude/commands/setup-orchestrator.md is kept (frontmatter intact so it still resolves) but converted to a thin pointer that defers to the canonical flow now living in .claude/skills/setup/SKILL.md. The in-repo command surface the loop relies on is preserved.

Boundary & non-breakage

All changes are under .claude/**; no .github/**, docs/**, or examples/** touched (CI ships as templates, not active workflows). Do-not-break scripts and the self-hosting flow are intact; self gates (build/lint/test) are green.

Reviews

  • correctness: APPROVE (high) — verified idempotency, version-marker seam, user-owned never clobbered, self-hosting flow intact.
  • tests: APPROVE (high) — all three self gates exit 0; scaffold.sh set -euo pipefail, bash -n clean, cwd-independent, deterministic across all exercised paths.

Non-blocking follow-up noted by both: .claude/skills/** sits outside the self-gate lint globs, so scaffold.sh/templates aren't auto-syntax-checked — consider widening do_lint later.

closes #37

🤖 Generated with Claude Code

https://claude.ai/code/session_01WNHtY86twXHEKsLEucSJyY

…residue (#37)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WNHtY86twXHEKsLEucSJyY
@robercano-ghbot
robercano-ghbot merged commit c8cae86 into main Jul 4, 2026
9 checks passed
@robercano-ghbot
robercano-ghbot deleted the feat/issue-37-orchestrator-setup branch July 4, 2026 09:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Packaging phase 2: /orchestrator:setup — scaffold the non-distributable residue on first run

2 participants