Skip to main content
Version: v5.7.0

Approval

Included from Basic tier

A covered run — a change or a workflow run — enters the approval funnel at create: every matched approval policy freezes into a line of a per-subject checklist, the subject holds in pending_approval, and each line must reach its quorum before release. Trust and transport grant approvals ride the same checklist (see subject_kind). Served by the v2 ChangeGovernanceService: ListPendingApprovals (the inbox — the open set), ListApprovalChecklists (the decision history — the decided set, each row an ApprovalHistoryEntry), GetApprovalChecklist, ApproveChecklist, RejectChecklist, BreakGlassRelease and StartApprovedRun.

The decision history lists a checklist to a caller who may read its target, who decided it (an approval row, a rejection or a break-glass — an approver always sees what they decided, even after their read on the target is withdrawn), or who holds the oversight determination — readable on /governance/change or updatable on /admin, the governance administrator — which admits every checklist in the estate. The request's mine narrows it to the caller's own decisions; unset, the server lists the caller's own decisions unless they hold oversight, in which case the whole history.

ApprovalRow​

ApprovalRow is one recorded approval (who/when/comment), tagged to the line it satisfies and stamped with the fingerprint the approver saw.

FieldTypeMeaning
approved_bystringUsername of the approving identity.
commentstringThe approver's optional comment.
created_attimestampWhen the record was created.
fingerprintstringThe content fingerprint the approver saw; the approval binds to it.
idstringThe record's identity.
voided_attimestampSet when a validity lapse re-gated the checklist and voided this row.

ApprovalApprovers​

ApprovalApprovers names who may approve a policy's line. kinds carries the resolution families beyond named users/groups — the impacted_asset_owners kind: resolved per change from the frozen target set to each impacted asset's declared subtree owner, one all-of line per resolved owner (every resolved owner approves — distinct from the per-line n-of-m quorum). A covered create whose impacted targets include one no declaration covers refuses loudly at create.

