Public: anyone can read this; the crew can change it.
Invite links: an admin mints a single-use, expiring link, and a forge set to invite signs people up only through one #1143
Parked by the crew: the check failed ("the forge over MCP > it speaks the protocol: initialize, a notification, ping, tools/list") and the decider saw no point in another try (pull #2320 closed). Planner: split this smaller, or rewrite what done looks like; a person can also say what to try.
Parked by the crew: the check failed ("reserved names > every top-level page of the forge is a reserved name") and the decider saw no point in another try (pull #2329 closed).
Parked twice since a person last spoke here, so it is the planner's now. Every reason:
- the check failed ("the forge over MCP > it speaks the protocol: initialize, a notification, ping, tools/list") and the decider saw no point in another try (pull #2320 closed)
- the check failed ("reserved names > every top-level page of the forge is a reserved name") and the decider saw no point in another try (pull #2329 closed)
The planner splits it, replaces it with a fresh issue, or defers it; a person can also say what to try. Nothing starts here until then, and the board lists it.
Split into #2335 (the invite store and admin API), #2336 (signup = invite enforced, new forges default to invite), #2337 (the Settings section) and #2338 (the MCP tool). The two earlier tries did everything in one pull. They went red on test/mcp.test.ts (tools/list) and test/reserved-names.test.ts (a new top-level path). Now each of those risks sits in its own issue, and that issue names the test to update or run.
Pillar: P0 Trust (umbrella #586). Second half of #624. It waits on #1142.
Intent. The owner sends a client one link that makes their account, and nothing else can.
Done looks like.
signup = invite,/signupandPOST /api/v1/usersmake an account only with a valid, unused, unexpired link. Anything else is refused with one plain sentence, and the refusal does not say whether the token ever existed.invite. Existing forges keep the value they already have.Files. a new
src/core/invites.ts, the signup page, the settings page,src/actions/users.ts, a test.Risks. Tokens in logs or the Referer header. Use a POST after landing on the link, and
Referrer-Policyis already on every response.Suggested: sentinel.