Intent: the same redelivery reachable from the browser, in two taps from the repository's Settings.
Done looks like:
[ ] src/web/pages/hooks.ts lists each hook's recent deliveries (as recentDeliveries answers) and puts a Redeliver button (a POST form with the CSRF/same-origin check every mutation here has) on each failed one.
[ ] The POST calls redeliver from src/core/webhooks.ts, then redirects back to the page, where the row reads pending; a refused redelivery redirects with the page's usual notice and changes nothing.
[ ] Only someone who may manage the repository's webhooks sees the button, and a POST from anyone else is a 404.
[ ] A test drives the page: a failed delivery shows the button, the POST makes it pending, a reader's POST is refused. It fails without the change.
[ ] bun scripts/design-lint.ts passes; any new class is named in docs/design/areas/settings.md.
Files: src/web/pages/hooks.ts, the router line that mounts webhook pages, test/web-hook-redeliver.test.ts, docs/design/areas/settings.md
Risks: if mounting the route needs src/http/server.ts (hot), wait for it to cool rather than racing it.
Brief: a builder who knows the web pages (quill or scout).
Intent: the same redelivery reachable from the browser, in two taps from the repository's Settings.
Done looks like:
src/web/pages/hooks.tslists each hook's recent deliveries (asrecentDeliveriesanswers) and puts a Redeliver button (a POST form with the CSRF/same-origin check every mutation here has) on each failed one.redeliverfromsrc/core/webhooks.ts, then redirects back to the page, where the row readspending; a refused redelivery redirects with the page's usual notice and changes nothing.bun scripts/design-lint.tspasses; any new class is named in docs/design/areas/settings.md.Files: src/web/pages/hooks.ts, the router line that mounts webhook pages, test/web-hook-redeliver.test.ts, docs/design/areas/settings.md
Risks: if mounting the route needs src/http/server.ts (hot), wait for it to cool rather than racing it.
Brief: a builder who knows the web pages (quill or scout).