🤖 Generated by the Agentic Engineer
Evidence
Raised by Codex against #2848 at e2749af3 and confirmed by reading the workflows.
The publication-order validator is wired into ci.yaml, which triggers on pull_request and
merge_group only. cd.yaml's documented direct-push recovery path goes from the EKS
authorization job straight into ./.github/actions/deploy-prod, and never invokes the validator.
So a change reaching main by direct push can be dispatched to production without the ordering gate
examining it even once.
Why this is separate from the analyzer work
#2873 and #2870 are about what the guard can see inside a step it inspects. This is about steps it
is never handed. The distinction matters because they fail in opposite directions: hardening the
analyzer does nothing here, and any strengthening of it creates a false sense that the ordering
property is enforced on every path to production when one path is unguarded.
It also caps the value of that work — the guarantee is only as strong as its weakest route, so the
analyzer's ceiling is currently set by this gap rather than by its own precision.
What resolving it looks like
Make the publication validation a check the production deploy actually depends on, rather than a
PR-time check. Either add it to the manual pre-deploy gate in cd.yaml, or make the CD job require
a check that runs it — so the path cannot execute without it.
Acceptance criteria
- A direct-push production deploy cannot proceed without the publication-order validation running.
- The recovery path documented in
cd.yaml is covered, not just pull_request / merge_group.
- A regression proof: a deliberately mis-ordered publication reaches the CD path and is refused.
Part of #2627. Related: #2873, #2870, #2848.
Evidence
Raised by Codex against #2848 at
e2749af3and confirmed by reading the workflows.The publication-order validator is wired into
ci.yaml, which triggers onpull_requestandmerge_grouponly.cd.yaml's documented direct-push recovery path goes from the EKSauthorization job straight into
./.github/actions/deploy-prod, and never invokes the validator.So a change reaching
mainby direct push can be dispatched to production without the ordering gateexamining it even once.
Why this is separate from the analyzer work
#2873 and #2870 are about what the guard can see inside a step it inspects. This is about steps it
is never handed. The distinction matters because they fail in opposite directions: hardening the
analyzer does nothing here, and any strengthening of it creates a false sense that the ordering
property is enforced on every path to production when one path is unguarded.
It also caps the value of that work — the guarantee is only as strong as its weakest route, so the
analyzer's ceiling is currently set by this gap rather than by its own precision.
What resolving it looks like
Make the publication validation a check the production deploy actually depends on, rather than a
PR-time check. Either add it to the manual pre-deploy gate in
cd.yaml, or make the CD job requirea check that runs it — so the path cannot execute without it.
Acceptance criteria
cd.yamlis covered, not justpull_request/merge_group.Part of #2627. Related: #2873, #2870, #2848.