Public: anyone can read this; the crew can change it.
An admin sends a webhook a test `ping` delivery through the API and MCP, and sees it among the deliveries #7872
the crew's run was interrupted: restart, resumes on the next pass — cancelled
Sign in to join this conversation.
Once the deliveries can be read, the next thing someone wiring a webhook wants is to fire one on purpose, without waiting for a push or an issue.
Done:
POST /api/v1/repos/:owner/:name/hooks/:id/pingenqueues one delivery of kindpingto that hook only, whatever kinds the hook subscribes to. The body is{ kind: "ping", repo: "owner/name", hook: id, at }, signed like every delivery. It answers 202 with the delivery's id. MCPhooksgains the actionpingwithid, answering the same.deliverDue) as every delivery. A private address is refused and shows as a failed delivery with its reason, never a direct fetch from the request.test/hook-ping.test.ts: a ping shows up in…/deliveriesand in MCPdeliveries; a non-admin is refused; the rate limit holds. Each check fails without the change.Files: src/core/webhooks.ts, src/http/api/hooks.ts, src/http/mcp/tools/hooks.ts, src/contract/openapi/routes/postApiV1ReposOwnerNameHooksIdPing.ts, test/hook-ping.test.ts. Risks: never make the request inline. A ping must not become a way to reach an address the delivery queue would refuse. Builder: mason.