Skip to main content
Reporter has 12 unique emitted business-event definitions. They are CloudEvents 1.0 binary-mode messages carried over RabbitMQ when STREAMING_ENABLED=true. Reporter does not publish these facts to Kafka. When streaming is off, manager and worker use a no-op emitter and do not start an outbox dispatcher.

Envelope and routing

Every event uses ce-source reporter, ce-schemaversion 1.0.0, and a source-qualified ce-type in the form studio.lerian.reporter.<resource>.<event>. The payload is JSON with snake_case keys. Use the shared envelope for the complete CloudEvents header contract.

Delivery semantics

Reporter emits after the business-state change has committed. Publication errors do not fail the underlying operation.
  • Important: direct publication, with durable outbox fallback when the broker circuit is open.
  • Critical: Reporter skips direct publication. It always persists the event to the durable outbox for dispatch and retry.
  • Both policies request on_routable_failure, but the current RabbitMQ routes define no explicit DLQ destination. The publisher sees a routable failure. No copy goes to a dead-letter route.
  • Broker delivery is at least once. Consumers must be idempotent and deduplicate with (ce-source, ce-id).

Emitted event catalog

Both manager and worker emit report.errored. All variants use deterministic ce-id reporter.report.error.<report_id>. A consumer deduplicating on (ce-source, ce-id) therefore keeps only the first report.errored received for a report_id. Critical deadline transitions use reporter.deadline.<event_type>.<deadline_id>.<timestamp>.

Complete data contracts

These TypeScript-style declarations mirror the JSON wire shape. ? means the property is optional. | null means the property is present but can be JSON null. Timestamps are RFC 3339 strings.

Separate internal command rail

Manager sends worker a non-CloudEvents JSON command on RabbitMQ. It uses RABBITMQ_EXCHANGE, RABBITMQ_GENERATE_REPORT_KEY, and RABBITMQ_GENERATE_REPORT_QUEUE, with persistent delivery. This command is not part of the public event catalog.

Inbound event status

Reporter consumes no public lib-streaming fact. Its Hub subscriber remains unavailable: enabling it is rejected at startup until a compatible downstream worker contract exists.