Drives the public mimir API surface end-to-end as one repeatable command —
no network, no external services. The HTTP client stage runs a real Req
request against an in-process plug, so JSON encoding, response atomization,
and error mapping execute production code at the transport seam. The health
and turn-event stages run the real GenServers, ETS tables, and telemetry
handlers.
Stages
- descriptor — full parse incl. agent identity + outcome hint; rejection path
- catalog — resolver seam keeps/drops entries
- oracle — placement on a healthy catalog; no-candidate on empty and on degraded-lane catalogs
- decision record — id format, grant echo, agent echo
- route log — meta building for placed and grant-failed outcomes
- pricing — config-table math, vendored-DB load, unknown-model zero
- health — telemetry-driven degradation and recovery
- turn events — current-request buffering, ordering, envelope shape
- router client — placement round-trip and http_error mapping over a real Req request (skipped unless run under
MIX_ENV=test— Plug is a test-only dependency; CI's test job runs it for real) - redact — provider split, truncation, payload gating
Usage
mix mimir.smokeExits 0 on all-pass, non-zero on any failure. run_smoke/0 is also
asserted by the test suite so CI verifies the composed surface on every
build.
Summary
Functions
Pure smoke flow — returns {:ok, results} or {:error, results} where
results is a list of {stage_name, :pass | :fail | :skip, detail}. Does not
print or halt; suitable for calling directly from tests.
Functions
@spec run_smoke() :: {:ok, [{String.t(), :pass | :fail | :skip, String.t()}]} | {:error, [{String.t(), :pass | :fail | :skip, String.t()}]}
Pure smoke flow — returns {:ok, results} or {:error, results} where
results is a list of {stage_name, :pass | :fail | :skip, detail}. Does not
print or halt; suitable for calling directly from tests.