Skip to content

Self-test job dies in prepare on every PR branch: actions.lock is not transitively closed for $/actions refs #33

Description

@hyperpolymath

Symptom

code-hygiene-self-test.yml's test job dies in prepare, before a single
step runs:

Download action repository 'hyperpolymath/cicd-suite@c5270b0e0a0a7177d6ee77fc4451f38978b612f0'
##[error]lockfile missing pin for hyperpolymath/deed-ecosystem@f9d999b60cb5f383679ea19912bcdc49c944973a

Measured on run 35784511114 (branch fix/composite-shell-e-kills-valid-repos).

Cause

.github/workflows/actions.lock records the transitive edges of
hyperpolymath/cicd-suite@main:

'hyperpolymath/cicd-suite@main':
    commit: 'sha1-9adb3908d60690dbd6a302f634b914a279f6812e'
    uses:
        - 'hyperpolymath/deed-ecosystem@f9d999b6...'
        - 'hyperpolymath/k9-ecosystem@2155aa26...'

Two things are wrong with that:

  1. The @main pin is stale — it names 9adb3908, while main is at
    6ff6057.
  2. The workflow does not resolve to @main. Its steps use
    $/actions/manifest-check, which GitHub resolves to
    hyperpolymath/cicd-suite@<head SHA>. On a PR branch that head SHA is never
    @main, so there is no lock entry for it, its transitive uses: are
    unknown, and deed-ecosystem reads as unpinned.

This is why the workflow has been green on main and red or absent on branches:
the self-test is effectively only ever measured after merge, never on the PR
that changes it.

Why it matters beyond this workflow

The job dies before any step executes, so every control in it reports
nothing while looking like an ordinary red. That is the same shape as the defect
in #32: a failure upstream of the thing being measured. #32 therefore moves the
new shell-contract suite into its own job so it cannot be masked this way — but
the six controls still inside test remain unmeasured on every PR branch until
this is fixed.

Fix (not attempted here)

Regenerate the lockfile so it is transitively closed for the self-referential
$/actions/... form. Notes for whoever takes it:

  • The file is machine generated. gh actions-lock rewrite mode has a
    recorded history in this estate of de-pinning SHAs to tags and inventing
    invalid local refs, so verify its output rather than trusting rc=0 — and note
    gh actions-lock --no-fix has been observed to exit 0 while printing
    "lockfile is unreadable".
  • Acceptance is a run, not a file: the test job must reach and execute its
    steps on a PR branch, not merely on main.

Refs: #787
Found while landing #32.

🤖 Generated with Claude Code

https://claude.ai/code/session_01WRvDivYwLSeVCJUrfjic3f

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