From 2124e043ce6fcd50886c0923d33c90292c6bff4d Mon Sep 17 00:00:00 2001 From: Dai Ha Date: Sun, 16 Aug 2026 09:46:42 +0200 Subject: [PATCH] =?UTF-8?q?CB-593:=20correct=20the=20member=20MCP=20claim?= =?UTF-8?q?=20=E2=80=94=20measured,=20not=20assumed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CLAUDE.md told every member 'You mount only the bridge MCP' and told the lead 'a worker mounts only the bridge MCP and cannot run your other tooling'. Both were false for Claude Code members. Measured by spawning one member per backend and asking each what it actually has: opencode (gx) 11 bridge tools only claim TRUE claude-code (local) 11 bridge + 45 gitea + 2 context7 claim FALSE Source is ~/.claude.json user-scope mcpServers; --mcp-config adds to that scope rather than replacing it, so the worktree parity overlay (which correctly neutralises .mcp.json and opencode.json) cannot see or stop it. The forge tools are mounted but not usable: CB-592's blocked sentinel means get_me and list_issues both fail with 'invalid username, password or token'. That is defence in depth working in a path it was not designed for, so the text now says a mounted tool is not a working tool rather than pretending the tools are absent. Block propagated byte-identically to wiki 7-Use-Cases.md (wiki 1d95e3f). --- CLAUDE.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index f2372db..69f77b4 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -81,9 +81,9 @@ below are the procedure — run them in order, every task, not only the big ones 5. **Collect** — `bridge_poll{ticket}` → `bridge_ack{ticket, msgId}`. Answer a worker's `bridge_ask` with `bridge_send{turnId, content}` — **not** `sessionId`. A worker gone quiet is diagnosed with `bridge_status`, never by reading its terminal. -6. **Verify yourself.** Re-run the build and the checks. A worker mounts only the bridge MCP and - cannot run your other tooling, and a piped command (`… | tail`) hides failures behind a zero - exit — never promote a worker's "clean" to a fact. +6. **Verify yourself.** Re-run the build and the checks. A worker cannot run your IDE tooling, any + forge tools it appears to have hold a blocked credential and fail, and a piped command + (`… | tail`) hides failures behind a zero exit — never promote a worker's "clean" to a fact. 7. **Review — fan out.** Spawn reviewers against the diff, one per dimension or per file, with `wait:false`. Never the implementer of the scope it reviews, and brief them from the diff — not from the implementer's rationale, which carries its own blind spot. Dispatch each PR's reviewers @@ -155,9 +155,13 @@ you. without replying, the bridge scrapes your pane, and it can return only the last 4000 characters. A clipped scrape is marked as partial, but the missing text is gone — your report reaches the lead with its end cut off. -5. **Report honestly.** State only what you actually ran and its real output, including failures. - You mount **only** the bridge MCP — the primary's other servers (IDE, forge, docs) are not yours, - so never claim the result of a check you had no way to run. +5. **Report honestly.** State only what you actually ran and its real output, including failures, + and never claim the result of a check you had no way to run. **Measure your own tools; do not + assume them.** What you mount depends on your backend: an opencode member gets the bridge and + nothing else, while a Claude Code member also inherits the operator's user-scope MCP servers, + which the bridge never chose for you. Two rules follow. The primary's IDE tooling is still not + yours, whatever you see. And **a mounted tool is not a working tool** — the forge server you may + find there holds a deliberately blocked credential and fails every call, by design. 6. **Never merge.** Stage files explicitly — never `git add -A` — and leave alone anything the project marks as not-yours-to-commit.