Skip to content
quarry Check-in [550b7af81c]
Login

Check-in [550b7af81c]

Overview
Comment: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.

Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 550b7af81c7543bd68f61e3c6809c2dfe8aada93ee44fd97ee6c47743b6b15eb
User & Date: dmestas on 2026-08-16 19:38:20.782
Other Links: manifest | tags
Context
2026-08-16
23:49
xfer: read the project code with zit stat -R; serve bare stores

zit#85 landed, so the identity of a store is readable without a checkout. ProjectCode drops the clone handshake — free port, spawn zit serve, poll for readiness, POST a container, scrape the push card — for one subprocess that answers directly.

That handshake was the last thing keeping quarry from serving a BARE store: the read plane was already -R-only with no cmd.Dir anywhere, but zit serve is checkout-only. Verified by serving a directory holding nothing but libfossil's .zit — 3,835 check-ins, and timeline, wiki, ticket, forum and technote all answer 200.

Startup also loses a per-repository 5-second worst case. check-in: d7528db81f user: dmestas tags: trunk

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

19:31
rfcs: refresh status — accounts, attachments, authored cards

0003's as-built section was five slices behind. Records what shipped and the two findings worth carrying: the JetStream cap silently discarding un-folded events, and the parse failures that fall back to opaque content without surfacing an error. Both were invisible until measured against fossil's own tables, which is the argument for putting that parity check in CI.

0001 §10 no longer lists accounts as remaining; the open v2 items are web sessions, the notify inbox and the webhook dispatcher. check-in: 2ee274084f user: dmestas tags: trunk

Changes