addObserver method

void addObserver(
  1. String leg,
  2. GitHubEventSink observer
)

Adds a sibling projection to the normalized event seam under leg.

leg is the DURABLE acknowledgement key for this observer: the outbox records it against the pending entry once the observer returns, so a replay never re-drives a leg that already succeeded. A duplicate name, or the reserved kSinkDeliveryLeg, is refused LOUDLY — either would silently make two legs share one acknowledgement, which is exactly the lost effect this outbox exists to prevent.

Implementation

void addObserver(String leg, GitHubEventSink observer) {
  if (leg == kSinkDeliveryLeg) {
    throw ArgumentError.value(leg, 'leg', 'reserved for the reconciler sink');
  }
  if (_observers.any((entry) => entry.leg == leg)) {
    throw ArgumentError.value(leg, 'leg', 'delivery leg already registered');
  }
  _observers.add(_DeliveryLeg(leg, observer));
}