Skip to content

Status

BirdDog is on version 0.0.0. Until 1.0, a minor release can change the public API, so pin the version you test against.

  • Retry schedule. A failed delivery retries after 2 seconds, doubling each time, capped at 5 minutes. After 20 attempts the reply is exhausted. Its row stays in the outbox, and BirdDog stops posting it and stops waking for it.
  • At-least-once. If the recipient accepts a reply but recording the receipt fails, the retry uses the same mail key. Recipients must admit a repeated key idempotently.
  • Malformed rows. A row that does not parse is deleted during a drain. A malformed row met during fan-out fails that fan-out.
  • Fan-out writes first. Every reply is persisted before the wake is scheduled. If scheduleWake fails, fanOut rejects but the replies are already in the outbox, so replaying the settlement is safe.
  • Invalid input. agentJob and decodeAgentJob throw a schema error on input that does not match. fanOut rejects with BirdDogError("invalid agent job payload") for a job whose payload is not BirdDog’s.
  • Host failures. The Promise mail room wraps a failing port in a BirdDogError and keeps your original error as its cause. The messages are outbox read failed, outbox write failed, outbox delete failed, mail transport failed and wake scheduling failed. A post that throws during a drain is logged and retried, not rethrown.

BirdDog is MIT licensed. See LICENSE.