What is broken
ci-conformance.yml checks the policy repo out at main, not at the SHA the
caller pinned. The guard that was supposed to prevent this is present but inert:
# .github/workflows/ci-conformance.yml (at 1920efa, and still on main)
- name: Check out the policy repo
uses: actions/checkout@3d3c42e5...
with:
repository: MustardSeedNetworks/.github
ref: ${{ github.job_workflow_sha }}
path: .conformance
The file's own comment states the hazard exactly: "without a ref here the scripts
that actually decide the verdict came from whatever was on this repo's default
branch at run time — so the caller's pin bought nothing." That is what is
happening today: github.job_workflow_sha evaluates to the empty string at run
time, actions/checkout falls back to the default branch, and the caller's pin
buys nothing after all.
Observable (niac-go run 35100092161, job 104807020948, 2026-09-16T13:09Z)
The with: block actions/checkout echoed for the .conformance checkout has
no ref entry — an empty input is not printed — and the checkout resolved to
the policy repo's default branch:
##[group]Run actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
with:
repository: MustardSeedNetworks/.github
path: .conformance
persist-credentials: false
... <- no `ref:` line
##[group]Checking out the ref
[command]/usr/bin/git checkout --progress --force -B main refs/remotes/origin/main
Switched to a new branch 'main'
[command]/usr/bin/git log -1 --format=%H
75ad8d13a9690f8dfe9c01b2b57d56965dfed640 <- .github main, not the pin
niac-go pins ci-conformance.yml@1920efa; seed, stem and trellis pin
@048d173. Neither commit's scripts/check-ci-conformance.py contains check 9
(the msn-shared.css hash check):
$ gh api ".../check-ci-conformance.py?ref=1920efa..." | base64 -d | grep -c msn-shared
0
$ gh api ".../check-ci-conformance.py?ref=048d173..." | base64 -d | grep -c msn-shared
0
Yet check 9 is what failed the job. The script came from 75ad8d13 (main).
That github.job_workflow_sha is empty is the inference that fits; why it is
empty is not established here and needs a real run to diagnose (echo the context
value in a debug step).
Blast radius — all four product repos are unmergeable right now
#72 merged at 2026-09-16T13:03:21Z. Every ci.yml run started after that
instant runs check 9 against a product copy that has not been adopted yet, and
ci-conformance is in ci-complete's needs: while CI Complete is a required
status check in all four repos. Observed:
| repo |
copy sha256 |
canonical |
first red |
| seed |
3f4450a001cf |
b073e5e15bab |
next run (last run 11:25Z, green) |
| stem |
38eb15f3a815 |
b073e5e15bab |
next run (last run 12:14Z, green) |
| trellis |
f006cb263d41 |
b073e5e15bab |
run 35100014704, 13:08Z — merge-queue ejection of PR #503 |
| niac-go |
3f4450a001cf |
b073e5e15bab |
run 35100092161, 13:09Z — PR #2210 |
This is the opposite of what UI-FLEET-1's closeout recorded ("All four repos
pin ci-conformance.yml at a SHA (verified), so merging #72 turns nothing red on
its own"). The pins were verified; their effect was assumed.
Why this matters beyond the theme check
A pinned reusable workflow whose verdict-deciding scripts float on main means
two runs of an identical product commit can disagree, and any future check
added here goes live in all four repos instantly with no adoption window. Fixing
this is worth more than the immediate red.
Suggested shape (not prescribed)
Either make the ref resolution actually work (and prove it — echo the resolved
value in a debug step in a run, do not trust the expression), or drop the
indirection and have the workflow run scripts that live in the same commit as the
workflow (${{ github.workflow_sha }} is the caller's SHA in a different repo
and will not resolve here — the existing comment already says so).
Whatever the shape, it needs a verification vehicle: .github calling
ci-conformance.yml on itself at a fixture, so "the pin is honoured" is proven by
a run rather than by reading YAML. Landing a fleet gate change without one is how
this defect shipped.
Interaction with the adoption rows
The four adoption rows (UI-SEED-7, UI-STEM-7, UI-NIAC-9, UI-TRL-8) also
clear the red, per repo, by making each copy match the canonical. Those rows
should land regardless — they are the point of #69. This issue is the separate
defect that they went live without an adoption window.
What is broken
ci-conformance.ymlchecks the policy repo out atmain, not at the SHA thecaller pinned. The guard that was supposed to prevent this is present but inert:
The file's own comment states the hazard exactly: "without a ref here the scripts
that actually decide the verdict came from whatever was on this repo's default
branch at run time — so the caller's pin bought nothing." That is what is
happening today:
github.job_workflow_shaevaluates to the empty string at runtime,
actions/checkoutfalls back to the default branch, and the caller's pinbuys nothing after all.
Observable (niac-go run 35100092161, job 104807020948, 2026-09-16T13:09Z)
The
with:blockactions/checkoutechoed for the.conformancecheckout hasno
refentry — an empty input is not printed — and the checkout resolved tothe policy repo's default branch:
niac-go pins
ci-conformance.yml@1920efa; seed, stem and trellis pin@048d173. Neither commit'sscripts/check-ci-conformance.pycontains check 9(the
msn-shared.csshash check):Yet check 9 is what failed the job. The script came from
75ad8d13(main).That
github.job_workflow_shais empty is the inference that fits; why it isempty is not established here and needs a real run to diagnose (echo the context
value in a debug step).
Blast radius — all four product repos are unmergeable right now
#72merged at 2026-09-16T13:03:21Z. Everyci.ymlrun started after thatinstant runs check 9 against a product copy that has not been adopted yet, and
ci-conformanceis inci-complete'sneeds:whileCI Completeis a requiredstatus check in all four repos. Observed:
3f4450a001cfb073e5e15bab38eb15f3a815b073e5e15babf006cb263d41b073e5e15bab3f4450a001cfb073e5e15babThis is the opposite of what
UI-FLEET-1's closeout recorded ("All four repospin
ci-conformance.ymlat a SHA (verified), so merging #72 turns nothing red onits own"). The pins were verified; their effect was assumed.
Why this matters beyond the theme check
A pinned reusable workflow whose verdict-deciding scripts float on
mainmeanstwo runs of an identical product commit can disagree, and any future check
added here goes live in all four repos instantly with no adoption window. Fixing
this is worth more than the immediate red.
Suggested shape (not prescribed)
Either make the ref resolution actually work (and prove it — echo the resolved
value in a debug step in a run, do not trust the expression), or drop the
indirection and have the workflow run scripts that live in the same commit as the
workflow (
${{ github.workflow_sha }}is the caller's SHA in a different repoand will not resolve here — the existing comment already says so).
Whatever the shape, it needs a verification vehicle:
.githubcallingci-conformance.ymlon itself at a fixture, so "the pin is honoured" is proven bya run rather than by reading YAML. Landing a fleet gate change without one is how
this defect shipped.
Interaction with the adoption rows
The four adoption rows (
UI-SEED-7,UI-STEM-7,UI-NIAC-9,UI-TRL-8) alsoclear the red, per repo, by making each copy match the canonical. Those rows
should land regardless — they are the point of
#69. This issue is the separatedefect that they went live without an adoption window.