Operational functions return tagged tuples for dashboard use.

Kathikon.status(job_id)
Kathikon.cancel(job_id, reason)
Kathikon.retry(job_id, opts)
Kathikon.rerun(job_id, opts)
Kathikon.pause_queue(queue)
Kathikon.resume_queue(queue)
Kathikon.queue_status(queue)
Kathikon.children(job_id)
Kathikon.result(job_id)
Kathikon.errors(job_id)
Kathikon.dead_jobs(opts)
Kathikon.retry_dead(job_id, opts)
Kathikon.discard_dead(job_id, reason)
Kathikon.history(job_id)

Rerun semantics

Kathikon.rerun/2 creates a new linked job. The original record is unchanged. The new job sets rerun_of and original_job_id for audit trails.

Dashboard facade

Kathikon.Dashboard extends Kathikon.Report.queue_summary/1 with dashboard fields (ui_counts, queues seen in storage) and delegates management to Kathikon.* for CLIs, LiveView, and RPC:

{:ok, queues} = Kathikon.Dashboard.queue_summary()
{:ok, page} = Kathikon.Dashboard.list_jobs(queue: :default, tab: :completed, limit: 50)
{:ok, detail} = Kathikon.Dashboard.fetch_job(job_id)
:ok = Kathikon.Dashboard.pause_all()

CLI: mix kathikon.ops summary

Remote: mix kathikon.ops --node kathikon@host summary (via Kathikon.Dashboard.RPC).

Both nodes must share the same Erlang cookie. The machine running mix kathikon.ops must be a named node, for example:

# Terminal 1 — remote Kathikon node
elixir --name kathikon@127.0.0.1 --cookie SECRET -S mix run --no-halt

# Terminal 2 — ops CLI
elixir --name ops@127.0.0.1 --cookie SECRET -S mix kathikon.ops --node kathikon@127.0.0.1 summary