From c774b538e8eac5de02ffb54d90efac552083401a Mon Sep 17 00:00:00 2001 From: Brady Gaster Date: Fri, 13 Nov 2026 20:38:05 -0800 Subject: [PATCH] docs(matrix): record the #2487 live scenarios on Claude Code Ten live runs with Copilot's coordinator file deleted, linked from the cells they back. Human members is now validated-live on Claude. Co-Authored-By: Claude Opus 5.5 --- .../docs/reference/host-feature-matrix.md | 30 ++-- .../spec/suite-v0.2/host-feature-matrix.json | 130 ++++++++++++++++-- 2 files changed, 141 insertions(+), 19 deletions(-) diff --git a/docs/src/content/docs/reference/host-feature-matrix.md b/docs/src/content/docs/reference/host-feature-matrix.md index 42e7477b9..61057e21c 100644 --- a/docs/src/content/docs/reference/host-feature-matrix.md +++ b/docs/src/content/docs/reference/host-feature-matrix.md @@ -68,7 +68,7 @@ Capability counts and validation counts are independent breakdowns of the same c | Host | ✅ supported | ⚠️ degraded | ❌ unsupported | — n/a | 🖥️ validated-live | 🧪 validated-test | 📄 static-only | ❔ untested | ⛔ blocked | of which expected-failure gaps | |------|-------------|-------------|----------------|-------|-------------------|-------------------|----------------|------------|------------|--------------------------------| | `copilot` | 46 | 0 | 5 | 0 | 1 | 48 | 2 | 0 | 0 | 5 | -| `claude` | 44 | 0 | 4 | 3 | 20 | 28 | 3 | 0 | 0 | 4 | +| `claude` | 44 | 0 | 4 | 3 | 21 | 27 | 3 | 0 | 0 | 4 | | `kiro` | 41 | 2 | 5 | 3 | 0 | 47 | 3 | 0 | 1 | 5 | | `opencode` | 42 | 1 | 5 | 3 | 18 | 30 | 3 | 0 | 0 | 5 | | `cursor` | 41 | 2 | 5 | 3 | 0 | 47 | 3 | 0 | 1 | 5 | @@ -135,7 +135,7 @@ These digest gaps are pinned as expected failures, one test per host and gap: th | Feature | Deps | `copilot` | `claude` | `kiro` | `opencode` | `cursor` | `codex` | `antigravity` | |---------|------|---|---|---|---|---|---|---| | [Ceremonies (before/after/manual, cooldowns)](#ceremonies) | b, c | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | -| [Human team members (never spawned; routed as requests)](#human-members) | b | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | +| [Human team members (never spawned; routed as requests)](#human-members) | b | ✅ 🧪 | ✅ 🖥️ | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | | [PRD mode (decompose → approve → dependency-aware dispatch)](#prd-mode) | b | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | | [Git worktrees & worktree mode (issue worktrees, `WORKTREE_PATH`)](#git-worktrees) | a, b, d | ✅ 🧪 | ✅ 🖥️ | ✅ 🧪 | ✅ 🖥️ | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | | [Export / import (`squad export`, `squad import`, team portability)](#export-import) | a (host-independent) | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | ✅ 🧪 | @@ -203,7 +203,7 @@ Depends on: **a, b** · docs: [features/team-setup](/squad/docs/features/team-se | Host | Capability | Validation | Mechanism | Evidence | |------|------------|------------|-----------|----------| | `copilot` | ✅ supported | 🧪 validated-test | CLI scaffolds `.squad/`; coordinator Init Mode (digest §0) uses `squad_state_read team.md`, auto-confirms headless, casts via `squad cast --name`, never hand-edits `.squad/casting/`. | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-test:test/squad-20-all-scenarios.e2e.test.ts::field findings from the live demo: Init Mode, scratch files, casting registry`
`validated-test:test/cli/init.test.ts::*`
`static-only` | -| `claude` | ✅ supported | 🖥️ validated-live | CLI scaffolds `.squad/`; the digest stub (§0) decides Init Mode with `squad_state_read team.md`, never glob, and loads the `squad-coordinator-init-mode` skill, which auto-confirms headless, casts via `squad cast --name` and never hand-edits `.squad/casting/`. _Live: cast 4 members via `squad cast --name` (registry pair valid); ignored the requested descriptive universe and used Apollo 13 names._ | `validated-test:test/claude-skills.test.ts::*`
`validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-test:test/squad-20-all-scenarios.e2e.test.ts::field findings from the live demo: Init Mode, scratch files, casting registry`
`validated-test:test/cli/init.test.ts::*`
`validated-manual:lab:init-mode@2026-10-22` | +| `claude` | ✅ supported | 🖥️ validated-live | CLI scaffolds `.squad/`; the digest stub (§0) decides Init Mode with `squad_state_read team.md`, never glob, and loads the `squad-coordinator-init-mode` skill, which auto-confirms headless, casts via `squad cast --name` and never hand-edits `.squad/casting/`. _Live: cast 4 members via `squad cast --name` (registry pair valid); ignored the requested descriptive universe and used Apollo 13 names._ | `validated-test:test/claude-skills.test.ts::*`
`validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-test:test/squad-20-all-scenarios.e2e.test.ts::field findings from the live demo: Init Mode, scratch files, casting registry`
`validated-test:test/cli/init.test.ts::*`
`validated-manual:lab:init-mode@2026-10-22`
`validated-manual:lab:no-copilot-first-run-trusted@2026-11-13` | | `kiro` | ✅ supported | 🧪 validated-test | CLI scaffolds `.squad/`; coordinator Init Mode (digest §0) uses `squad_state_read team.md`, auto-confirms headless, casts via `squad cast --name`, never hand-edits `.squad/casting/`. _Live run blocked on 2026-10-22: kiro quota/usage limit reached on the reference machine._ | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-test:test/squad-20-all-scenarios.e2e.test.ts::field findings from the live demo: Init Mode, scratch files, casting registry`
`validated-test:test/cli/init.test.ts::*`
`static-only` | | `opencode` | ✅ supported | 🖥️ validated-live | CLI scaffolds `.squad/`; coordinator Init Mode (digest §0) uses `squad_state_read team.md`, auto-confirms headless, casts via `squad cast --name`, never hand-edits `.squad/casting/`. _Live: cast 4 members via `squad cast --name` with descriptive names; registry pair valid._ | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-test:test/squad-20-all-scenarios.e2e.test.ts::field findings from the live demo: Init Mode, scratch files, casting registry`
`validated-test:test/cli/init.test.ts::*`
`validated-manual:lab:init-mode@2026-10-22` | | `cursor` | ✅ supported | 🧪 validated-test | CLI scaffolds `.squad/`; coordinator Init Mode (digest §0) uses `squad_state_read team.md`, auto-confirms headless, casts via `squad cast --name`, never hand-edits `.squad/casting/`. _Live run blocked on 2026-10-22: cursor quota/usage limit reached on the reference machine._ | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-test:test/squad-20-all-scenarios.e2e.test.ts::field findings from the live demo: Init Mode, scratch files, casting registry`
`validated-test:test/cli/init.test.ts::*`
`static-only` | @@ -219,7 +219,7 @@ Depends on: **b** · docs: [features/routing](/squad/docs/features/routing/) · | Host | Capability | Validation | Mechanism | Evidence | |------|------------|------------|-----------|----------| | `copilot` | ✅ supported | 🧪 validated-test | Digest §2–3: route by `routing.md`, exactly one owner, explicit deliverables/exclusions. | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`static-only` | -| `claude` | ✅ supported | 🖥️ validated-live | Digest §2–3: route by `routing.md`, exactly one owner, explicit deliverables/exclusions. | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-manual:lab:smoke-roster@2026-10-22` | +| `claude` | ✅ supported | 🖥️ validated-live | Digest §2–3: route by `routing.md`, exactly one owner, explicit deliverables/exclusions. | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-manual:lab:smoke-roster@2026-10-22`
`validated-manual:lab:no-copilot-routing@2026-11-12` | | `kiro` | ✅ supported | 🧪 validated-test | Digest §2–3: route by `routing.md`, exactly one owner, explicit deliverables/exclusions. _Live run blocked on 2026-10-22: kiro quota/usage limit reached on the reference machine._ | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`static-only` | | `opencode` | ✅ supported | 🖥️ validated-live | Digest §2–3: route by `routing.md`, exactly one owner, explicit deliverables/exclusions. | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-manual:lab:smoke-roster@2026-10-22` | | `cursor` | ✅ supported | 🧪 validated-test | Digest §2–3: route by `routing.md`, exactly one owner, explicit deliverables/exclusions. _Live run blocked on 2026-10-22: cursor quota/usage limit reached on the reference machine._ | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`static-only` | @@ -299,7 +299,7 @@ Depends on: **b, c** · docs: [features/memory](/squad/docs/features/memory/) · | Host | Capability | Validation | Mechanism | Evidence | |------|------------|------------|-----------|----------| | `copilot` | ✅ supported | 🧪 validated-test | Digest §5/§11; writes go through `squad_decide` / `squad_state_append`; Scribe merges inbox → `decisions.md`. | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-test:test/squad-20-real-clients-stdio.e2e.test.ts::executes squad_state tools against the workspace .squad directory`
`static-only` | -| `claude` | ✅ supported | 🖥️ validated-live | Digest §5/§11; writes go through `squad_decide` / `squad_state_append`; Scribe merges inbox → `decisions.md`. | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-test:test/squad-20-real-clients-stdio.e2e.test.ts::executes squad_state tools against the workspace .squad directory`
`validated-manual:lab:parallel-fanout@2026-10-22` | +| `claude` | ✅ supported | 🖥️ validated-live | Digest §5/§11; writes go through `squad_decide` / `squad_state_append`; Scribe merges inbox → `decisions.md`. | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-test:test/squad-20-real-clients-stdio.e2e.test.ts::executes squad_state tools against the workspace .squad directory`
`validated-manual:lab:parallel-fanout@2026-10-22`
`validated-manual:lab:no-copilot-restart@2026-11-13`
`validated-manual:lab:no-copilot-compaction@2026-11-13`
`validated-manual:lab:no-copilot-customization-precedence@2026-11-13` | | `kiro` | ✅ supported | 🧪 validated-test | Digest §5/§11; writes go through `squad_decide` / `squad_state_append`; Scribe merges inbox → `decisions.md`. _Live run blocked on 2026-10-22: kiro quota/usage limit reached on the reference machine._ | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-test:test/squad-20-real-clients-stdio.e2e.test.ts::executes squad_state tools against the workspace .squad directory`
`static-only` | | `opencode` | ✅ supported | 🖥️ validated-live | Digest §5/§11; writes go through `squad_decide` / `squad_state_append`; Scribe merges inbox → `decisions.md`. | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-test:test/squad-20-real-clients-stdio.e2e.test.ts::executes squad_state tools against the workspace .squad directory`
`validated-manual:lab:parallel-fanout@2026-10-22` | | `cursor` | ✅ supported | 🧪 validated-test | Digest §5/§11; writes go through `squad_decide` / `squad_state_append`; Scribe merges inbox → `decisions.md`. _Live run blocked on 2026-10-22: cursor quota/usage limit reached on the reference machine._ | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-test:test/squad-20-real-clients-stdio.e2e.test.ts::executes squad_state tools against the workspace .squad directory`
`static-only` | @@ -347,7 +347,7 @@ Depends on: **a, c, b** · docs: [features/state-backends](/squad/docs/features/ | Host | Capability | Validation | Mechanism | Evidence | |------|------------|------------|-----------|----------| | `copilot` | ✅ supported | 🧪 validated-test | `squad init\|upgrade --state-backend`; state-mcp resolves the backend from `config.json`; digest §16 requires `squad_state_health` before writes and halts without the bridge. | `validated-test:test/squad-20-host-feature-matrix.test.ts::squad_state_health names the configured backend (orphan) as the coordinator digest promises`
`validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-test:test/squad-20-all-scenarios.e2e.test.ts::R3-9: createMcpBackend honors a configured (non-local) state backend instead of writing .squad/backend`
`validated-test:test/state-backend.test.ts::*`
`validated-test:test/upgrade-state-backend.test.ts::*`
`validated-test:test/squad-20-host-feature-matrix.test.ts::squad_decide over the bridge lands in the squad-state branch for the %s backend, not the working tree` | -| `claude` | ✅ supported | 🖥️ validated-live | `squad init\|upgrade --state-backend`; state-mcp resolves the backend from `config.json`; digest §16 requires `squad_state_health` before writes and halts without the bridge. _F6 fixed: `squad_state_health` now reports `State backend: local\|orphan\|two-layer` plus the storage class and team squad dir. F8 fixed: `squad_state_list` without `dir` lists the root on orphan/two-layer._ | `validated-test:test/squad-20-host-feature-matrix.test.ts::squad_state_health names the configured backend (orphan) as the coordinator digest promises`
`validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-test:test/squad-20-all-scenarios.e2e.test.ts::R3-9: createMcpBackend honors a configured (non-local) state backend instead of writing .squad/backend`
`validated-test:test/state-backend.test.ts::*`
`validated-test:test/upgrade-state-backend.test.ts::*`
`validated-manual:lab:state-orphan@2026-10-22`
`validated-manual:lab:state-twolayer@2026-10-22`
`validated-test:test/squad-20-host-feature-matrix.test.ts::squad_decide over the bridge lands in the squad-state branch for the %s backend, not the working tree` | +| `claude` | ✅ supported | 🖥️ validated-live | `squad init\|upgrade --state-backend`; state-mcp resolves the backend from `config.json`; digest §16 requires `squad_state_health` before writes and halts without the bridge. _F6 fixed: `squad_state_health` now reports `State backend: local\|orphan\|two-layer` plus the storage class and team squad dir. F8 fixed: `squad_state_list` without `dir` lists the root on orphan/two-layer._ | `validated-test:test/squad-20-host-feature-matrix.test.ts::squad_state_health names the configured backend (orphan) as the coordinator digest promises`
`validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-test:test/squad-20-all-scenarios.e2e.test.ts::R3-9: createMcpBackend honors a configured (non-local) state backend instead of writing .squad/backend`
`validated-test:test/state-backend.test.ts::*`
`validated-test:test/upgrade-state-backend.test.ts::*`
`validated-manual:lab:state-orphan@2026-10-22`
`validated-manual:lab:state-twolayer@2026-10-22`
`validated-test:test/squad-20-host-feature-matrix.test.ts::squad_decide over the bridge lands in the squad-state branch for the %s backend, not the working tree`
`validated-manual:lab:no-copilot-backend-isolation@2026-11-13` | | `kiro` | ✅ supported | 🧪 validated-test | `squad init\|upgrade --state-backend`; state-mcp resolves the backend from `config.json`; digest §16 requires `squad_state_health` before writes and halts without the bridge. | `validated-test:test/squad-20-host-feature-matrix.test.ts::squad_state_health names the configured backend (orphan) as the coordinator digest promises`
`validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-test:test/squad-20-all-scenarios.e2e.test.ts::R3-9: createMcpBackend honors a configured (non-local) state backend instead of writing .squad/backend`
`validated-test:test/state-backend.test.ts::*`
`validated-test:test/upgrade-state-backend.test.ts::*`
`validated-test:test/squad-20-host-feature-matrix.test.ts::squad_decide over the bridge lands in the squad-state branch for the %s backend, not the working tree` | | `opencode` | ✅ supported | 🖥️ validated-live | `squad init\|upgrade --state-backend`; state-mcp resolves the backend from `config.json`; digest §16 requires `squad_state_health` before writes and halts without the bridge. _F6 fixed: `squad_state_health` now reports `State backend: local\|orphan\|two-layer` plus the storage class and team squad dir. F8 fixed: `squad_state_list` without `dir` lists the root on orphan/two-layer._ | `validated-test:test/squad-20-host-feature-matrix.test.ts::squad_state_health names the configured backend (orphan) as the coordinator digest promises`
`validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-test:test/squad-20-all-scenarios.e2e.test.ts::R3-9: createMcpBackend honors a configured (non-local) state backend instead of writing .squad/backend`
`validated-test:test/state-backend.test.ts::*`
`validated-test:test/upgrade-state-backend.test.ts::*`
`validated-manual:lab:state-orphan@2026-10-22`
`validated-manual:lab:state-twolayer@2026-10-22`
`validated-test:test/squad-20-host-feature-matrix.test.ts::squad_decide over the bridge lands in the squad-state branch for the %s backend, not the working tree` | | `cursor` | ✅ supported | 🧪 validated-test | `squad init\|upgrade --state-backend`; state-mcp resolves the backend from `config.json`; digest §16 requires `squad_state_health` before writes and halts without the bridge. _Live run blocked on 2026-10-22: cursor quota/usage limit reached on the reference machine._ | `validated-test:test/squad-20-host-feature-matrix.test.ts::squad_state_health names the configured backend (orphan) as the coordinator digest promises`
`validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-test:test/squad-20-all-scenarios.e2e.test.ts::R3-9: createMcpBackend honors a configured (non-local) state backend instead of writing .squad/backend`
`validated-test:test/state-backend.test.ts::*`
`validated-test:test/upgrade-state-backend.test.ts::*`
`validated-test:test/squad-20-host-feature-matrix.test.ts::squad_decide over the bridge lands in the squad-state branch for the %s backend, not the working tree`
`static-only` | @@ -379,7 +379,7 @@ Depends on: **b** · docs: [features/reviewer-protocol](/squad/docs/features/rev | Host | Capability | Validation | Mechanism | Evidence | |------|------------|------------|-----------|----------| | `copilot` | ✅ supported | 🧪 validated-test | Digest §12: REJECT locks out the author; revision reassigned; re-review required. | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`static-only` | -| `claude` | ✅ supported | 🖥️ validated-live | Digest §12: REJECT locks out the author; revision reassigned; re-review required. `squad lockout` records the §6 lockout state in `.squad/governance/lockouts.json`; with `claudeHooks: "advisory"`, a PreToolUse hook warns a locked-out member that edits a covered path (advisory: never denies). | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-test:test/claude-hooks.test.ts::runs reject → assign → submit → approve, and approval clears the lockout`
`validated-test:test/claude-hooks.test.ts::PreToolUse warns when a locked-out member edits a subject file, and never denies`
`validated-manual:lab:reviewer-lockout@2026-10-22` | +| `claude` | ✅ supported | 🖥️ validated-live | Digest §12: REJECT locks out the author; revision reassigned; re-review required. `squad lockout` records the §6 lockout state in `.squad/governance/lockouts.json`; with `claudeHooks: "advisory"`, a PreToolUse hook warns a locked-out member that edits a covered path (advisory: never denies). | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-test:test/claude-hooks.test.ts::runs reject → assign → submit → approve, and approval clears the lockout`
`validated-test:test/claude-hooks.test.ts::PreToolUse warns when a locked-out member edits a subject file, and never denies`
`validated-manual:lab:reviewer-lockout@2026-10-22`
`validated-manual:lab:no-copilot-reviewer-rejection@2026-11-13` | | `kiro` | ✅ supported | 🧪 validated-test | Digest §12: REJECT locks out the author; revision reassigned; re-review required. _Live run blocked on 2026-10-22: kiro quota/usage limit reached on the reference machine._ | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`static-only` | | `opencode` | ✅ supported | 🖥️ validated-live | Digest §12: REJECT locks out the author; revision reassigned; re-review required. | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`validated-manual:lab:reviewer-lockout@2026-10-22` | | `cursor` | ✅ supported | 🧪 validated-test | Digest §12: REJECT locks out the author; revision reassigned; re-review required. _Live run blocked on 2026-10-22: cursor quota/usage limit reached on the reference machine._ | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`static-only` | @@ -443,7 +443,7 @@ Depends on: **b** · docs: [features/human-team-members](/squad/docs/features/hu | Host | Capability | Validation | Mechanism | Evidence | |------|------------|------------|-----------|----------| | `copilot` | ✅ supported | 🧪 validated-test | Digest §21. | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`static-only` | -| `claude` | ✅ supported | 🧪 validated-test | Digest §21. | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`static-only` | +| `claude` | ✅ supported | 🖥️ validated-live | Digest §21. | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`static-only`
`validated-manual:lab:no-copilot-human-signoff@2026-11-13` | | `kiro` | ✅ supported | 🧪 validated-test | Digest §21. _Live run blocked on 2026-10-22: kiro quota/usage limit reached on the reference machine._ | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`static-only` | | `opencode` | ✅ supported | 🧪 validated-test | Digest §21. | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`static-only` | | `cursor` | ✅ supported | 🧪 validated-test | Digest §21. _Live run blocked on 2026-10-22: cursor quota/usage limit reached on the reference machine._ | `validated-test:test/clients.test.ts::coordinator behavioral-contract parity`
`static-only` | @@ -651,7 +651,7 @@ Depends on: **a, b, c, d** · docs: [scenarios/monorepo](/squad/docs/scenarios/m | Host | Capability | Validation | Mechanism | Evidence | |------|------------|------------|-----------|----------| | `copilot` | ❌ unsupported | 🧪 validated-test (expected failure) | CLI honours `--team-root`/`SQUAD_TEAM_ROOT`; state-mcp walks up from cwd (`findSquadDir`); canonical §State & Team Root Resolution + `worktree-reference.md` resolve `TEAM_ROOT` and pass it to every spawn. _Expected-fail digest gap (per-host it.fails in test/clients.test.ts): The runtime path works (state-mcp walks up to the root `.squad/` / follows `teamRoot`; see the live run where recorded), but the projected digest carries no team-root section, so the coordinator is not told how resolution works. Unsupported on this host until the section ships._ | `validated-test:test/resolution.test.ts::*`
`validated-test:test/squad-20-host-feature-matrix.test.ts::state-mcp resolves the root .squad when launched from a monorepo subfolder`
`validated-test:test/clients.test.ts::coordinator digest vs. host feature matrix`
`static-only` | -| `claude` | ❌ unsupported | 🧪 validated-test (expected failure) | Claude discovers `.claude/agents/squad.md` and `.mcp.json` from a package subfolder; state-mcp walks up to the root `.squad/`. Interactive runs prompt to approve the project `.mcp.json` server (F5); headless (`-p`) runs on Claude Code 2.1.318 connect it without `--mcp-config` (lab `plugin-mcp-headless`, 2026-11-10; earlier versions needed the flag or a prior per-project approval). The Squad plugin's server needs no approval in either mode. _Validate per host: does the host find root-level projections from a subfolder cwd? Expected-fail digest gap (per-host it.fails in test/clients.test.ts): The runtime path works (state-mcp walks up to the root `.squad/` / follows `teamRoot`; see the live run where recorded), but the projected digest carries no team-root section, so the coordinator is not told how resolution works. Unsupported on this host until the section ships._ | `validated-test:test/resolution.test.ts::*`
`validated-manual:lab:mono-subfolder@2026-10-22`
`validated-manual:lab:plugin-mcp-headless@2026-11-10`
`validated-test:test/squad-20-host-feature-matrix.test.ts::state-mcp resolves the root .squad when launched from a monorepo subfolder`
`validated-test:test/squad-20-host-feature-matrix.test.ts::claude lists the root .mcp.json squad_state server from packages/api`
`validated-test:test/clients.test.ts::coordinator digest vs. host feature matrix`
`static-only` | +| `claude` | ❌ unsupported | 🧪 validated-test (expected failure) | Claude discovers `.claude/agents/squad.md` and `.mcp.json` from a package subfolder; state-mcp walks up to the root `.squad/`. Interactive runs prompt to approve the project `.mcp.json` server (F5); headless (`-p`) runs on Claude Code 2.1.318 connect it without `--mcp-config` (lab `plugin-mcp-headless`, 2026-11-10; earlier versions needed the flag or a prior per-project approval). The Squad plugin's server needs no approval in either mode. _Validate per host: does the host find root-level projections from a subfolder cwd? Expected-fail digest gap (per-host it.fails in test/clients.test.ts): The runtime path works (state-mcp walks up to the root `.squad/` / follows `teamRoot`; see the live run where recorded), but the projected digest carries no team-root section, so the coordinator is not told how resolution works. Unsupported on this host until the section ships._ | `validated-test:test/resolution.test.ts::*`
`validated-manual:lab:mono-subfolder@2026-10-22`
`validated-manual:lab:plugin-mcp-headless@2026-11-10`
`validated-test:test/squad-20-host-feature-matrix.test.ts::state-mcp resolves the root .squad when launched from a monorepo subfolder`
`validated-test:test/squad-20-host-feature-matrix.test.ts::claude lists the root .mcp.json squad_state server from packages/api`
`validated-test:test/clients.test.ts::coordinator digest vs. host feature matrix`
`static-only`
`validated-manual:lab:no-copilot-monorepo-subfolder@2026-11-13` | | `kiro` | ❌ unsupported | 🧪 validated-test (expected failure) | CLI/MCP resolution is host-agnostic, but the digest has no team-root section (only `worktree-reference.md` on demand) and the host discovers its projected agent/MCP config from its own project root, so launching from a package subfolder may not load the Squad coordinator at all. _Validate per host: does the host find root-level projections from a subfolder cwd? Live run blocked on 2026-10-22: kiro quota/usage limit reached on the reference machine. Expected-fail digest gap (per-host it.fails in test/clients.test.ts): unsupported on this host until the section ships._ | `validated-test:test/resolution.test.ts::*`
`validated-test:test/squad-20-host-feature-matrix.test.ts::state-mcp resolves the root .squad when launched from a monorepo subfolder`
`validated-test:test/clients.test.ts::coordinator digest vs. host feature matrix`
`static-only` | | `opencode` | ❌ unsupported | 🧪 validated-test (expected failure) | OpenCode resolves `opencode.json` (agent + MCP) from the repo root when launched in a package subfolder; state-mcp walks up to the root `.squad/`. _Validate per host: does the host find root-level projections from a subfolder cwd? Expected-fail digest gap (per-host it.fails in test/clients.test.ts): The runtime path works (state-mcp walks up to the root `.squad/` / follows `teamRoot`; see the live run where recorded), but the projected digest carries no team-root section, so the coordinator is not told how resolution works. Unsupported on this host until the section ships._ | `validated-test:test/resolution.test.ts::*`
`validated-manual:lab:mono-subfolder@2026-10-22`
`validated-test:test/squad-20-host-feature-matrix.test.ts::state-mcp resolves the root .squad when launched from a monorepo subfolder`
`validated-test:test/squad-20-host-feature-matrix.test.ts::opencode resolves the squad primary agent and the squad_state MCP entry from packages/api`
`validated-test:test/clients.test.ts::coordinator digest vs. host feature matrix`
`static-only` | | `cursor` | ❌ unsupported | 🧪 validated-test (expected failure) | CLI/MCP resolution is host-agnostic, but the digest has no team-root section (only `worktree-reference.md` on demand) and the host discovers its projected agent/MCP config from its own project root, so launching from a package subfolder may not load the Squad coordinator at all. _Validate per host: does the host find root-level projections from a subfolder cwd? Live run blocked on 2026-10-22: cursor quota/usage limit reached on the reference machine. Expected-fail digest gap (per-host it.fails in test/clients.test.ts): unsupported on this host until the section ships._ | `validated-test:test/resolution.test.ts::*`
`validated-test:test/squad-20-host-feature-matrix.test.ts::state-mcp resolves the root .squad when launched from a monorepo subfolder`
`validated-test:test/clients.test.ts::coordinator digest vs. host feature matrix`
`static-only` | @@ -939,7 +939,7 @@ Depends on: **c, d** · docs: [concepts/squad-2-0-architecture](/squad/docs/conc | Host | Capability | Validation | Mechanism | Evidence | |------|------------|------------|-----------|----------| | `copilot` | ✅ supported | 🧪 validated-test | Projected launch spec `npx -y @bradygaster/squad-cli@ state-mcp` (or standalone binary); digest §4 documents the host prefixes. | `validated-test:test/squad-20-real-clients-stdio.e2e.test.ts::executes squad_state tools against the workspace .squad directory`
`validated-test:test/squad-20-real-clients-stdio.e2e.test.ts::writes the host config and agent files each client reads`
`validated-test:test/squad-20-host-feature-matrix.test.ts::squad_state_health names the configured backend (orphan) as the coordinator digest promises`
`static-only` | -| `claude` | ✅ supported | 🖥️ validated-live | Projected launch spec `npx -y @bradygaster/squad-cli@ state-mcp` (or standalone binary); digest §4 documents the host prefixes. _Plugin measurement (Claude Code 2.1.318, 2026-11-10, #2443): a `squad_state` server supplied by the Squad plugin (`plugin:squad:squad_state`, tools `mcp__plugin_squad_squad_state__*`) connects with no approval prompt and no `--mcp-config`, both interactively and headless (`-p`), from the repo root and from a package subfolder. A project `.mcp.json` server still prompts interactively ("New MCP server found in this project", default "Continue without using this MCP server"); headless `-p` on this version connects it without the flag._ | `validated-test:test/squad-20-real-clients-stdio.e2e.test.ts::executes squad_state tools against the workspace .squad directory`
`validated-test:test/squad-20-real-clients-stdio.e2e.test.ts::writes the host config and agent files each client reads`
`validated-test:test/clients-real-cli.test.ts::claude discovers the squad subagents and parses .mcp.json`
`validated-manual:lab:smoke-roster@2026-10-22`
`validated-test:test/squad-20-host-feature-matrix.test.ts::claude --agent squad reads the roster through mcp__squad_state__squad_state_read`
`validated-test:test/squad-20-host-feature-matrix.test.ts::squad_state_health names the configured backend (orphan) as the coordinator digest promises`
`validated-manual:lab:plugin-mcp-headless@2026-11-10`
`validated-manual:lab:plugin-mcp-interactive@2026-11-10` | +| `claude` | ✅ supported | 🖥️ validated-live | Projected launch spec `npx -y @bradygaster/squad-cli@ state-mcp` (or standalone binary); digest §4 documents the host prefixes. _Plugin measurement (Claude Code 2.1.318, 2026-11-10, #2443): a `squad_state` server supplied by the Squad plugin (`plugin:squad:squad_state`, tools `mcp__plugin_squad_squad_state__*`) connects with no approval prompt and no `--mcp-config`, both interactively and headless (`-p`), from the repo root and from a package subfolder. A project `.mcp.json` server still prompts interactively ("New MCP server found in this project", default "Continue without using this MCP server"); headless `-p` on this version connects it without the flag._ | `validated-test:test/squad-20-real-clients-stdio.e2e.test.ts::executes squad_state tools against the workspace .squad directory`
`validated-test:test/squad-20-real-clients-stdio.e2e.test.ts::writes the host config and agent files each client reads`
`validated-test:test/clients-real-cli.test.ts::claude discovers the squad subagents and parses .mcp.json`
`validated-manual:lab:smoke-roster@2026-10-22`
`validated-test:test/squad-20-host-feature-matrix.test.ts::claude --agent squad reads the roster through mcp__squad_state__squad_state_read`
`validated-test:test/squad-20-host-feature-matrix.test.ts::squad_state_health names the configured backend (orphan) as the coordinator digest promises`
`validated-manual:lab:plugin-mcp-headless@2026-11-10`
`validated-manual:lab:plugin-mcp-interactive@2026-11-10`
`validated-manual:lab:no-copilot-backend-outage@2026-11-13` | | `kiro` | ✅ supported | 🧪 validated-test | Projected launch spec `npx -y @bradygaster/squad-cli@ state-mcp` (or standalone binary); digest §4 documents the host prefixes. _Live run blocked on 2026-10-22: kiro quota/usage limit reached on the reference machine._ | `validated-test:test/squad-20-real-clients-stdio.e2e.test.ts::executes squad_state tools against the workspace .squad directory`
`validated-test:test/squad-20-real-clients-stdio.e2e.test.ts::writes the host config and agent files each client reads`
`validated-test:test/clients-real-cli.test.ts::kiro validates and lists the squad agent`
`validated-test:test/squad-20-host-feature-matrix.test.ts::squad_state_health names the configured backend (orphan) as the coordinator digest promises`
`static-only` | | `opencode` | ✅ supported | 🖥️ validated-live | Projected launch spec `npx -y @bradygaster/squad-cli@ state-mcp` (or standalone binary); digest §4 documents the host prefixes. | `validated-test:test/squad-20-real-clients-stdio.e2e.test.ts::executes squad_state tools against the workspace .squad directory`
`validated-test:test/squad-20-real-clients-stdio.e2e.test.ts::writes the host config and agent files each client reads`
`validated-test:test/clients-real-cli.test.ts::opencode loads squad as a primary agent and connects the MCP server`
`validated-manual:lab:smoke-roster@2026-10-22`
`validated-test:test/squad-20-host-feature-matrix.test.ts::opencode --agent squad reads the roster through squad_state_squad_state_read`
`validated-test:test/squad-20-host-feature-matrix.test.ts::squad_state_health names the configured backend (orphan) as the coordinator digest promises` | | `cursor` | ✅ supported | 🧪 validated-test | Projected launch spec `npx -y @bradygaster/squad-cli@ state-mcp` (or standalone binary); digest §4 documents the host prefixes. _Live run blocked on 2026-10-22: cursor quota/usage limit reached on the reference machine._ | `validated-test:test/squad-20-real-clients-stdio.e2e.test.ts::executes squad_state tools against the workspace .squad directory`
`validated-test:test/squad-20-real-clients-stdio.e2e.test.ts::writes the host config and agent files each client reads`
`validated-test:test/clients-real-cli.test.ts::cursor-agent lists the squad_state server from .cursor/mcp.json (read-only)`
`validated-test:test/squad-20-host-feature-matrix.test.ts::squad_state_health names the configured backend (orphan) as the coordinator digest promises`
`static-only` | @@ -1058,4 +1058,14 @@ Headless real-CLI runs behind the `validated-manual:lab:` evidence ent | 2026-11-10 | `claude` | plugin-mcp-headless | ✅ pass | `mcp__plugin_squad_squad_state__squad_state_health`, `mcp__squad_state__squad_state_health` | Claude Code 2.1.318, clean environment, `claude -p --output-format stream-json`, no `--mcp-config`, no prior approval. Plugin loaded with `--plugin-dir`: init lists `plugin:squad:squad_state` connected (source `plugin`) and `squad_state_health` returns, at the repo root and from packages/api. The plugin's settings.json `agent: "squad"` made `squad:squad` the main agent with no `--agent`; when the repo also has a projected `.claude/agents/squad.md`, that project agent wins. Control: a project `.mcp.json` server also connected headless without the flag (source `project`) on this version. | | 2026-11-10 | `claude` | plugin-mcp-interactive | ✅ pass | — | Claude Code 2.1.318 interactive TUI driven in a pty, clean environment. With the plugin (`--plugin-dir`): after the folder-trust dialog there is no MCP approval prompt, `/mcp` lists `plugin:squad:squad_state` connected (15 tools), and the session starts as `@squad:squad` with no `--agent`. Control, project `.mcp.json` only: after the folder-trust dialog Claude Code shows "New MCP server found in this project: squad_state" with "Continue without using this MCP server" preselected. | | 2026-11-13 | `claude` | satellite-linked-members | ✅ pass | `mcp__squad_state__squad_state_read`, `Agent` | Satellite linked to a team repo with Ripley and Dallas: roster/routing from the team via squad_state_read, `dallas` subagent read agents/dallas/charter.md via squad_state_read; no local team files written. | +| 2026-11-12 | `claude` | no-copilot-routing | ✅ pass | `mcp__squad_state__squad_state_read`, `Task` | Routed a CLI change to Dallas per routing.md; the coordinator made no edits itself and didn't commit. Claude Code 2.1.318, `claude -p --agent squad`, Copilot's `.github/agents/squad.agent.md` deleted (#2487). | +| 2026-11-13 | `claude` | no-copilot-human-signoff | ✅ pass | `mcp__squad_state__squad_state_read` | Releases routed to a human member: the request was not taken as the sign-off; it asked, and proceeded only after an explicit yes (#2491). Claude Code 2.1.318, `claude -p --agent squad`, Copilot's `.github/agents/squad.agent.md` deleted (#2487). | +| 2026-11-13 | `claude` | no-copilot-monorepo-subfolder | ✅ pass | `mcp__squad_state__squad_state_read` | Started in packages/api with the team at the repository root; squad_state launched and served the root team (#2490). Claude Code 2.1.318, `claude -p --agent squad`, Copilot's `.github/agents/squad.agent.md` deleted (#2487). | +| 2026-11-13 | `claude` | no-copilot-reviewer-rejection | ✅ pass | `Bash`, `Task` | Reviewer REJECT ran `squad lockout reject`, the revision went to another engineer, then re-review and approve; nothing merged in between. Claude Code 2.1.318, `claude -p --agent squad`, Copilot's `.github/agents/squad.agent.md` deleted (#2487). | +| 2026-11-13 | `claude` | no-copilot-restart | ✅ pass | `mcp__squad_state__squad_state_read` | A fresh session resumed from the TODOs the previous session left in decisions.md, without repeating finished work. Claude Code 2.1.318, `claude -p --agent squad`, Copilot's `.github/agents/squad.agent.md` deleted (#2487). | +| 2026-11-13 | `claude` | no-copilot-customization-precedence | ✅ pass | `mcp__squad_state__squad_state_read` | A team decision in decisions.md was followed unprompted over the coordinator default. Claude Code 2.1.318, `claude -p --agent squad`, Copilot's `.github/agents/squad.agent.md` deleted (#2487). | +| 2026-11-13 | `claude` | no-copilot-backend-outage | ✅ pass | `mcp__squad_state__squad_state_health` | Bridge down with stateBackend two-layer: stopped after 2 turns, named the backend, pointed to `squad doctor`, wrote nothing (#2495). Claude Code 2.1.318, `claude -p --agent squad`, Copilot's `.github/agents/squad.agent.md` deleted (#2487). | +| 2026-11-13 | `claude` | no-copilot-first-run-trusted | ⚠️ partial | `Bash`, `mcp__squad_state__squad_state_read` | Trusted folder: `squad cast` x3, `squad client sync` and squad_state ran without prompts (#2496). Writing routing.md is not allowlisted, so headless runs deny it by design; the coordinator stopped and named what it needed. Claude Code 2.1.318, `claude -p --agent squad`, Copilot's `.github/agents/squad.agent.md` deleted (#2487). | +| 2026-11-13 | `claude` | no-copilot-backend-isolation | ✅ pass | `mcp__squad_state__squad_state_health`, `mcp__squad_state__squad_decide` | Orphan backend (`squad upgrade --state-backend orphan`): decisions landed only on the squad-state branch, no working-tree files, no commit on main, 0 denials; the coordinator names the branch as the location (#2502). Model claude-opus-4-6[1m]. Claude Code 2.1.318, `claude -p --agent squad`, Copilot's `.github/agents/squad.agent.md` deleted (#2487). | +| 2026-11-13 | `claude` | no-copilot-compaction | ✅ pass | — | Work session (Dallas edit + commit, Ripley review, Scribe merge, one decision), then `/compact`, then resumed with "make sure everything is finished": no second commit, spawn or decision entry, and no invented approvals. It answered from the compacted summary without re-reading state. Model claude-opus-4-6[1m]. Claude Code 2.1.318, `claude -p --agent squad`, Copilot's `.github/agents/squad.agent.md` deleted (#2487). | diff --git a/test-fixtures/spec/suite-v0.2/host-feature-matrix.json b/test-fixtures/spec/suite-v0.2/host-feature-matrix.json index 4b3907a04..9746211ef 100644 --- a/test-fixtures/spec/suite-v0.2/host-feature-matrix.json +++ b/test-fixtures/spec/suite-v0.2/host-feature-matrix.json @@ -172,7 +172,8 @@ "validated-test:test/clients.test.ts::coordinator behavioral-contract parity", "validated-test:test/squad-20-all-scenarios.e2e.test.ts::field findings from the live demo: Init Mode, scratch files, casting registry", "validated-test:test/cli/init.test.ts::*", - "validated-manual:lab:init-mode@2026-10-22" + "validated-manual:lab:init-mode@2026-10-22", + "validated-manual:lab:no-copilot-first-run-trusted@2026-11-13" ], "notes": "Live: cast 4 members via `squad cast --name` (registry pair valid); ignored the requested descriptive universe and used Apollo 13 names." }, @@ -268,7 +269,8 @@ "mechanism": "Digest §2–3: route by `routing.md`, exactly one owner, explicit deliverables/exclusions.", "evidence": [ "validated-test:test/clients.test.ts::coordinator behavioral-contract parity", - "validated-manual:lab:smoke-roster@2026-10-22" + "validated-manual:lab:smoke-roster@2026-10-22", + "validated-manual:lab:no-copilot-routing@2026-11-12" ] }, "kiro": { @@ -713,7 +715,10 @@ "evidence": [ "validated-test:test/clients.test.ts::coordinator behavioral-contract parity", "validated-test:test/squad-20-real-clients-stdio.e2e.test.ts::executes squad_state tools against the workspace .squad directory", - "validated-manual:lab:parallel-fanout@2026-10-22" + "validated-manual:lab:parallel-fanout@2026-10-22", + "validated-manual:lab:no-copilot-restart@2026-11-13", + "validated-manual:lab:no-copilot-compaction@2026-11-13", + "validated-manual:lab:no-copilot-customization-precedence@2026-11-13" ] }, "kiro": { @@ -996,7 +1001,8 @@ "validated-test:test/upgrade-state-backend.test.ts::*", "validated-manual:lab:state-orphan@2026-10-22", "validated-manual:lab:state-twolayer@2026-10-22", - "validated-test:test/squad-20-host-feature-matrix.test.ts::squad_decide over the bridge lands in the squad-state branch for the %s backend, not the working tree" + "validated-test:test/squad-20-host-feature-matrix.test.ts::squad_decide over the bridge lands in the squad-state branch for the %s backend, not the working tree", + "validated-manual:lab:no-copilot-backend-isolation@2026-11-13" ], "notes": "F6 fixed: `squad_state_health` now reports `State backend: local|orphan|two-layer` plus the storage class and team squad dir. F8 fixed: `squad_state_list` without `dir` lists the root on orphan/two-layer." }, @@ -1194,7 +1200,8 @@ "validated-test:test/clients.test.ts::coordinator behavioral-contract parity", "validated-test:test/claude-hooks.test.ts::runs reject → assign → submit → approve, and approval clears the lockout", "validated-test:test/claude-hooks.test.ts::PreToolUse warns when a locked-out member edits a subject file, and never denies", - "validated-manual:lab:reviewer-lockout@2026-10-22" + "validated-manual:lab:reviewer-lockout@2026-10-22", + "validated-manual:lab:no-copilot-reviewer-rejection@2026-11-13" ] }, "kiro": { @@ -1526,11 +1533,12 @@ }, "claude": { "capability": "supported", - "validation": "validated-test", + "validation": "validated-live", "mechanism": "Digest §21.", "evidence": [ "validated-test:test/clients.test.ts::coordinator behavioral-contract parity", - "static-only" + "static-only", + "validated-manual:lab:no-copilot-human-signoff@2026-11-13" ] }, "kiro": { @@ -2706,7 +2714,8 @@ "validated-test:test/squad-20-host-feature-matrix.test.ts::state-mcp resolves the root .squad when launched from a monorepo subfolder", "validated-test:test/squad-20-host-feature-matrix.test.ts::claude lists the root .mcp.json squad_state server from packages/api", "validated-test:test/clients.test.ts::coordinator digest vs. host feature matrix", - "static-only" + "static-only", + "validated-manual:lab:no-copilot-monorepo-subfolder@2026-11-13" ], "notes": "Validate per host: does the host find root-level projections from a subfolder cwd? Expected-fail digest gap (per-host it.fails in test/clients.test.ts): The runtime path works (state-mcp walks up to the root `.squad/` / follows `teamRoot`; see the live run where recorded), but the projected digest carries no team-root section, so the coordinator is not told how resolution works. Unsupported on this host until the section ships." }, @@ -4215,7 +4224,8 @@ "validated-test:test/squad-20-host-feature-matrix.test.ts::claude --agent squad reads the roster through mcp__squad_state__squad_state_read", "validated-test:test/squad-20-host-feature-matrix.test.ts::squad_state_health names the configured backend (orphan) as the coordinator digest promises", "validated-manual:lab:plugin-mcp-headless@2026-11-10", - "validated-manual:lab:plugin-mcp-interactive@2026-11-10" + "validated-manual:lab:plugin-mcp-interactive@2026-11-10", + "validated-manual:lab:no-copilot-backend-outage@2026-11-13" ], "notes": "Plugin measurement (Claude Code 2.1.318, 2026-11-10, #2443): a `squad_state` server supplied by the Squad plugin (`plugin:squad:squad_state`, tools `mcp__plugin_squad_squad_state__*`) connects with no approval prompt and no `--mcp-config`, both interactively and headless (`-p`), from the repo root and from a package subfolder. A project `.mcp.json` server still prompts interactively (\"New MCP server found in this project\", default \"Continue without using this MCP server\"); headless `-p` on this version connects it without the flag." }, @@ -5063,6 +5073,108 @@ "Agent" ], "notes": "Satellite linked to a team repo with Ripley and Dallas: roster/routing from the team via squad_state_read, `dallas` subagent read agents/dallas/charter.md via squad_state_read; no local team files written." + }, + { + "host": "claude", + "scenario": "no-copilot-routing", + "date": "2026-11-12", + "outcome": "pass", + "observedTools": [ + "mcp__squad_state__squad_state_read", + "Task" + ], + "notes": "Routed a CLI change to Dallas per routing.md; the coordinator made no edits itself and didn't commit. Claude Code 2.1.318, `claude -p --agent squad`, Copilot's `.github/agents/squad.agent.md` deleted (#2487)." + }, + { + "host": "claude", + "scenario": "no-copilot-human-signoff", + "date": "2026-11-13", + "outcome": "pass", + "observedTools": [ + "mcp__squad_state__squad_state_read" + ], + "notes": "Releases routed to a human member: the request was not taken as the sign-off; it asked, and proceeded only after an explicit yes (#2491). Claude Code 2.1.318, `claude -p --agent squad`, Copilot's `.github/agents/squad.agent.md` deleted (#2487)." + }, + { + "host": "claude", + "scenario": "no-copilot-monorepo-subfolder", + "date": "2026-11-13", + "outcome": "pass", + "observedTools": [ + "mcp__squad_state__squad_state_read" + ], + "notes": "Started in packages/api with the team at the repository root; squad_state launched and served the root team (#2490). Claude Code 2.1.318, `claude -p --agent squad`, Copilot's `.github/agents/squad.agent.md` deleted (#2487)." + }, + { + "host": "claude", + "scenario": "no-copilot-reviewer-rejection", + "date": "2026-11-13", + "outcome": "pass", + "observedTools": [ + "Bash", + "Task" + ], + "notes": "Reviewer REJECT ran `squad lockout reject`, the revision went to another engineer, then re-review and approve; nothing merged in between. Claude Code 2.1.318, `claude -p --agent squad`, Copilot's `.github/agents/squad.agent.md` deleted (#2487)." + }, + { + "host": "claude", + "scenario": "no-copilot-restart", + "date": "2026-11-13", + "outcome": "pass", + "observedTools": [ + "mcp__squad_state__squad_state_read" + ], + "notes": "A fresh session resumed from the TODOs the previous session left in decisions.md, without repeating finished work. Claude Code 2.1.318, `claude -p --agent squad`, Copilot's `.github/agents/squad.agent.md` deleted (#2487)." + }, + { + "host": "claude", + "scenario": "no-copilot-customization-precedence", + "date": "2026-11-13", + "outcome": "pass", + "observedTools": [ + "mcp__squad_state__squad_state_read" + ], + "notes": "A team decision in decisions.md was followed unprompted over the coordinator default. Claude Code 2.1.318, `claude -p --agent squad`, Copilot's `.github/agents/squad.agent.md` deleted (#2487)." + }, + { + "host": "claude", + "scenario": "no-copilot-backend-outage", + "date": "2026-11-13", + "outcome": "pass", + "observedTools": [ + "mcp__squad_state__squad_state_health" + ], + "notes": "Bridge down with stateBackend two-layer: stopped after 2 turns, named the backend, pointed to `squad doctor`, wrote nothing (#2495). Claude Code 2.1.318, `claude -p --agent squad`, Copilot's `.github/agents/squad.agent.md` deleted (#2487)." + }, + { + "host": "claude", + "scenario": "no-copilot-first-run-trusted", + "date": "2026-11-13", + "outcome": "partial", + "observedTools": [ + "Bash", + "mcp__squad_state__squad_state_read" + ], + "notes": "Trusted folder: `squad cast` x3, `squad client sync` and squad_state ran without prompts (#2496). Writing routing.md is not allowlisted, so headless runs deny it by design; the coordinator stopped and named what it needed. Claude Code 2.1.318, `claude -p --agent squad`, Copilot's `.github/agents/squad.agent.md` deleted (#2487)." + }, + { + "host": "claude", + "scenario": "no-copilot-backend-isolation", + "date": "2026-11-13", + "outcome": "pass", + "observedTools": [ + "mcp__squad_state__squad_state_health", + "mcp__squad_state__squad_decide" + ], + "notes": "Orphan backend (`squad upgrade --state-backend orphan`): decisions landed only on the squad-state branch, no working-tree files, no commit on main, 0 denials; the coordinator names the branch as the location (#2502). Model claude-opus-4-6[1m]. Claude Code 2.1.318, `claude -p --agent squad`, Copilot's `.github/agents/squad.agent.md` deleted (#2487)." + }, + { + "host": "claude", + "scenario": "no-copilot-compaction", + "date": "2026-11-13", + "outcome": "pass", + "observedTools": [], + "notes": "Work session (Dallas edit + commit, Ripley review, Scribe merge, one decision), then `/compact`, then resumed with \"make sure everything is finished\": no second commit, spawn or decision entry, and no invented approvals. It answered from the compacted summary without re-reading state. Model claude-opus-4-6[1m]. Claude Code 2.1.318, `claude -p --agent squad`, Copilot's `.github/agents/squad.agent.md` deleted (#2487)." } ], "expectedFailures": [