How a change is checked
The rules are code, with tests
The policy pack is a set of Open Policy Agent rules in the control-plane repository. Conftest runs them on a product's Terraform code and pipeline file in the merge request, and on the Terraform plan before every apply; from release 2026.10.01-1, the Dockerfiles a product declares for its builds are checked on every merge request that changes one named Dockerfile, Dockerfile.* or *.Dockerfile. By convention each rule ships a case that must pass and one that must fail, and a new deny rule usually spends its first release as a warning; the pack's own pipeline runs every test on each change to it.
Validation a product cannot switch off
GitLab pipeline execution policies in the security-policies project inject jobs that a repository's own pipeline file cannot remove or replace: the gate's integrity check into every pipeline in the group, and the validation and test evidence into every pipeline of a product repository.
The message says what is wrong
A failing rule names the resource it judged and what is wrong with it, and many also say what to do instead, in words written for whoever reads them next, a person or a coding agent.
Only the platform's components deploy
A product's pipeline file may include only the control-plane repository's own CI components, and none of its own jobs may declare a deployment environment. A component from anywhere else is denied, and the gate fails a pipeline that includes a revoked release of the platform's.
People approve intent
Every merge request to a default branch needs the approval of a named person from the catalog who neither wrote nor committed it, never a role. Today, in every repository but security-policies, which holds the approval rules themselves, it also needs the gate's approval, which the gate adds only once the owners the catalog names have approved the latest commit: a budget rise or a new service needs a domain lead, and where the lead has no account, as in the demo, the platform team stands in.