Skip to content

fix(lock): key denoland/setup-deno for governance-reusable.yml - #825

Merged
hyperpolymath merged 2 commits into
mainfrom
fix/lock-selfcheck-governance-reusable
Sep 17, 2026
Merged

hyperpolymath merged 2 commits into
mainfrom
fix/lock-selfcheck-governance-reusable

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

What

main is POISON by this repo's own scripts/lock-selfcheck.sh, added in #821. The gate went red on its own merge commit, and the cause predates it:

.github/workflows/governance-reusable.yml
  uses  denoland/setup-deno@22d081ff2d3a40755e97629de92e3bcbfa7cf2ed
  lock keys for this workflow: actions/cache … actions/checkout … editorconfig-checker/… erlef/setup-beam …

The ref is used but not keyed. It arrived with cdec573 (#818, the 2.0.2 release) and no lock regeneration rode along.

Why it matters

GitHub resolves a reusable's action refs against the callee repo's actions.lock at the pinned SHA. An unkeyed ref kills every caller at workflow startup with zero jobs, conclusion failure (not startup_failure), and no reason carried in either REST or GraphQL — the run page is the only place that states one. A required context that dies this way never reports at all, so the gate reads as absent rather than failing and the branch looks clean. main is not currently a safe thing to pin to.

Why this fix is deterministic

The lockfile validator requires key-SHA == the digest written inline in the workflow, so the correct entry has exactly one possible value and needs no resolution, network, or judgement. This reproduces what gh actions-lock + scripts/relock-sha-keys.sh would key, with no other entry moved.

Verification

scripts/lock-selfcheck.sh 176d1f7   -> VERDICT: POISON — 1 ref used but NOT keyed   (rc=1)
scripts/lock-selfcheck.sh 46ef434   -> VERDICT: SELF-CONSISTENT                     (rc=0)

Diff is one added line in .github/workflows/actions.lock — the key, inserted in the file's alphabetical convention.

Not fixed here

lock-selfcheck.sh also reports 6 workflows with no lock entry at all (apply-workflow-pins.yml, pages-archive.yml, propagate-hooks.yml, security-gate-pr-target.yml, settings-drift-detect.yml, tag-ruleset-canon.yml — 18 refs). The gate states this is a separate question from the verdict and does not count it. Left alone deliberately: an empty [] entry is not obviously the intended answer for a workflow that may not be a reusable.

Related

uses ⊆ actions.lock is red on main with the same root cause (it shells out to update-actions-lock.sh --verify-local). Expect it to clear with this change; if it does not, it is a second defect, not the same one.

scripts/lock-selfcheck.sh reports canon main POISON: governance-reusable.yml
uses denoland/setup-deno@22d081f (added in
cdec573, the 2.0.2 release) but the lock at that SHA does not key it.

GitHub resolves a reusable's action refs against the CALLEE repo's actions.lock
at the pinned SHA. A ref that is not keyed kills every caller at startup with
zero jobs, conclusion failure (not startup_failure) and no reason in either REST
or GraphQL — the gate reads as ABSENT rather than failing, so the branch looks
clean. That is the exact hazard lock-selfcheck.sh (#821) was merged to catch,
and it caught it on its own merge commit.

The key is fully determined: the lockfile validator requires key-SHA == the
digest written inline in the workflow, so this reproduces what gh actions-lock +
relock-sha-keys.sh would key. Empty diff to the resolved set; no other entry
moved.
@coderabbitai

coderabbitai Bot commented Sep 17, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Review was skipped due to path filters

⛔ Files ignored due to path filters (1)
  • .github/workflows/actions.lock is excluded by !**/*.lock

CodeRabbit blocks several paths by default. You can override this behavior by explicitly including those paths in the path filters. For example, including **/dist/** will override the default block on the dist directory, by removing the pattern from both the lists.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 4f237ec3-6f91-4cc2-a38f-2456c5caf06a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@hyperpolymath
hyperpolymath merged commit 7521a15 into main Sep 17, 2026
16 of 21 checks passed
@hyperpolymath
hyperpolymath deleted the fix/lock-selfcheck-governance-reusable branch September 17, 2026 20:05
@sonarqubecloud

Copy link
Copy Markdown

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant