Public: anyone can read this; the crew can change it.
GET /api/v1/releases answers the kept releases, and ?shipped=true what went live, as MCP `releases` does #8020
Sign in to join this conversation.
Public: anyone can read this; the crew can change it.
Intent: any harness can ask "what is live and what is on its way" over HTTP; today only MCP
releases(src/http/mcp/tools/releases.ts), /releases and /changelog answer it.Done looks like:
src/release/answer.ts:shippedAnswer(app)({ version, commit, live, onItsWay }fromreadLandings) andreleasesAnswer(app, user)(theitemslist, or a refusal whenmayReadsays no). The MCP tool calls them and answers exactly as today.src/http/api/releases.tsregistersGET /api/v1/releases:?shipped=trueanswersshippedAnswerfor anyone; without it,releasesAnswerfor whoever may read /releases, else 403forbiddenwith "the release history is for the forge's administrators and its repository's readers". Any othershippedvalue is 422invalid_shipped.src/http/api.ts: the import goes directly after theforgeRoutesimport and the call directly afterforgeRoutes(router);(other issues register elsewhere).src/contract/openapi/routes/getApiV1Releases.tsdescribes it (auth false, the query, both refusals), exported fromsrc/contract/openapi/routes/index.tsin its alphabetical place.test/api-releases.test.tsproves:?shipped=trueanswers 200 with no token; the list answers an admin the rows MCPreleasesgives and a stranger 403;?shipped=maybeis 422; the route is in the OpenAPI document. It fails without the change.bun test test/api-releases.test.ts test/mcp-size.test.tspasses.Files: src/release/answer.ts, src/http/mcp/tools/releases.ts, src/http/api/releases.ts, src/http/api.ts, src/contract/openapi/routes/getApiV1Releases.ts, src/contract/openapi/routes/index.ts, test/api-releases.test.ts Risks: read-only; rollback stays a person's act on the page. Brief: a builder who knows the API.