This page describes intended behaviour or structure. No implementation is claimed unless a section is explicitly marked Current implementation or Evidence.
EnvironmentPromotionService is the gate between a release and a running environment. A promotion evaluates its gates in order — pipeline results, the deployment-domain policy decision (BC-18), the prior environment class in the project's promotion path, the environment's readiness, and evaluation evidence where the release carries agent-generated assets — then, for production, waits for an approval of class production bound to the exact release and environment and decided by someone other than the requester (D21, ADR-0015). Once approved it builds the desired-state specification and hands it to IaCProvisioningService (BC-25), which applies it and reports back; the service then verifies (health, smoke suite, SLO window) and completes, or rolls back automatically to the previous release with evidence.
The deploy-environment tool (production class) is how an agent requests a promotion; an Operator can request or roll back from the Studio.
flowchart LR
S["EnvironmentPromotionService"]
ToolAdapterService["ToolAdapterService"] -->|grpc| S
StudioBff["StudioBff"] -->|sync-http| S
S -->|grpc| ReleaseService["ReleaseService"]
S -->|grpc| PolicyEngineService["PolicyEngineService"]
S -->|grpc| RunControlService["RunControlService"]
S -->|event| IaCProvisioningService["IaCProvisioningService"]
S -->|grpc| SloService["SloService"]
S -. "PromotionRequested" .-> E_PromotionRequested(("event"))
S -. "PromotionApproved" .-> E_PromotionApproved(("event"))
S -. "PromotionCompleted" .-> E_PromotionCompleted(("event"))
S -. "PromotionFailed" .-> E_PromotionFailed(("event"))
S -. "RollbackCompleted" .-> E_RollbackCompleted(("event"))
Hold "Alt" / "Option" to enable pan & zoom
This service never touches infrastructure: it owns the decision and the evidence, provisioning owns the change. Rollback is a promotion of the previous release with the same gates except the approval, which the Operator holds by role.
Promotion — One request to put a release into an environment: gates with their outcomes, the approval (production class) when the environment is production, the strategy, the desired-state hand-off to provisioning, verification results and, if needed, the rollback with its evidence. (catalog entry)
Field
Type
Required
Description
promotionId
guid
yes
tenantId
string
yes
projectId
string
yes
releaseId
guid
yes
environmentId
string
yes
environmentClass
string
yes
development
strategy
enum:Strategy
yes
gates
json
yes
Per gate kind outcome and evidence reference.
approvalId
guid
no
requestedBy
string
yes
runId
guid
no
The Factory run that requested it (deploy-environment tool).
desiredStateRef
string
no
Deployment specification handed to BC-25.
verification
json
no
Health, smoke and SLO checks after deploy.
previousReleaseId
guid
no
state
enum:PromotionState
yes
requestedAt
datetime
yes
completedAt
datetime
no
Invariants:
A production promotion needs an approval of class production bound to the exact release id and environment, decided by someone other than the requester (D21, ADR-0015); lower classes need policy allow and passing gates.
A release may only enter production after it completed in the prior environment class of the project's promotion path, unless policy allows a hotfix path with evidence.
Deployment itself is done by provisioning (BC-25) from the desired state; this service never touches infrastructure directly.
A rollback is a promotion of the previous release with the same gates except approval, which the Operator holds by role for rollbacks.
Evaluates gates in order (pipeline results, policy, prior environment, environment ready, evaluation evidence where the product release carries agent-generated assets) and requests the approval when the environment class demands it.
Pulumi programs and Azure Pipelines stages deploy per repository with manual approvals in Azure DevOps environments. No Factory gate, approval binding, desired-state hand-off or verification exists.
Progressive delivery with automatic canary analysis against SLOs; promotion windows and freeze periods per tenant; fleet-wide rollout orchestration (P12) built on single-environment promotions.