Repository navigation
feat(coordinator): self-sufficient non-Copilot coordinators (ADR-003 option C, part 1 of #2487) - #2489
Conversation
…n C, part of #2487) The digest no longer names .github/agents/squad.agent.md as the authoritative contract, no longer tells the model to read it, and no longer derives its version or heading list from that file. Same bytes whether Copilot's file is absent, stock or customized. Copilot output is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🟡 Impact Analysis — PR #2489Risk tier: 🟡 MEDIUM 📊 Summary
🎯 Risk Factors
📦 Modules Affecteddocs (1 file)
root (3 files)
squad-sdk (1 file)
tests (2 files)
This report is generated automatically for every PR. See #733 for details. |
🛫 PR Readiness Check
PR Scope: 📦🔧 Mixed (product + infrastructure)
|
| Status | Check | Details |
|---|---|---|
| ❌ | Single commit | 3 commits — consider squashing before review |
| ✅ | Not in draft | Ready for review |
| ✅ | Branch up to date | Up to date with dev |
| ❌ | Copilot review | No Copilot review yet — it may still be processing |
| ✅ | Changeset present | Changeset file found |
| ✅ | Scope clean | No .squad/ or docs/proposals/ files |
| ✅ | No merge conflicts | No merge conflicts |
| ✅ | Copilot threads resolved | All 1 Copilot thread(s) resolved |
| ❌ | CI passing | 1 check(s) still running |
Files Changed (7 files, +123 −18)
| File | +/− |
|---|---|
.changeset/self-sufficient-digests.md |
+6 −0 |
CHANGELOG.md |
+1 −0 |
docs/src/content/docs/scenarios/client-compatibility.md |
+1 −1 |
packages/squad-sdk/src/client/adapters/coordinator.ts |
+19 −10 |
plugins/squad/agents/squad.md |
+2 −2 |
test/clients.test.ts |
+6 −5 |
test/coordinator-self-sufficient.test.ts |
+88 −0 |
Total: +123 −18
This check runs automatically on every push. Fix any ❌ items and push again.
See CONTRIBUTING.md and PR Requirements for details.
There was a problem hiding this comment.
🟡 Changes recommended
Removing versionNote leaves non-Copilot digests without the Squad release stamp required for stale-bridge checks before state writes; the installed-distribution version and regression coverage are needed.
1 open issue
What changed in this PR
This PR implements the pointer-removal portion of #2487: non-Copilot coordinator digests no longer defer to or derive content from the workspace’s Copilot coordinator file. Live behavioral validation remains separate.
Changes:
- Makes the shared digest independent of Copilot’s workspace file while preserving the exported resolver.
- Adds regression checks for file independence, protocol wording, size limits, and Claude Init Mode instructions.
- Regenerates the Claude plugin coordinator and updates documentation and release notes.
| File | Description |
|---|---|
test/coordinator-self-sufficient.test.ts |
Adds independence and digest-content regression checks. |
test/clients.test.ts |
Updates expectations for self-contained digests. |
plugins/squad/agents/squad.md |
Refreshes the generated Claude coordinator introduction. |
packages/squad-sdk/src/client/adapters/coordinator.ts |
Removes workspace Copilot-file dependency from digest generation. |
docs/src/content/docs/scenarios/client-compatibility.md |
Explains Claude’s independence from Copilot’s coordinator. |
CHANGELOG.md |
Records the non-Copilot coordinator change. |
.changeset/self-sufficient-digests.md |
Adds SDK and CLI patch release notes. |
Review effort: Balanced (dynamic)
Review: changes neededReviewed head P2: Removing the release stamp breaks the prescribed state-bridge version checkLocation: The generated instructions still require Reproduction: with a stock workspace stamped Required correction: obtain the expected release version from the installed distribution, independently of Copilot's workspace file, and retain it in generated instructions. Add regression coverage across all six hosts. Suggested correction owner: Other evidence and limitsSDK typechecking passed. The targeted coordinator suites recorded 214 passing tests and one failing test; that same MCP-config snapshot mismatch reproduces on the exact base, so it is not attributed to this PR. Combining this head with #2491 produced the same merge tree in either order, and regenerated plugin content matched the committed artifact. Completed CI was green at review time. No new live-model sessions were run; the remaining behavioral acceptance scenarios in #2487 still need evidence. Recommendation: fix the release-stamp regression before merging. |
Copilot review: dropping the version note taken from Copilot's file left item 16's stale-bridge check without a version to compare. The digest now stamps the SDK's own package version (lockstep with the CLI that serves the bridge), so it still never depends on Copilot's file. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Part of #2487 (ADR-003 option C): the pointer change. The live behavioral scenarios are the next step and aren't in this PR, so this doesn't close the issue.
Change
Before, every non-Copilot coordinator (Claude Code, Kiro, OpenCode, Cursor, Codex and Antigravity) opened with:
.github/agents/squad.agent.md… is the canonical coordinator specification"coreCoordinatorProtocolalso read that file from the workspace to stamp its version and its list of headings into the digest. A customized Copilot file therefore changed every other host's coordinator.Now the digest says it's the complete protocol, generated from the same shared source as every other host's. It says Copilot's file may exist in the workspace but must not be read for instructions, and that the team's own policy lives in
.squad/. The text no longer depends on the workspace's Copilot file.resolveCanonicalCoordinatorSourcestays exported for compatibility but the digest doesn't use it.agents/squad.mdis regenerated, with the pin unchanged.Tests
test/coordinator-self-sufficient.test.ts:clients.test.ts:squad-20bridge scenarios fail the same way on a cleandevon macOS.npm run lintis clean.What this makes visible
The feature matrix's existing
it.failsgaps are now real rather than theoretical. The digests don't cover:Before, the pointer to Copilot's 80 KB file covered them on paper, though no recorded session followed it. #2487's Azure DevOps scenario will test the first of these directly.
🤖 Generated with Claude Code