Cyclium.Output.Router (Cyclium v0.2.2)

Copy Markdown View Source

Deduplicates and dispatches output proposals to adapters.

Flow

  1. Insert cyclium_outputs row with dedupe_key unique constraint
  2. If constraint fires → {:duplicate, existing_output}
  3. If insert succeeds → resolve adapter from app config, call deliver/3
  4. On adapter success → update row to :delivered, journal step
  5. On adapter error → update row to :failed, journal step
  6. Emit telemetry at each outcome

Summary

Functions

Route an output proposal through dedupe check and adapter dispatch.

Functions

route(proposal, episode, episode_ctx)

@spec route(Cyclium.OutputProposal.t(), map(), map()) ::
  {:ok,
   %Cyclium.Schemas.Output{
     __meta__: term(),
     created_at: term(),
     dedupe_key: term(),
     delivered_at: term(),
     delivered_ref: term(),
     episode_id: term(),
     error_class: term(),
     error_detail: term(),
     id: term(),
     payload_redacted: term(),
     status: term(),
     type: term()
   }}
  | {:duplicate,
     %Cyclium.Schemas.Output{
       __meta__: term(),
       created_at: term(),
       dedupe_key: term(),
       delivered_at: term(),
       delivered_ref: term(),
       episode_id: term(),
       error_class: term(),
       error_detail: term(),
       id: term(),
       payload_redacted: term(),
       status: term(),
       type: term()
     }}
  | {:error, term()}

Route an output proposal through dedupe check and adapter dispatch.

Returns {:ok, output}, {:duplicate, output}, or {:error, reason}.