# `Chimeway.Signal`
[🔗](https://github.com/jonlunsford/chimeway/blob/v1.0.0/lib/chimeway/signal.ex#L1)

Host-facing API boundary for submitting workflow progression signals.

Host applications call `track/4` with a tenant id, actor id, event name, and
optional payload. The function durably persists a `Chimeway.Signals.Signal`
row and atomically enqueues a `Chimeway.Dispatch.SignalRouterWorker` job
carrying the new signal's id. The worker (Phase 27-02) is responsible for
routing the signal to whichever workflow runs are waiting on it.

Both side effects share a single `Ecto.Multi` transaction — if the Oban
insert fails, the Signal row is rolled back; no orphaned signals or jobs.

# `track`

```elixir
@spec track(String.t(), String.t(), String.t(), map()) ::
  {:ok, Chimeway.Signals.Signal.t()} | {:error, Ecto.Changeset.t() | term()}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
