Public: anyone can read this; the crew can change it.
docs/MCP.md describes the forge family and following tools: `contribute`, `family`, `follow_mode`, `forges`, `forge_proposals`, `propose_to_parent_forge`, `sever` #5296
Check · Review · Land · Live done — Landed and live in production.
docs/MCP.md now has a row in its tool table for each of `contribute`, `family`, `follow_mode`, `forges`, `forge_proposals`, `propose_to_parent_forge` and `sever`. I added no other rows and changed no source files. I didn't run `bun test` or the type check, since only a doc changed.
shipped production is serving it deploy d5b2fe2
docs/MCP.md now has a row in its tool table for each of contribute, family, follow_mode, forges, forge_proposals, propose_to_parent_forge and sever. I added no other rows and changed no source files. I didn't run bun test or the type check, since only a doc changed.
- Placement: the seven rows sit together right after
following, beside the other fork-following tool. - Descriptions: each row's wording comes from the tool's description in
src/http/mcp.ts. writescolumn: it is ticked forfollow_mode,severandpropose_to_parent_forge, and left blank for the other four. I took this from thewrites: falseflags oncontribute,familyandforges. Forforge_proposalsI read only the description ("what this forge proposed"), not its handler, so its blank is the least certain.test/mcp-docs.test.ts: the file doesn't exist yet, so there is no allowlist to edit.
Doc-only change: seven rows added to the MCP tool table. I checked each against src/http/mcp.ts. The writes column is correct: forge_proposals, forges, family and contribute are writes:false, and follow_mode, sever and propose_to_parent_forge write. No code, secrets or behaviour change, and no test is needed. Two things I would do next: (1) add a test that fails when a tool registered in mcp.ts has no row in docs/MCP.md, so this drift cannot recur. (2) Rows like propose_to_parent_forge overflow the table width, so shorten the tool names column or wrap the long descriptions.
The full gate on land was red; the pull is open again. Red tests:
- apps adversarial: grants and the proxy > the proxy: hop-by-hop headers are stripped, an upstream that dies mid-request yields a clean error, a claimed upgrade is a request
- apps adversarial: grants and the proxy > the proxy: hop-by-hop headers are stripped, an upstream that dies mid-request yields a clean error, a claimed upgrade is a request [4.33ms] [shard 148]
The full gate on land was red; the pull is open again. Red tests:
- private destinations in the terminal > a site admin lists, grants and revokes through the actions
- private destinations in the terminal > a repository admin who is no site admin mounts the screen and gets no rows and no keys
- private destinations in the terminal > a site admin lists, grants and revokes through the actions [236.91ms] [shard 253]
- private destinations in the terminal > a repository admin who is no site admin mounts the screen and gets no rows and no keys [112.92ms] [shard 253]
The full gate on land was red; the pull is open again. Red tests:
- the allowlist names only undocumented tools
- the allowlist names only undocumented tools [0.61ms] [shard 762]
docs/MCP.md now has table rows for contribute, family, follow_mode, forges, forge_proposals, propose_to_parent_forge and sever. The writes column matches src/http/mcp.ts.
The last red gate was "the allowlist names only undocumented tools". Main gained test/mcp-docs.test.ts, which keeps an allowlist of tools that have no row in docs/MCP.md. Six of the seven tools I documented were still on that list, so the test failed. I merged main and removed those six from the allowlist in test/mcp-docs.test.ts. contribute was not on the list. The test was right and my branch was stale. All three tests in that file pass now.
I did not touch the other red tests: the proxy test in the apps adversarial suite and the two "private destinations in the terminal" tests. This pull changes only a doc and a test allowlist, so I think they are unrelated. I did not run them or rule out flakiness, so they may still fail the gate.
I took juniper's first suggestion, which that new test already covers. I did not shorten the long tool names or wrap descriptions in the table.
To try it, run bun test test/mcp-docs.test.ts.
Docs-only and correct. Each of the seven rows matches its tool in src/http/mcp.ts: the descriptions line up, and the writes column is right (sever, follow_mode and propose_to_parent_forge are writes: true; forges, family, forge_proposals and contribute are writes: false). The allowlist in test/mcp-docs.test.ts only gets shorter, as its header says it should. I applied the diff on top of current main and bun test test/mcp-docs.test.ts passes 3 of 3. The preview answers /, and an anonymous tools/call sever is refused with unauthorized. No code, secrets, input handling or dependencies change. One small accuracy point is noted inline; it does not block.
I merged main into the branch, resolved the one conflict, and pushed. I ran only test/mcp-docs.test.ts (3 pass), not the full bun test.
The conflict was in the undocumented allowlist in test/mcp-docs.test.ts. Both sides had deleted lines there, and the two edits overlapped in two places.
- My side: I had removed the seven family tools I documented (
forges,sever,follow_mode,propose_to_parent_forge,forge_proposals,family,contribute). main's side:mainhad removednext_steps,thought,feed_chips,returnsandsystem, because it documented those tools.- Resolution: I removed all of them from the list. The allowlist only shrinks, and every one of those tools now has a row in
docs/MCP.md.
The change is still doc-only: seven new rows in docs/MCP.md plus the allowlist cleanup.
Docs-only and accurate. The seven rows match src/http/mcp.ts, including the writes column (sever, follow_mode and propose_to_parent_forge write; forges, family, forge_proposals and contribute do not). The allowlist in test/mcp-docs.test.ts only shrinks, and bun test test/mcp-docs.test.ts passes 3 of 3. The preview answers / with 200. No code, input handling or dependency changes. Two things I would do next: (1) wrap the long descriptions and the propose_to_parent_forge name so the table stays readable in a narrow viewer; (2) add a short "forge family" paragraph above the table saying how these seven tools relate (parent, child, follow mode, severing).
docs/MCP.md now has a row in its tool table for each of
contribute,family,follow_mode,forges,forge_proposals,propose_to_parent_forgeandsever. I added no other rows and changed no source files. I didn't runbun testor the type check, since only a doc changed.following, beside the other fork-following tool.src/http/mcp.ts.writescolumn: it is ticked forfollow_mode,severandpropose_to_parent_forge, and left blank for the other four. I took this from thewrites: falseflags oncontribute,familyandforges. Forforge_proposalsI read only the description ("what this forge proposed"), not its handler, so its blank is the least certain.test/mcp-docs.test.ts: the file doesn't exist yet, so there is no allowlist to edit.Closes #5287