Promotion Gate Ownership Contract

Serving interfaces and ownership verified against 60913a04352cb4899ab6443e596811b11cc3f01a on 2026-09-30. Source verification does not establish deployed acceptance. Recheck the client and endpoint classes below with rg -n 'MapPost|MapGet|RequireAuthorization' src/Policy/StellaOps.Policy.Engine/Endpoints/PolicyPackEndpoints.cs src/Policy/StellaOps.Policy.Engine/Endpoints/Gateway/GateEndpoints.cs.

Purpose and owners

This contract separates policy evaluation from permission to promote and execute a release. The complete governed journey also needs target observations, recovery, the exact decision evidence and later risk response. Those outcomes remain subject to the core acceptance contract.

ResponsibilityOwner and boundary
Advisory/VEX source observations and corpus publicationVulnerabilities hub, including its carried Concelier/Excititor libraries. Ingestion does not authorize a release.
Scan attempts, component inventory and scan evidenceScanner, through its owner API/events. A completed scan is not a promotion decision.
Policy evaluation and effective policy inputsPolicy Engine, using its own data and authorized owner contracts.
Release identity, environment binding, approval policy and committed release decisionRelease Orchestrator (RO). It records the evaluated basis and owns promotion state.
Approval, exception and dispatch enforcementRO applies its current quorum, signing, evidence, target and execution rules. An active signed exception remains distinct from a passing gate.
Identity and grantsAuthority issues identity/scopes; each serving owner enforces its authorization and tenant boundary.
Proof custody and verificationConsolidated Evidence; Signer remains a separate key owner.

Policy and RO each own a physical database and role. Cross-service reads use the owner’s API, events or registered read contract; no Policy-to-RO database join is authorized by this document. See database ownership.

Current serving interfaces

Two evaluation interfaces serve different workflows. Their payloads are not interchangeable.

WorkflowCurrent interfaceRequest and result
RO evaluates its selected packPOST /api/policy/packs/{packId}/revisions/{version}/evaluateHttpPolicyEngineGateClient sends packId, version, subject. The response carries packId, version, digest, decision, correlationId, cached, optional evidence and attestationRef.
CI evaluates an image against a baselinePOST /api/v1/policy/gate/evaluateGateEvaluateRequest names imageDigest, optional baseline/policy and CI context. GateEvaluateResponse carries decision ID, Pass/Warn/Fail status, exit code, baseline resolution, gate results and optional attestation. The route requires policy:run.
Read the CI decisionGET /api/v1/policy/gate/decision/{decisionId}Reads the recorded decision under policy:read; it does not re-evaluate current inputs.
Request a release promotionPOST /api/v1/release-orchestrator/releases/{id}/promoteRO resolves release/environment context, evaluates the configured gates and records its own decision/approval state. A successful policy response alone is insufficient to authorize dispatch.

Tenant identity comes from the authenticated context. RO’s PolicyEngineServiceTokenHandler supplies its authorized service identity for the Policy call; the operator’s privileges are not broadened by forwarding that call.

Source authorities:

Decision, authorization and history

Implementation and acceptance limits

The APIs and enforcement classes above exist in source. Complete first delivery, tenant-complete advisory/VEX input, changed-risk response and exception/remediation closure still require the program’s CA-01–CA-12 receipts. Durable seal recovery is planned work, not an existing guarantee. Approval does not prove target completion, and evidence receipt does not prove signature validity, trusted policy acceptance or deterministic replay.

Relevant existing test entry points include RO Integration.Tests ApprovalSafetyGuardTests, ApprovalQueueHygieneTests, DeploymentDispatchDurableTransitionTests and ReleaseTruthRepositoryPersistenceTests; Policy.Engine.Tests includes PolicyEngineGateFirstBaselineEnrollmentTests and PostgresFindingsLookupProjectionMatchTests. Run the selected owner tests and authorized live scenarios before claiming their runtime boundary.