Skip to content

actions.lock desync (taiki-e v2.87.24, smtp-notify v0.5.0) turns lockfile-verify and Hypatia Baseline red on main #914

Closed

Description

@hyperpolymath

Problem

Two non-required governance checks fail on main (297e70c) and on every PR head cut from it, including #913:

  1. governance / Actions lockfile verify reports 5 ref-changed errors. Dependabot bumped refs in the workflows without regenerating .github/workflows/actions.lock:

    • taiki-e/install-action: workflows use v2.87.24, the lock pins v2.87.22. Affects build-gossamer-gui.yml, ci.yml, security-policy.yml and tests.yml.
    • hyperpolymath/smtp-notify-action: push-email-notify.yml uses v0.5.0, the lock pins v0.3.0.
    • The matching stale warnings flag the old entries (@v2.87.22, @v0.3.0).

    Source: job 113489371196 in run 37829065650. It prints "actions-lock gate: lockfile verification FAILED (exit 1). Regenerate with scripts/update-actions-lock.sh in the same PR as the uses: change."

  2. governance / Validate Hypatia Baseline fails with 5 baseline_status: "new" findings, all workflow_audit / unpinned_action, in the same 5 workflows. The scan reports "8 findings >= medium (critical=0, high=2, medium=6)"; the other 3 are acknowledged. Source: job 113489453679 in run 37829065650.

    This one is not fixed by a relock. The gate scans the uses: lines, not the lock. Either the refs are SHA-pinned, or the baseline ACKs are re-keyed for the new refs. Choosing between those is an owner decision.

  3. Four workflows die at startup on main and on PR heads (startup_failure, zero jobs): ci.yml, build-gossamer-gui.yml, security-policy.yml and tests.yml. On 297e70c (push) and on fix(dispatch): send echidnabot proof obligations as GraphQL variables #913 heads 11cb915 and 83a0c59, these are exactly the four workflows that use taiki-e/install-action@v2.87.24, the ref missing from the lock. A fifth, codeql.yml, also dies at startup; that is the codeql.yml uses a bare commit the lock does not vouch for, and mislabels it as v4.38.0 #901 case. GitHub reports only "likely failed because of a workflow file issue", so the lock desync is the consistent explanation, not a proven one. Consequence: CI currently runs no Elixir test suite at all, on main or on PRs, because ci.yml and tests.yml both die before a job is scheduled.

Gitbot-fleet had the same desync in hyperpolymath/gitbot-fleet#604, fixed by hyperpolymath/gitbot-fleet#605. Related: #901 (codeql.yml bare commit not vouched for by the lock).

