Skip to content

ci: the caller's SHA pin on ci-conformance.yml is inert — the policy scripts always come from main, and check 9 has blocked all four repos since 13:03Z #73

Description

@krisarmstrong

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions