Skip to content

fix(ci): grant callers the "actions: read" their reusables request - #652

Merged
hyperpolymath merged 1 commit into
mainfrom
fix/caller-actions-read-permission
Aug 26, 2026
Merged

fix(ci): grant callers the "actions: read" their reusables request#652
hyperpolymath merged 1 commit into
mainfrom
fix/caller-actions-read-permission

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Two workflows have been dead at startup_failurezero jobs, no log, no annotationreadme-derive.yml since 2026-08-07 and changelog.yml since 2026-08-24.

Why this took work to find

startup_failure emits nothing a tool can read. The full run record via REST reports total_count=0 jobs and carries no message field; GraphQL has none either. The reason exists only as rendered HTML in the run page banner. I fetched it:

Error calling workflow 'hyperpolymath/standards/.github/workflows/changelog-reusable.yml@a22a7abf'. The workflow is requesting 'actions: read', but is only allowed 'actions: none'.

The mechanism

A caller that declares a permissions: block at all receives none for every key it does not list. Both callers declared one and omitted actions::

caller granted reusable requests result
changelog.yml contents: write, pull-requests: write actions: read ❌ rejected pre-start
readme-derive.yml contents: write actions: read ❌ rejected pre-start

This is why it reads as "misconfigured permissions" rather than "missing permission" — nothing was ever removed; the omission itself is the denial.

Corroboration — two independent methods agree

Besides the banner, a static sweep of all 11 caller→reusable pairs in this repo independently flags these two, and only these two. After the fix it reports 0.

❌ changelog.yml        -> changelog-reusable.yml        actions
❌ readme-derive.yml    -> readme-derive-reusable.yml    actions
✅ codeql / deno-ci / elixir-ci / governance / hypatia-scan / rust-ci / scorecard / secret-scanner

What this is NOT — ruled out, so nobody repeats it

candidate result
lockfile mode 1–4 (absent / no entry / under-declares / drift) check-lockfile-drift.shclean — 41 workflow(s)
YAML unparseable ❌ both files yaml.safe_load cleanly
PR #622 "enforce live Actions policy" disprovedgovernance.yml ran healthily 3× after #622 merged
Actions allowlist ❌ not for these two — but see below

⚠️ A second, separate cause is still open — and it needs you, not code

Three other workflows are dead for a completely different reason, confirmed from their banners:

"The action editorconfig-checker/action-editorconfig-checker@840e866d… is not allowed in hyperpolymath/standards because all actions must be from a repository owned by hyperpolymath, created by GitHub, or verified in the GitHub Marketplace."

workflow blocked action
governance.yml editorconfig-checker/action-editorconfig-checker
casket-pages.yml haskell-actions/setup
affinescript-verify.yml ocaml/setup-ocaml

The repo has allowed_actions: "selected" with patterns_allowed: []. That is a repository settings change, not a code change, so it is deliberately not in this PR.

governance.yml being dead is why governance / Validate Hypatia Baseline and governance / Code quality + docs are 2 of the 8 required contexts on ruleset Optimus-Branch that never report — which is why PRs here sit at BLOCKED with every reported check green.

Related: #399.

changelog.yml and readme-derive.yml have been dead at startup_failure —
zero jobs, no log, no annotation — since 2026-08-07 and 2026-08-24.

The reason is invisible to the REST and GraphQL APIs; it exists only in
the run page banner, which states it exactly:

  Error calling workflow '.../changelog-reusable.yml@a22a7ab'.
  The workflow is requesting 'actions: read', but is only allowed
  'actions: none'.

A caller that declares a "permissions:" block at all receives "none" for
every key it does NOT list. changelog.yml granted contents+pull-requests,
readme-derive.yml granted contents — so both silently denied the
"actions: read" their reusables declare, and GitHub rejected the run
before any job could start.

Corroborated two ways: the banner text above, and a static sweep of all
11 caller/reusable pairs in this repo, which independently identifies
these two and only these two. After the fix that sweep reports 0.

NOT the cause here, and checked: all four actions.lock failure modes
(clean), YAML validity (both parse), and the Actions allowlist. The
allowlist IS killing three OTHER workflows (governance, casket-pages,
affinescript-verify) — that is a repo-settings fix, not a code one, and
is reported separately.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 26, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 43 minutes.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: d6263c84-8dc6-41c5-b080-e21bbd4c2395

📥 Commits

Reviewing files that changed from the base of the PR and between 6cb237c and 3f928e1.

📒 Files selected for processing (4)
  • .github/workflows/changelog.yml
  • .github/workflows/readme-derive.yml
  • .machine_readable/REGISTRY.a2ml
  • .machine_readable/scorecards/0-ai-gatekeeper-protocol.scorecard.a2ml

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.

@sonarqubecloud

Copy link
Copy Markdown

@codacy-production

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

AI Reviewer: first review requested successfully. AI can make mistakes. Always validate suggestions.

Run reviewer

TIP This summary will be updated as you push new changes.

@gitar-bot

gitar-bot Bot commented Aug 26, 2026

Copy link
Copy Markdown

Important

You are using the Gitar free plan. Upgrade to unlock code review, CI analysis, auto-apply, custom automations, and more.

Gitar

@codacy-production codacy-production Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

The PR successfully addresses the startup_failure in the Changelog and README Derive workflows by granting the necessary actions: read permissions.

However, the review identified significant undocumented changes, including multiple source_hash updates and a scorecard modification. Most critically, a logical contradiction exists in the scorecard file: a requirement is marked with status = "fail" yet assigned check = "true". This inconsistency could impact automated validation and should be corrected before merging.

About this PR

  • This PR contains significant scope misalignment. In addition to the CI permission fixes, there are 16 hunks of source hash updates in the registry and a manual scorecard update that are not documented in the PR title or description.

Test suggestions

  • Verify actions: read is present in the permissions block of the Changelog workflow
  • Verify actions: read is present in the permissions block of the README Derive workflow

TIP Improve review quality by adding custom instructions
TIP How was this review? Give us feedback

@hyperpolymath
hyperpolymath merged commit 1d74c6c into main Aug 26, 2026
21 checks passed
@hyperpolymath
hyperpolymath deleted the fix/caller-actions-read-permission branch August 26, 2026 19:36
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