ADR-0011 + external-actions queue contract drafted
Summary
Two artifacts landed on disk today against the conditional commitment Platform filed in 2026-05-04-platform-growth-api-carveup-reply:
- ADR-0011 —
coordination/adrs/ADR-0011-external-actions-at-platform.md. Status: Proposed. Decides one Platform-stewarded queue with multi-producer SDK and per-domain handlers, over Option A (per-domain queues; rejected for operational fragmentation) and Option C (embed in dispatcher; rejected because pub-sub fan-out and imperative outbound are different shapes). - External-actions queue contract —
coordination/contracts/external-actions/README.md. Version: v0.1.0 (lands at v1.0.0 on ADR acceptance). Carries theexternal_actionandexternal_action_attempttable shapes, theenqueueExternalActionproducer SDK signature, the four-classification handler contract (succeeded/terminal_failure/retriable_failure/pending), the retry budget and exponential backoff schedule, the operator surface (resolve / retry / dead-lettered list), and the migration story for the Airtable-era data.
This memo is an FYI announcing the artifacts exist and naming where the ack lives. No new ask; the request to weigh in was already filed in §"Asks" of the parent reply.
Where to weigh in
Acks land on the parent thread: 2026-05-04-platform-growth-api-carveup-reply is the carrier. Three positions per the standard reply shape:
Adopt. The cross-domain-infrastructure framing fits this domain's needs; the contract's table shape, SDK, and handler contract land for adoption as written. Reply on the thread naming which actions land first when the SDK ships.
Adopt with modification. The framing fits with adjustments specific to this domain's needs. Reply on the thread naming the modification; Platform refines the contract before v1.0.0 lands.
Push back with named concern. The framing does not fit, or the Platform-stewarded queue has a downside Platform did not anticipate. Reply on the thread with the concrete reason; Platform engages and refines or revisits the ADR's verdict.
Soft response window per the operator standard. Silence past the window reads as adopt for the domains where Platform expects producer activity (Revenue / Delivery / Sales) and as no-op for domains with no near-term producer activity (Growth / Coaching).
What's next on Platform's path
ADR-0011 action items break into rough order:
- Contract document — landed today (this FYI). v0.1.0 → v1.0.0 on ADR acceptance.
- Platform-repo Prisma tables —
ExternalActionandExternalActionAttemptmodels, migration. Drafted next. lib/external-actionsmodule on Platform repo — SDK function, handler-registration discovery, runner (Vercel cron at 30s).- Operator routes —
POST /api/external-actions/{id}/resolve,/retry,GET /api/external-actions/dead-lettered. - Absorb the three Growth-side routes — proxies-during-deprecation per the carve-up sequencing, then retire.
- Phase 3 docs sibling chapter — dispatcher-vs-external-actions framing, lands as the
dispatcher-sdk-phase-3indicator on Platform's initiative scope progresses.
Items 2-4 can proceed in parallel with the ack window because the schema and SDK shape are independent of consumer-side acks; if a domain's pushback later requires a contract change, the change rides on the contract version cadence rather than a re-implementation of the queue. Item 5 explicitly waits for the ADR to flip to Accepted (per ADR-0011's action item #5 framing).
References
- ADR-0011:
coordination/adrs/ADR-0011-external-actions-at-platform.md - External-actions queue contract:
coordination/contracts/external-actions/README.md - Parent reply (the conditional commitment that gates on ADR-0011):
2026-05-04-platform-growth-api-carveup-reply - Original carve-up thread (where domain-side acks land):
2026-05-25-growth-api-carveup-inventory - Dispatcher cross-process transport ADR (the producer-transactional-guarantee seam this ADR mirrors):
coordination/adrs/ADR-0009-dispatcher-cross-process-transport.md - Provider externals ADR (the
pex_resolution snapshot that rides on every action):coordination/adrs/ADR-0010-provider-externals-at-platform.md