addObserver method
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));
}