A coding agent's loop
Skills teach the platform
The platform-skills repository gives every coding agent that loads it the platform's patterns: where a change belongs, the catalog, a product's roots and the golden-path modules, naming, and the policy pack's rules with their messages. Four of the five skills ship examples that the policy pack, terraform validate or the catalog's lint must accept or refuse as the skill says, and the platform overview is checked for the paths it names. These checks run on every change to the skills, against the policy pack of the release the skills pin, and again when a new release is verified before it is permitted.
Validate locally, as the merge request does
airframe validate runs the merge request's validation on the laptop, without credentials or state: formatting, terraform validate, OpenTofu's validate and tflint where they are installed, and the policy pack on the Terraform roots, the pipeline file and the declared Dockerfiles. What needs the platform stays in the pipeline: the gate's checks, GitLab's secret detection, dependency scanning and static analysis, the application's build and tests, the plan, the pack's check of the plan and its price.
Read the message, fix, validate again
A failing rule names the resource and what is wrong with it, and many also say what to do instead, so the loop is short: write, validate, read the message, fix, validate again, then open the merge request. A warning does not fail the run; the skills tell a coding agent to fix it or to give its reason in the merge request.
The same checks as everyone
The merge request runs the same injected jobs and the same rules whoever wrote it; nothing in them depends on the author. By the convention the platform's instructions for a coding agent and its skills teach, a coding agent's commits carry a Generated-by trailer naming the agent and the model, and its merge requests carry the agent label. Nothing checks either yet.
A named person approves
GitLab's approval policy counts only the approval of a person the catalog names who neither wrote nor committed the change, and the gate approves only once the change's current owners have. A coding agent with an account of its own is named nowhere, so its approval never counts. One that works through a person's account is that person to GitLab: it cannot give the approval that counts on a change it wrote there, and nothing tells it apart from the person.