Skip to content

main is CI-dead since #830: tests.yml startup_failure (jobs=0) and Actions lockfile verify red #837

Description

@hyperpolymath

The finding

Two faults appeared on main together with #830 (chore(deps): bump the actions group across 1 directory with 4 updates, head 0aa89724).

1. tests.yml is startup_failure — zero jobs

2026-09-22T14:22  startup_failure  push          0aa89724   <- #830
2026-09-22T14:21  startup_failure  pull_request  b3e4057a
2026-09-22T14:20  failure          push          0e121c94   <- last run that ran
2026-09-22T14:00  startup_failure  pull_request  2e0e7bba
2026-09-22T13:51  failure          pull_request  c22ce6c1
2026-09-22T13:20  failure          push          3bf9674a

Run 35739874762 on 0aa89724 has jobs = 0. A 0-job run is a startup death,
not a verdict — the workflow was never parsed into jobs, so nothing it would have
checked was checked, and the run does not report a failure anyone would read as
one.

The only diff between the last run that started (0e121c94) and the first that
did not (0aa89724) is the Dependabot pin bumps across five workflows — for
tests.yml a pure step-level tag bump, taiki-e/install-action@v2.87.15 →
v2.87.16. A step-level tag bump should not startup-kill a workflow, so the
cause is not obvious and is not yet established. The check-runs API returns 404
for annotations on this run.

Note this fault masks #836 rather than replacing it: the test tier was already
dead by needs:-skip before the workflow stopped starting at all.

2. governance / Actions lockfile verify is red on main

The same Dependabot commit changed uses: refs without regenerating
.github/workflows/actions.lock. A hyperpolymath/standards reusable does
verify the lockfile, so it is now inconsistent with the tree.

This also corrects an earlier note in the #120 planning that said "no hypatia
workflow enforces actions.lock"
— one does, via a standards reusable.

Acceptance criteria

  1. Root cause of the startup_failure named and evidenced, not guessed. Bisect
    by dispatching tests.yml on a branch that reverts only the tests.yml hunk of
    chore(deps): bump the actions group across 1 directory with 4 updates #830, and confirm jobs > 0. State which change did it.
  2. tests.yml reaches jobs > 0 on a push to main. Verify by the job count
    in the run, never by a green tick — a startup death has no red tick to see.
  3. .github/workflows/actions.lock regenerated in generate mode only. Never
    fix/rewrite mode: it has previously de-pinned 24 SHAs and invented invalid
    uses: refs that themselves cause startup death. git diff the lock before
    staging and confirm the change is purely additive.
  4. governance / Actions lockfile verify green on main, evidenced from
    /commits/<sha>/check-runs, not from gh run list.
  5. The lockfile must be transitively closed — a dangling edge to an
    unresolvable ref is itself a jobs=0 killer. Absent is harmless; unresolvable
    is fatal.
  6. A regression guard: any Dependabot commit touching a uses: ref must either
    update actions.lock in the same commit or fail. Prove it with a mutant —
    hand-edit one uses: tag without touching the lock and confirm red.

Sequencing

(1)-(2) before (3)-(4). Regenerating the lock while the workflow cannot start
leaves you unable to tell which change fixed what.

Found while preparing #835. Related: #836.

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

    cicdCI/CD: workflows, actions, lockfiles, pins, runners, release gatestestingTests, benchmarks, fuzzing, property checks, coverage

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions