Expand description
ORCH-9 (observed tier): one uniform listing of the approval requests waiting for an answer, across every harness supercode drives.
What a source is, at the pinned harness versions. An approval is only listable where some door holds it. At the pin there is exactly one uniform source plus supercode’s own queue:
- Live protocol requests — a request exists while a driven runtime’s
turn is blocked on it, and it is delivered to supercode as an ordinary
runtime event (
crate::HarnessEvent) on the connection that raised it: ACP’ssession/request_permission(hermes, openclaw, grok, gemini, goose, supercode), opencode’spermission.askedbus event, Codex’s server-to-client*Approvalreverse requests, Claude Code’s stream-jsoncan_use_toolcontrol request, and — on a joined supercode runtime — the frontend broker’s ownrequestenvelope. It stops existing the momentharness.v1.runtimes.respondanswers it. - supercode’s own queued subagent approvals
(
crate::subagents::QueuedApproval) — the requests background children raised on the parent’s queue.
There is no file or database source at the pin. hermes 0.21.0 has no
hermes approvals at all, and openclaw 2026.7.1-2 has no
approvals pending | resolve | grants (both are upstream-main-only; see
the version note in docs/composable-harness/inventory/orchestration.md
and the committed help fixtures in crates/harness/src/parity/fixtures/).
ApprovalKind::Stored and ApprovalKind::Proposal are therefore
defined here and never produced: they are the shapes a later pin’s stored
operator approvals and allowlist proposals will land in, and nothing in
this module invents them today.
pi is a further honest absence: its adapter can respond, but pi has no
per-tool-call approval system at all at its pin
(docs/composable-harness/inventory/pi.md §4), so no pi request shape is
recognized — none is ever emitted.
Answering (ORCH-20, controlled tier). This module never talks to a
harness itself. It TRANSLATES one uniform decision — allow_once,
allow_always, deny — into the option token and reply envelope the door
that raised the request already accepts, and
harness.v1.approvals.resolve hands that envelope to
harness.v1.runtimes.respond, the harness’s own door, unchanged. A
decision the request does not offer is refused by name with the offered
ones listed; nothing is ever guessed at, and no adapter learns a new
vocabulary because of this module.
Structs§
- Approval
Option - One answer the door that raised this request accepts.
- Approval
Registry - The live pending requests held by one service’s open runtime connections.
- Approval
Resolution - Everything
harness.v1.runtimes.respondneeds to answer one request. - Approval
Row - One approval request, in the vocabulary shared by every harness.
- Approvals
Query harness.v1.approvals.listrequest.- Approvals
Resolve Params harness.v1.approvals.resolverequest.- Live
Request - One live protocol request as the classifier reads it off the wire.
Enums§
- Approval
Choice - What a caller asked for, once the params have been validated.
- Approval
Decision - The uniform decision
harness.v1.approvals.resolvetakes, in the vocabulary shared by every harness rather than any one door’s spelling. - Approval
Door - Which protocol door raised a live request.
- Approval
Kind - Where a row came from.
- Approval
Resolve Error - Why one resolve could not be planned.
- Approval
Status - Lifecycle state of one approval row.
Functions§
- approval_
harnesses - Every harness id
approvals.listaccepts, in registry order. - classify_
live_ request - Recognize a permission/approval request in one live runtime event.
- lists_
approvals - Whether supercode can list approvals for this harness id at all.
- now_ms
- Wall-clock now in unix milliseconds.
- plan_
reply - Translate one caller’s choice into the token and envelope a request’s own door accepts.
- subagent_
rows - supercode’s own queued subagent approvals, as uniform rows.