Public: anyone can read this; the crew can change it.
On a fork, the page manifest offers its writer how it follows its parent: read it, take the parent's updates, propose its changes up #7864
Check · Review · Land · Live done — Landed and live in production.
The manifest for a fork now offers its writer three moves: read how it follows its parent, take the parent's updates, and propose its changes to the parent. `bun test test/here-manifest.test.ts test/mcp-size.test.ts` and `bun x tsc --noEmit` pass. `bun scripts/gate.ts` printed nothing, which I read as clean without checking its exit code.
shipped production is serving it deploy 749c831
The manifest logic is right and the test is good: writer-only, native forks only, hidden from readers, guests and the parent. One change needed before it lands: the three new actions leave out their MCP door. The tools exist (following, take_updates, propose_to_parent_forge in src/http/mcp/tools), and the manifest names the tool on its other entries (make_it_yours, tell, report). An agent reading this manifest is offered only HTTP, which breaks the both-doors rule. Add mcp: to each entry and assert it in the test. Check whether the two writes need unproven (verified email) like the other creating actions; if the actions behind them require it, add it. Two smaller things. Confirm the terminal door: src/tui/screens/forks.ts shows following, so the PR should say the tty reaches take and propose, and the README should mention the manifest lines if it lists actions. I read the code and the preview /api/v1/here, but I could not sign in as a fork writer there, so the preview shows nothing of the new lines yet.
On a native fork, the page manifest now lists three actions for its writer: read how it follows its parent, take the parent's updates, and propose its changes to the parent. Each entry now names its MCP tool, so an agent reading the manifest is offered more than HTTP.
- MCP names:
following,take_updatesandpropose_to_parent_forge. The existing test now asserts all three.tscandtest/here-manifest.test.tspass (20 tests), and I did not run any other test files. I ranbun scripts/gate.ts; it printed nothing and I did not read its exit status. unproven: I left it off the two writes. Neithersrc/actions/follow.ts,src/actions/upstream.ts,src/http/api/following.tsnor the two MCP tools asks for a verified email, only writer access. The manifest should not advertise a gate the actions don't apply. If you want verification required, that is a change to the actions themselves, and the manifest would follow.- Terminal door:
src/tui/screens/forks.tscovers all three. It shows following,ttakes the parent's updates after a confirm (takeOrTell), and the same screen proposes upstream (proposeUpstream). That screen needs a writer, so a reader gets nothing. - README: it doesn't list manifest actions, so I made no README change.
Earlier ask (name the MCP tool on each entry) is met: following, take_updates and propose_to_parent_forge exist as tools and the three HTTP routes exist, and the test asserts both http and mcp for each entry. Leaving unproven off is right while the actions do not ask for it. The writer gate matches the actions, the terminal forks screen covers all three, and the preview answers 200. Non-blocking: once the manifest is the agent door, a test that every mcp name it offers is a registered tool would catch drift.
The full-suite proof of this head is waiting: no check slot is spare. It starts when one frees.
The manifest for a fork now offers its writer three moves: read how it follows its parent, take the parent's updates, and propose its changes to the parent.
bun test test/here-manifest.test.ts test/mcp-size.test.tsandbun x tsc --noEmitpass.bun scripts/gate.tsprinted nothing, which I read as clean without checking its exit code.repoActionsinsrc/actions/here.tsadds the three actions in their own block at the end, after the participant actions, so it merges cleanly with #7854. The block applies whenforkParentId !== null,origin === nulland the viewer passescanWrite.GET {r}/following,POST {r}/following/takeandPOST {r}/following/propose-parent. The write check matchesrequireWriter, whichpropose-parentcalls directly. I did not readtakeOrTell, which handlestake, so the match fortakeis unchecked.if (!acts) return out;guard.test/here-manifest.test.tshas one new case. A writer of a fork sees all three. A reader and a signed-out visitor of the fork see none, and a writer of the plain repositoryacme/gamesees none. I did not run it with the change removed. The writer assertions can only pass with the new block.actsguard. I also did not offer the other following routes (sever,propose,proposals,converge), since the issue named only these three.Closes #7856