FieldTypeMeaning
groupsarray of stringApprover group names; any known member of a named group may approve.
kindsarray of stringResolution families beyond named identities — impacted_asset_owners resolves one all-of line per declared subtree owner of the subject's frozen targets.
usersarray of stringApprover principal ids. On a write each entry may be a principal id, a username held by exactly one account, or <provider>:<username> (the account's auth_provider value: local:sam, ldap:corp:sam); the server resolves it and stores the principal id — a username several accounts hold is refused until qualified. Reads carry the stored ids; a checklist line's waiting_on renders them as usernames.

ApprovalChecklist​

ApprovalChecklist is one subject's layered checklist.

FieldTypeMeaning
actionstringThe held subject's action name.
caller_eligibilitystringThe caller's standing on the checklist, mirroring ApproveChecklist's verdict: "eligible", "self_approval_excluded", "already_approved" or "not_approver". Affordance honesty while the checklist is open — the server stays the enforcement.
caller_may_rejectbooleanThe caller may reject: a named approver on any line, with the self-approval exclusion applied line-wise.
completed_attimestampWhen the checklist completed — every line satisfied. Unset while pending.
contextApprovalContextWHY the subject was raised — the approval context (see below): the requester's kind and rationale, the originating agent with its tier at creation, the correlation chain's hops and the recommendation the subject implements. On a trust raise it names the agent whose trust is being raised (the agent block, by the fleet id the approver-scoped subject read admits), the granter as requester and the grant's note as rationale, with no chain. Served to the checklist's approvers (any line, group membership resolved), its requester and holders of the agent-governance reviewer determination; absent for every other reader, and on transport-grant and release subjects.
finalise_reasonstringThe finaliser's stated reason (mandatory on reject and break-glass).
finalised_bystringWho finalised (rejected/released/break-glassed) and why.
fingerprintstringThe content fingerprint approvals bind to; content drift voids recorded approvals.
first_run_anywherebooleanNo prior run of this content anywhere (the first-run-anywhere flag).
held_reasonstringWhy an approved subject is still held (the window refusal), when it is.
idstringThe record's identity.
linesarray of ApprovalChecklistLineThe matched policies' lines, frozen at funnel entry; every line must be satisfied.
prior_runsarray of PriorRunThe prior-run evidence panel.
quorum_deadline_attimestampThe effective quorum TTL deadline — the earliest across the lines; a pending checklist expires into rejected when it lapses.
release_modestring"approved" | "break_glass" for a released subject.
released_attimestampWhen the released subject started.
requested_attimestampWhen the covered create entered the funnel.
requested_bystringUsername of the requester — the covered create's author.
run_idstringThe held subject: a change or workflow run id.
run_kindstringThe held subject's kind: "change" | "workflow" | "trust_grant" (a trust raise) | "agent_release" (a release promotion) | "agent_rollover" (a release rollover of a lane serving a governed environment) | "transport_grant". For the non-run kinds run_id carries the held subject's own id.
statusstring"pending" | "approved" | "released" | "rejected" | "expired".
subject_idstringThe held subject's own id: equals run_id for change and workflow subjects; the grant's id for a trust or transport grant subject.
subject_kindstringThe held subject itself: "change" and "workflow" echo the run (subject_id = run_id); a trust or transport grant names the grant's own subject, so review surfaces can deep-link it.
target_pathstringThe subject's target node path.
validity_deadline_attimestampThe approval validity deadline, set at completion; a lapse voids the approvals and re-gates the subject.
windowApprovalWindowStateMaintenance-window coverage of the target path at read time, set when a line requires a window and the composition serves windows.

ApprovalChecklistLine​

ApprovalChecklistLine is one matched policy's line, frozen at funnel entry.

FieldTypeMeaning
approvalsarray of ApprovalRowThe approvals recorded against this line. Every line carries its own rows: on a multi-line checklist each line names the approver who decided it, in the subject read, the decision history and the export alike.
approver_kindstring"named" (the policy's own users/groups) or "impacted_asset_owners" (one line per owner resolved from the frozen target set).
approversApprovalApproversWho may approve the line, frozen from the policy at funnel entry.
idstringThe record's identity.
owner_pathstringThe resolved owner declaration's subtree root on an impacted_asset_owners line; empty on a named line.
policy_idstringThe matched policy.
policy_namestringThe matched policy's display name at funnel entry.
policy_scope_pathstringThe owning policy's delegation scope ('' = global) — with policy_name, quorum and require_window, the line's policy summary.
quorumintegerDistinct approving identities this line requires.
require_change_referencebooleanFrozen from the policy: a typed external reference must be present before an approval is accepted.
require_windowbooleanFrozen from the policy: the approved subject releases only inside an open admitting maintenance window.
satisfiedbooleanThe line's quorum is met.
self_approvalbooleanFrozen from the policy: whether the requester's or the change owner's approval counts toward this line.
strictbooleanFrozen from the policy: a strict line is never subsumed by run-level satisfaction.
waiting_onarray of stringThe identities the line still waits on: the named users plus the named groups' known members, minus identities whose approval is already recorded and, on a self_approval: false line, minus the requester and the change owner. Empty on a satisfied line, and when no member of a named group is known to the server (the approvers field still names the groups).
waiting_on_youbooleanThe calling principal may still approve this line.

ApprovalHistoryEntry​

ApprovalHistoryEntry is one row of the decision history (ListApprovalChecklists): the checklist as GetApprovalChecklist serves it plus the decision summary the history tables print — the outcome, when it was decided, by whom, and the note. The listing is ordered by decided_at, newest first, and cursor-paged.

FieldTypeMeaning
checklistApprovalChecklistThe full checklist — lines, approval rows, clocks, fingerprint, the caller's standing and the approval context.
decided_attimestampWhen the decision landed: the release instant for a released subject, the completion instant for an approved-held one, the finalisation instant for a rejection or timeout, the funnel-entry instant while pending.
decided_byarray of stringThe identities whose decision the row records: the live approval rows' approvers across every line (each line's approver on a multi-line checklist, in recording order), plus the rejecter or the break-glass releaser. Empty on a timeout.
decided_by_youbooleanThe calling principal is among decided_by — "me" in a history table.
notestringThe decision's note: the rejection or break-glass reason, else the approvers' comments.
outcomestring"approved" (quorum complete — held for its window or released by approval) | "rejected" | "timed_out" (the quorum TTL lapsed) | "break_glass" (released without quorum) | "pending".

ApprovalContext​

ApprovalContext is the WHY behind a held change or workflow run — what an approver needs to decide beyond the subject's name: who raised it (a person, or an agent with its trust tier at creation and its owner), the stated rationale, the correlation chain the subject belongs to (the incident or operator request that invoked the agent → its governed reads → the recommendation → this subject) and the recommendation it implements. The platform explains itself: the create lane stamps the provenance under the run's server-owned opschain metadata namespace (requester_kind, rationale, recommendation_id, agent_id, agent_code, agent_project, tier_at_creation, correlation_id — never client-settable), and the inbox reads it back set-based, one read per page. opschain approvals show <run-id> prints it; the GUI inbox opens it per row and shows the rationale above the approve/reject controls. For a trust raise the context names the agent being raised in its agent block (fleet id, code, project, owner, trust-review link) so the inbox can open that agent's detail and trust review under the approver-scoped subject read (opschain docs change-governance, "What an approver may read"); requester_kind is user (the granter), rationale the grant's note.

FieldTypeMeaning
agentApprovalContextAgentThe originating agent, set when requester_kind is "agent".
chain_summaryarray of ChainHopThe chain's hops in order — the most recent 20 — each the chain page's row, RBAC-redacted per viewer exactly as ChainService.ListChainHops redacts it (redacted hops carry kind, depth and timestamp only).
chain_truncatedbooleanAn older remainder exists beyond the summary; the chain page carries it.
correlation_idstringThe chain the subject belongs to (the run's correlation id).
imagesarray of ApprovalContextImageThe image artifacts the subject produced (recorded by its run) or consumes (named by an artifact://… input), each with the facts an approver decides provenance on — identifier, digest, provider, registry, source commit, producing run (opschain docs image-builds, "The approver's checklist").
metadata_jsonstringThe subject's own metadata document as JSON text — the operator keys and the server-owned opschain provenance namespace; "" when none.
rationalestringThe requester's stated reason, verbatim (opschain.rationale): optional for a person, mandatory for an agent.
recommendationApprovalContextRecommendationThe recommendation the subject implements, when it does (stamped opschain.recommendation_id, or the accept flow's approved_from_recommendation).
requester_displaystringThe requester as the inbox shows it: the agent's code for an agent principal, else the requesting username.
requester_kindstring"user" or "agent"; a run created before provenance stamping reads as "user".
transcript_refstringThe redacted adapter transcript evidencing the agent's reasoning, as the API path of the exchange sealed on the chain (/api/projects/{project}/agents/{code}/adapter_transcripts/{exchange}); empty when none was sealed or the agent's path is outside the viewer's read grant.

ApprovalContextAgent​

ApprovalContextAgent names the agent that raised the subject.

FieldTypeMeaning
codestringThe agent's code.
idstringThe agent's identity (its member id).
ownerstringThe agent's owning user or group at read time (owned_by).
project_pathstringThe project the agent is registered under.
tier_at_creationstringThe effective trust tier the server applied when the subject was created ("supervised", "autonomous"), frozen on the run.
trust_review_linkstringThe agent's trust-review document (/api/agents/{id}/trust_review).

ApprovalContextImage​

ApprovalContextImage is one image artifact on a subject's checklist: a change that builds an image records it on its run, and a change that deploys one names it through an artifact://<node path>/<code>@<digest> input. The approver sees what was built, where it lives, which build backend and registry produced it, the sealed commit it came from and the run that produced it — the same facts the core.image_provenance promotion-policy rule refuses on when they are missing (opschain docs image-builds, "The promotion-policy rule").

FieldTypeMeaning
artifact_idstringThe image record's identity.
codestringThe artifact code.
digeststringThe content digest (sha256:…) or the backend's resource id as id:….
identifierstringThe backend's image reference: a registry reference with tag, an AMI id, a gallery image version id.
inputstringThe input that named the artifact, for a consumed image; empty for a produced one.
node_pathstringThe node the record is stored on.
producing_run_idstringThe run that produced the image.
providerstringThe build-provider code the producing step dispatched with; empty when it dispatched without one.
referencestringThe artifact://<node path>/<code>@<digest> reference.
registrystringThe registry code the image was pushed to; empty when none was dispatched.
rolestring"produced" (recorded by the subject's run) or "consumed" (named by one of its inputs).
source_commitstringThe sealed commit the producing run executed.

ApprovalContextRecommendation​

ApprovalContextRecommendation summarises the recommendation a subject implements.

FieldTypeMeaning
created_attimestampWhen the recommendation was filed.
idstringThe recommendation's identity.
statusstringIts lifecycle status (open, accepted, dismissed, expired, superseded).
summarystringThe recommendation's body, bounded to its opening lines.
titlestringIts title.

ApprovalWindowState​

ApprovalWindowState names the maintenance-window coverage of a held subject's target path at read time: state is "active" (an active window covers the path), "scheduled" (none active, but one is scheduled) or "none". Coverage informs the reader; the release gate's admission decision stays authoritative.

FieldTypeMeaning
node_pathstringThe target path whose window coverage is reported.
scheduled_starttimestampThe next scheduled window's start, when state is "scheduled".
statestring"active" | "scheduled" | "none".
untiltimestampThe active window's end, when state is "active".
window_idstringThe covering window, when state names one.

ApprovalFunnel​

ApprovalFunnel is the window's checklist flow by terminal state.

FieldTypeMeaning
approvedinteger/stringChecklists created in the dashboard window now approved (completed, awaiting release).
expiredinteger/stringChecklists created in the window now expired (the quorum TTL lapsed).
pendinginteger/stringChecklists created in the window, by their current status.
rejectedinteger/stringChecklists created in the window now rejected.
releasedinteger/stringChecklists created in the window now released (the subject started).
  • opschain docs change-governance — the funnel end to end: matching, freezing, quorum, release and break-glass.
  • opschain docs resources/approval_policy — the matrix rows that become checklist lines.
  • opschain docs resources/asset_owner — the subtree owner declarations the impacted_asset_owners kind resolves.
  • opschain docs maintenance-windows — what an admitting window is, for require_window lines.