From be07ed2033d3250c3d73b07b3a30f921c927bcf3 Mon Sep 17 00:00:00 2001 From: Dai Ha Date: Sat, 12 Sep 2026 12:37:30 +0700 Subject: [PATCH] charter: separate the blocked forge MCP server from the working GITEA_TOKEN MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two worker reports said they had working forge access, which looked like it contradicted the charter's "any forge tools it appears to have hold a blocked credential and fail". Measured: the charter is correct and the reports are correct. They are about two different credentials. A worker opens its own PR with curl and a repo-scoped GITEA_TOKEN that the daemon injects (.claude/skills/implementer/SKILL.md step 5, lines 96-117). That route works — it is how every worker PR this week was opened. The blocked credential belongs to the forge MCP server that leaks in from the operator's user-scope ~/.claude.json, which is a separate thing and does fail every call. The wording did not distinguish them. A worker reading "any forge tools it appears to have hold a blocked credential and fail" could reasonably conclude it cannot reach the forge at all, and skip opening its PR — the one step the lead depends on. So this is an ambiguity with a cost, not a stale line. Both sentences now name the MCP server specifically and say plainly that the injected token is a different, working route. The canonical block and the wiki template must stay byte-identical. The wiki submodule is updated in its own tree and the official sync check reports "in sync: True". The submodule pointer stays unstaged, per the repo rules. --- CLAUDE.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 0216a99..5ff209f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -96,8 +96,10 @@ below are the procedure — run them in order, every task, not only the big ones that answers it. **A worker's ask waits ~55 seconds, and no nudge makes that longer** — so never brief a worker to "ask me". Decide before you delegate, or give it an explicit default. 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. + forge MCP server it appears to have holds a blocked credential and fails every call, and a piped + command (`… | tail`) hides failures behind a zero exit — never promote a worker's "clean" to a + fact. Its injected repo-scoped `GITEA_TOKEN` is a different credential and does work, so a worker + reporting that it opened its own PR is reporting something it really can do. 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 @@ -200,8 +202,11 @@ simply complies has thrown away the reason there are two of you. 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. + yours, whatever you see. And **a mounted tool is not a working tool** — the forge MCP server you + may find there holds a deliberately blocked credential and fails every call, by design. That is + not your only forge route, and the two must not be confused: the repo-scoped `GITEA_TOKEN` the + daemon injects into your environment does work, and using it to open your own PR is part of the + job. A blocked MCP tool is never a reason to skip that step. 6. **Never merge.** Stage files explicitly — never `git add -A` — and leave alone anything the project marks as not-yours-to-commit. -- 2.52.0