Skip to content

feat(fabric): let a subscriber callback fail so the event is redelivered (RIG-4030) - #1355

Draft
rigel-mintaka wants to merge 2 commits into
compass-managed/rig-3107-t4-transport-prooffrom
compass-managed/rig-4030-callback-error
Draft

rigel-mintaka wants to merge 2 commits into
compass-managed/rig-3107-t4-transport-prooffrom
compass-managed/rig-4030-callback-error

Conversation

@rigel-mintaka

@rigel-mintaka rigel-mintaka commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

This PR is part of a stack containing 6 PRs:

  1. main
  2. feat(comms): publish message_posted on the event fabric (RIG-3107) #1333
  3. feat(fabric): propagate trace context, add OnReconnect, pin serial callbacks (RIG-3107) #1337
  4. feat(delivery): consume message_posted from the event fabric (RIG-3107) #1345
  5. fix(delivery): fire a hold that lost the race to its settle; skip held in start sweeps (RIG-4031) #1351
  6. test(delivery): prove single-claim across instances and slow-callback redelivery (RIG-3107) #1353
  7. "feat(fabric): let a subscriber callback fail so the event is redelivered (RIG-4030)" (this PR)

The EventFabric callback now returns an error. nil acks; an error or a
panic Naks through retryOrPark and parks on DLQSubject at MaxDeliver.

Delivery returns an error for a transient read before any hold or
dispatch, and nil for a missing row or a deliberate skip, so a retry
starts clean. Reads inside fanOut still log and ack, since a retry would
repeat mention steers. hold keeps held entries in commit order, so a
redelivered ref cannot fire behind a later one.

Also proves the cutover record T4 (b)/(c): error redelivery to MaxDeliver
and the DLQ park with Compass-Original-Subject.

Built on the recommended option; draft until that decision is ruled.

Spec-impact: pending RIG-4030 (the callback signature in the cutover
record T2 Interfaces line). Refs RIG-4030, RIG-3107

Co-authored-by: Matt Wilkinson matt@rigel.build

…red (RIG-4030)

The EventFabric callback now returns an error. nil acks; an error or a
panic Naks through retryOrPark and parks on DLQSubject at MaxDeliver.

Delivery returns an error for a transient read before any hold or
dispatch, and nil for a missing row or a deliberate skip, so a retry
starts clean. Reads inside fanOut still log and ack, since a retry would
repeat mention steers. hold keeps held entries in commit order, so a
redelivered ref cannot fire behind a later one.

Also proves the cutover record T4 (b)/(c): error redelivery to MaxDeliver
and the DLQ park with Compass-Original-Subject.

Built on the recommended option; draft until that decision is ruled.

Spec-impact: pending RIG-4030 (the callback signature in the cutover
record T2 Interfaces line). Refs RIG-4030, RIG-3107

Co-authored-by: Matt Wilkinson <matt@rigel.build>
@linear-code

linear-code Bot commented Sep 26, 2026 •

Copy link
Copy Markdown

RIG-4030

RIG-3107

Spec-impact: none. Refs RIG-4030

Co-authored-by: Matt Wilkinson <matt@rigel.build>
@github-actions

Copy link
Copy Markdown

Compass engineering docs preview: https://compass-managed-rig-4030-cal.compass-eng-docs.pages.dev

Deployed from compass-managed/rig-4030-callback-error at 5b5c8cb.

Changed pages:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant