π€ Generated by the Agentic Engineer
Second child of devantler-tech/platform#3376 β the enforcement-authority half, split from the CI check shipped by #182 (Fixes #181).
Evidence
Every deploy/ guard in this repository β scripts/validate-release-contract.sh and, with #182, scripts/validate-deploy-deletions.sh β runs from the pull request's own ci.yaml on the pull_request event. A pull request therefore controls the very workflow and script that judge it: it can edit or remove the step, or replace the validator, and still satisfy the only required status (CI - Required Checks). The active ruleset on main requires zero approving reviews and no code-owner review, so nothing outside the pull request's own diff stands between such an edit and a merge. CodeRabbit raised this on #182 as a Major (CWE-693) finding; it is real, and it is the same exposure the release-contract guard has carried since it was introduced.
Expected behaviour
The guards that protect deploy/ are enforced by something a pull request cannot edit out of its own path: an organisation-level required workflow that runs the checks from a trusted ref (the pattern validate-go-project.yaml already uses from devantler-tech/actions), or protected review that a change to the workflow and validator files cannot bypass. The parent issue's ruleset criteria (at least one approving review; code-owner review for deploy/) are the review-side design and carry a real trade-off β agent-authored pull requests are authored as devantler and cannot approve themselves β so the decision needs recording before it is applied.
Acceptance criteria
Rough size: M (design plus an org-level rollout).
Second child of devantler-tech/platform#3376 β the enforcement-authority half, split from the CI check shipped by #182 (
Fixes #181).Evidence
Every
deploy/guard in this repository βscripts/validate-release-contract.shand, with #182,scripts/validate-deploy-deletions.shβ runs from the pull request's ownci.yamlon thepull_requestevent. A pull request therefore controls the very workflow and script that judge it: it can edit or remove the step, or replace the validator, and still satisfy the only required status (CI - Required Checks). The active ruleset onmainrequires zero approving reviews and no code-owner review, so nothing outside the pull request's own diff stands between such an edit and a merge. CodeRabbit raised this on #182 as a Major (CWE-693) finding; it is real, and it is the same exposure the release-contract guard has carried since it was introduced.Expected behaviour
The guards that protect
deploy/are enforced by something a pull request cannot edit out of its own path: an organisation-level required workflow that runs the checks from a trusted ref (the patternvalidate-go-project.yamlalready uses fromdevantler-tech/actions), or protected review that a change to the workflow and validator files cannot bypass. The parent issue's ruleset criteria (at least one approving review; code-owner review fordeploy/) are the review-side design and carry a real trade-off β agent-authored pull requests are authored asdevantlerand cannot approve themselves β so the decision needs recording before it is applied.Acceptance criteria
ci.yaml, or replaces either validator, cannot reachmainwith onlyCI - Required Checksgreen β verified by reading the ruleset or required-workflow configuration back, not by setting it.Rough size: M (design plus an org-level rollout).