feat(automation,messaging): unified http/notify executors + generic HTTP outbox (ADR-0018 M3)#1483
Merged
Merged
Conversation
…TTP outbox (ADR-0018 M3) Promotes a generic, reliable outbound-HTTP delivery outbox into service-messaging and routes the Flow `http` node through it, closing the "http_request is a bare fetch with no retry" gap. Collapses the five divergent outbound verbs onto canonical `http` / `notify`. service-messaging (new, additive): - http-outbox.ts: IHttpOutbox / HttpDelivery (generic raw-callout shape: source/refId/dedupKey/label/signingSecret), HttpRedeliverError - http-sender.ts: sendOnce + classifyAttempt + 7-step jittered retry schedule - http-dispatcher.ts: HttpDispatcher (per-partition cluster lock, claim/ack) - sql-http-outbox.ts + objects/http-delivery.object.ts (sys_http_delivery): durable store; dedup (source, dedup_key), partition affinity on ref_id - memory-http-outbox.ts: in-memory backend for tests - MessagingService gains setHttpOutbox()/isHttpDeliveryReady()/enqueueHttp(); plugin wires SqlHttpOutbox + HttpDispatcher at kernel:ready service-automation: - canonical `http` executor: durable mode enqueues onto the messaging HTTP outbox (retry/dead-letter), else inline fetch preserving http_request request/response semantics - engine.registerNodeAlias(): delegating executor + deprecated/aliasOf descriptor; http_request / http_call / webhook registered as aliases of `http` - notify descriptor marked needsOutbox (emit is outbox-backed) spec: flow.zod adds `http` to the builtin node-type seed set Tests: http-outbox (6) + http-nodes (7); full suites green (service-messaging 108, service-automation 125). plugin-webhooks cut-over to the shared outbox is a follow-up (Phase 5). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
xuyushun441-sys
added a commit
that referenced
this pull request
Jun 1, 2026
…x (ADR-0018 M3 Phase 5) (#1484) plugin-webhooks no longer ships its own delivery engine. The durable outbox, cluster-coordinated dispatcher, retry/backoff/dead-letter, and retention are removed and replaced by the generic sys_http_delivery outbox + HttpDispatcher in service-messaging (promoted in #1483). Webhooks keep only their domain concerns: the sys_webhook config object, the AutoEnqueuer, and the redeliver endpoint. service-messaging: - MessagingService gains redeliverHttp(id) + listHttp(filter) over the HTTP outbox plugin-webhooks (BREAKING): - requires MessagingServicePlugin (declared dependency) - AutoEnqueuer enqueues source='webhook' rows via messaging.enqueueHttp (dedupKey '<webhookId>:<eventId>', refId=webhookId, label=eventType, signingSecret=secret) — fire-and-forget, off the write path - redeliver endpoint backed by messaging.redeliverHttp - removed sys_webhook_delivery object; Setup nav points at sys_http_delivery - deleted outbox/sql-outbox/memory-outbox/dispatcher/http-sender/partition/ retention + their tests; dropped the ./sql subpath export - WebhookOutboxPluginOptions reduced to { autoEnqueue } - AutoEnqueuer constructor takes an HttpEnqueueFn instead of IWebhookOutbox No data migration (system not yet live). Tests: plugin-webhooks auto-enqueuer (10) rewired to the shared enqueue; service-messaging 108 green. Co-authored-by: Jack Zhuang <277994282+os-zhuang@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Implements ADR-0018 M3 — introduce outbox-backed
http/notifyexecutors and registerhttp_request/http_call/webhookas deprecated aliases.The generic, reliable outbound-HTTP delivery outbox is promoted into
service-messaging(the raw-callout counterpart to the notification outbox) and the Flowhttpnode routes through it, closing the "http_requestis a barefetch()with no retry" reliability gap. The five divergent outbound verbs collapse onto canonicalhttp/notify.Changes
service-messaging(new, additive):http-outbox.ts—IHttpOutbox/HttpDeliverygeneric raw-callout shape (source/refId/dedupKey/label/signingSecret),HttpRedeliverErrorhttp-sender.ts—sendOnce+classifyAttempt+ 7-step jittered retry schedulehttp-dispatcher.ts—HttpDispatcher(per-partition cluster lock, claim/ack), reusing the existingDispatchClustersql-http-outbox.ts+objects/http-delivery.object.ts(sys_http_delivery) — durable store; dedup(source, dedup_key), partition affinity onref_idmemory-http-outbox.ts— in-memory backend for testsMessagingServicegainssetHttpOutbox()/isHttpDeliveryReady()/enqueueHttp(); the plugin wiresSqlHttpOutbox+HttpDispatcheratkernel:readyservice-automation:httpexecutor —durable: trueenqueues onto the messaging HTTP outbox (retry/dead-letter); otherwise an inlinefetch()preservinghttp_request's request/response semanticsengine.registerNodeAlias()— delegating executor +deprecated/aliasOfdescriptor;http_request/http_call/webhookregistered as aliases ofhttp(old flows keep running)notifydescriptor markedneedsOutbox(its delivery is outbox-backed viaemit)spec:flow.zodaddshttpto the builtin node-type seed set.Tests
http-outbox.test.ts(6),http-nodes.test.ts(7)spec/plugin-approvals/restbuild cleanFollow-up (not in this PR)
plugin-webhooksover to the sharedsys_http_deliveryoutbox (it still uses its ownsys_webhook_deliveryoutbox/dispatcher). The generic substrate is already in place and shared-ready.🤖 Generated with Claude Code