20 check-ins that include changes to files matching 'internal/webhook/*'
|
2026-10-03
| ||
| 00:48 |
land admins-send-reset-links
Checks tested the merge with trunk at 83aec99ff875; trunk has moved since. check-in: 6ddc78b549 user: dmestas tags: trunk | |
| 00:45 | webhook test: wait for each fan-out delivery on its own closed check-in: 0379e9ab02 user: zeitgeist tags: webhook-fanout-test-waits | |
|
2026-10-02
| ||
| 00:47 | TestFansOutPerSubscription waits for the failing endpoint too instead of racing it check-in: c0f6fcb999 user: zeitgeist tags: admins-send-reset-links | |
|
2026-09-26
| ||
| 17:53 | Guarded writes begin on the writer, and every caller uses them closed check-in: 48b279e41c user: dmestas tags: check-then-write-is-one-transaction | |
| 17:17 | land a-ci-result-is-never-lost check-in: ad65a9f4a7 user: dmestas tags: trunk | |
| 17:15 | A CI result is recorded before the run is marked complete, and CI webhook events carry distinct ids closed check-in: 11209ad672 user: dmestas tags: a-ci-result-is-never-lost | |
|
2026-09-22
| ||
| 18:12 | land the-endpoints-answer-is-the-answer check-in: c65158c920 user: dmestas tags: trunk | |
| 17:47 | a webhook ping or redeliver reports the endpoint's answer; it does not fail because the endpoint did closed check-in: 3b97c8942a user: dmestas tags: the-endpoints-answer-is-the-answer | |
|
2026-09-06
| ||
| 12:38 | landing: decision controls skip the override validation that silently blocked them closed check-in: ef78b6d72f user: dmestas tags: fleet-edit-mirror | |
|
2026-09-04
| ||
| 10:48 | land hook-parity check-in: 7a5794bff6 user: dmestas tags: trunk | |
| 10:45 | Hook parity: API verbs, repo-scoped sends, secret rotation with an overlap, settings trail, build filter closed check-in: d04d8a0926 user: dmestas tags: hook-parity | |
| 10:19 | land hook-deliveries check-in: bc9bb59afc user: dmestas tags: trunk | |
| 10:11 | Webhook deliveries: record every attempt, show them per endpoint, redeliver and ping closed check-in: 7622c1bc01 user: dmestas tags: hook-deliveries | |
|
2026-08-29
| ||
| 16:41 | merge trunk into attention-0 check-in: 45774534b5 user: dmestas tags: attention-0 | |
| 16:26 | land flakefix-2 check-in: 788472b04b user: dmestas tags: trunk | |
| 16:25 | webhook: win the pause race by construction, not by sleep closed check-in: 4c1bc2d5b6 user: dmestas tags: flakefix-2 | |
|
2026-08-24
| ||
| 18:08 |
Suite green across 29 packages; merges clean.
Four commits: the fan-out onto the vocabulary, per-subscription event selection, the settings surface, and the RFC correction that preceded them. check-in: 69fc3f06d1 user: dmestas tags: trunk | |
| 17:16 |
Subscriptions select their events
A webhook took everything or nothing. It now names vocabulary patterns: '*', a bare noun for every action on it, or an exact kind. Checked at the moment it is set, because a webhook that silently delivers nothing reads as a broken forge. check-in: e9547dcc49 user: dmestas tags: hooks-vocabulary | |
| 17:13 |
Webhooks fan out from the vocabulary, not from the ops layer
A ticket closed by push notified nobody, because only ops queued webhooks. One consumer on quarry.evt.> turns every raised event into deliveries, so arrival path stops mattering. Deletes kindOf: the delivery's kind was sliced off an idempotency key. check-in: f2ea5f5c1a user: dmestas tags: hooks-vocabulary | |
|
2026-08-16
| ||
| 19:38 |
webhooks: the standard outbound surface (0001 Principle 6)
Activity events reach third parties over signed HTTP, so an integrator never has to speak NATS. Subscriptions live in forge OLTP; the signing secret is printed once at creation and never readable again. Delivery is durable rather than a fire-and-forget goroutine: each (event, subscription) is one JetStream message, acked on 2xx, NAKed with growing backoff, MaxDeliver as the dead-letter boundary. An endpoint down during a deploy still gets its events — proven live by writing with the receiver stopped and seeing the delivery land when it returned. 0003 §3 names dagnats for this class of work; it runs on the JetStream quarry already embeds, so this uses that directly and leaves dagnats as the upgrade path when v3 brings the engine in for CI. Mentions are not forwarded: they address a person, not a repository. check-in: 550b7af81c user: dmestas tags: trunk | |