Operations
Scoping — read this before you build a dashboard
GET /v1/runs/{id} applies the same rule: a non-privileged agent key may read only
its own runs, and any other id returns 404 with the same shape as a genuinely
missing run — so the endpoint is not an oracle for which run ids exist.
Completion is compare-and-set
POST /v1/runs/{id}/complete transitions the run to a terminal status exactly once
(a compare-and-set on the end timestamp). A repeat call is idempotent and returns
the run as the winner left it — it does not error and it does not overwrite.
Appending events
POST /v1/runs/{id}/events is write-guarded. It is allowed for an owner or
operator session, the config-root lead agent, the sealed subject that owns the run,
or the agent whose id matches the run.
Frames on this ledger take
actor_type, actor_id and event_type as free
strings from the request body. That is why the durable runtime’s
SSE transcript is refused rather than served from
here: a live transcript rendered from caller-supplied actor fields is a forgery
surface. The durable runtime’s own
frame list reads a different table, whose rows are
written only by the platform.