Acceptance criteria

  • .github/workflows/actions.lock is regenerated with standards scripts/update-actions-lock.sh, not by hand. The lock records peeled commits, and the diff touches only the 5 entries above. (Amended 2026-10-09 to name accepted codeql.yml uses a bare commit the lock does not vouch for, and mislabels it as v4.38.0 #901 scope: fix(ci): relock actions.lock for Dependabot-bumped refs; codeql to v4.38.2 symbolic (#914, #901) #915 also added github/codeql-action@v4.38.2 → 2892aa5e for codeql.yml uses a bare commit the lock does not vouch for, and mislabels it as v4.38.0 #901, and the owner merged it with that change declared. All three new tags peel to the locked commits: taiki-e v2.87.24 = e407f7ba, smtp-notify v0.5.0^{} = c1c9fa07, codeql v4.38.2^{} = 2892aa5e.)
  • governance / Actions lockfile verify is green on a main push run. (Job 113509146074 at 69cf5cad; re-confirmed by job 113560800560 at 4be38c80.)
  • The 5 unpinned_action findings are resolved by SHA-pinning or by re-keyed baseline ACKs (owner decision), with no blanket baseline entry. (Amended 2026-10-09 per the owner's correction comment: the relock alone resolved them, because ActionsLock.pinned? treats lock-vouched refs as pinned. fix(ci): relock actions.lock for Dependabot-bumped refs; codeql to v4.38.2 symbolic (#914, #901) #915 added no inline SHA pins and changed no baseline ACKs, and .hypatia-baseline.json is untouched.)
  • governance / Validate Hypatia Baseline is green on a main push run. (Job 113509896859 at 69cf5cad: 3 findings, all acknowledged, 0 new, 0 unpinned_action. Re-confirmed by job 113560967990 at 4be38c80.)
  • CI, Tests (E2E / Integration / Stress / Bench), Security and Build Gossamer GUI start on a main push run (no startup_failure). If they still die at startup after the relock, the cause is something else; record it here. (Amended 2026-10-09: Build Gossamer GUI has a paths: filter, so no push since the fix has triggered it. It is evidenced by a workflow_dispatch at main instead: run 37923173066 at 4be38c80, 3/3 jobs succeeded. The next push touching its paths will confirm the push case. Push runs at 69cf5cad: CI 37834844329, Tests 37834844475, Security 37834844328.)
  • No other workflow uses: line changes. Rewrite mode can de-pin SHAs, so the workflow diff must be checked. (Amended 2026-10-09 to name accepted codeql.yml uses a bare commit the lock does not vouch for, and mislabels it as v4.38.0 #901 scope: the only exceptions are 5 github/codeql-action/* lines, changed from @2892aa5e… to @v4.38.2. That is the same commit, now pinned by the lock.)

Activity

  1. coderabbitai commented on Oct 8, 2026

    @coderabbitai
    Contributor
    🔗 Related PRs

    #823 - chore(ci): refresh actions.lock so the lockfile gate goes green (#818) [merged]


    📝 Issue Planner

    Check the box below or use the @coderabbitai plan command to generate an implementation plan and prompts that you can use with your favorite coding assistant.

    • Create Plan

    🧪 Issue enrichment is currently in open beta.

    You can configure auto-planning by selecting labels in the issue_enrichment configuration.

    To disable automatic issue enrichment, add the following to your .coderabbit.yaml:

    issue_enrichment:
      auto_enrich:
        enabled: false

    💬 Have feedback or questions? Drop into our discord!

  2. added
    cicdCI/CD: workflows, actions, lockfiles, pins, runners, release gates
    testingTests, benchmarks, fuzzing, property checks, coverage
    on Oct 8, 2026
  3. hyperpolymath commented on Oct 8, 2026

    @hyperpolymath
    OwnerAuthor

    Correction to item 2 above. I wrote that the Validate Hypatia Baseline failure "is not fixed by a relock", and that clearing it needed either inline SHA pins or re-keyed ACKs. That was wrong.

    lib/rules/workflow_audit.ex:317-333 treats any ref the lock vouches for as pinned (ActionsLock.pinned?). #908 measured this: 9 × unpinned_action cleared with a relock alone. The same comment records that inline SHA-pinning is a regression under lockfile enforcement: on 2026-08-07, 40 inline pins put 14 workflows into startup_failure.

    So the relock in #915 should clear all 5 findings with no inline pins and no baseline change. #915's CI on its head is the test of that.

  4. hyperpolymath commented on Oct 9, 2026

    @hyperpolymath
    OwnerAuthor

    Verification before close (2026-10-09)

    #915 (merged as 69cf5cad) fixed this issue, and the merge auto-closed it. It was reopened for two reasons. Both are now resolved:

    1. ACs 2, 4 and 5 need evidence from a main push run. That could not exist at merge time, and all six boxes were unticked. The evidence is below. Every AC is now ticked, with its evidence inline.
    2. fix(ci): relock actions.lock for Dependabot-bumped refs; codeql to v4.38.2 symbolic (#914, #901) #915's codeql change exceeds AC1 and AC6 as worded. The owner ruled that both ACs be amended to name the accepted codeql.yml uses a bare commit the lock does not vouch for, and mislabels it as v4.38.0 #901 scope, then ticked. The amendments are marked (Amended 2026-10-09 …) in the body.
    AC Evidence
    1 Regenerated with standards scripts/update-actions-lock.sh. Peeled tags (git ls-remote) match the lock: taiki-e v2.87.24 = e407f7ba (lightweight tag), smtp-notify v0.5.0^{} = c1c9fa07, codeql v4.38.2^{} = 2892aa5e. The codeql entry is the amended #901 scope.
    2 governance / Actions lockfile verify: job 113509146074 (Governance run 37834845333, push, 69cf5cad) success. Re-confirmed by job 113560800560 (run 37850159347, push, 4be38c80).
    3 The relock alone resolved the findings (ActionsLock.pinned?, lib/rules/workflow_audit.ex:317-333; see the correction comment above). #915 changed only actions.lock, codeql.yml and security-policy.yml: no inline SHA pins, no baseline change, no blanket entry.
    4 governance / Validate Hypatia Baseline: job 113509896859 (69cf5cad) success with 3 findings, all acknowledged, 0 new, 0 unpinned_action. Re-confirmed by job 113560967990 (4be38c80). Before the fix, run 37829065650 (#913 head 11cb915, pull_request) had 8 findings, 5 of them new.
    5 Push runs at 69cf5cad: CI 37834844329 success, 9 jobs. Tests 37834844475 success, 10 jobs. Security 37834844328 started, 9 jobs; its 3 job failures (Rust Dependency Audit, Rust License & Ban Check, Security Status) predate this issue and are tracked in #916. Build Gossamer GUI has a paths: filter, so no push since the fix has triggered it. Instead, workflow_dispatch at main ran as run 37923173066 at 4be38c80: 3/3 jobs succeeded. Its last main push run, 37755241662 at 297e70c, was startup_failure.
    6 Apart from the lock, #915's workflow diff is exactly 5 github/codeql-action/* lines (init/analyze in codeql.yml; init/analyze/upload-sarif in security-policy.yml), changed from @2892aa5e… to @v4.38.2. That is the same commit, now pinned by the lock. No other uses: line changed.

    Scope of this evidence: main push runs at 69cf5cad and 4be38c80, plus one workflow_dispatch at main (4be38c80) for Build Gossamer GUI. A push that touches the GUI's paths: has not yet run on main.

    Closing as completed. The Security job failures continue in #916.

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