Repository navigation
Description
What is happening
Every workflow in this repository whose job calls a reusable workflow owned by another account ends its run before any job exists:
| Workflow | Call (pinned, exists) | Latest run on main |
|---|---|---|
| Rust CI | metadatastician/standards/.github/workflows/rust-ci-reusable.yml@8e48b1ca |
startup_failure, 0 jobs |
| Governance | …/governance-reusable.yml@8e48b1ca |
startup_failure, 0 jobs |
| Secret Scanner | …/secret-scanner-reusable.yml@8e48b1ca |
startup_failure, 0 jobs |
| Hypatia Security Scan | …/hypatia-scan-reusable.yml@8e48b1ca |
startup_failure, 0 jobs |
| Mirror to Git Forges | …/mirror-reusable.yml@8e48b1ca |
startup_failure, 0 jobs |
| OSSF Scorecard | …/scorecard-reusable.yml@8e48b1ca |
startup_failure, 0 jobs |
| Standards pipeline | …/ci-pipeline.yml@8e48b1ca |
failure, 0 jobs |
Workflows that use only actions/* steps (Dogfood Gate, Code Quality, Estate Rules, Lock Sync Gate, OpenSSF Compliance, Static Analysis Gate, Runtime Policy, Workflow Security Linter, CodeQL) pass every time.
Consequence: zero jobs means zero check runs, so none of this appears in a PR check list. scan / gitleaks is a required status check on main, produced by Secret Scanner — so it can never report, and no pull request can be merged through the normal path. That is not a hostile check; it is a check that never starts.
When it started
- Rust CI: last success
2026-10-22T00:34Z; firststartup_failureafter that. - Secret Scanner: on
main, ran (conclusionfailure, jobs existed) at2026-10-25T19:41Z; from2026-10-25T19:49Zonwards,startup_failurewith 0 jobs.
2026-10-25 is also the date the estate repointed these callers from hyperpolymath/standards to metadatastician/standards (see the comment in .github/workflows/standards-pipeline.yml). The repository hyperpolymath/standards now redirects to metadatastician/standards — verified today:
$ gh api --include repos/hyperpolymath/standards
HTTP/2.0 200 OK
{"full_name":"metadatastician/standards","id":1116521501,"owner":{"login":"metadatastician","type":"Organization"}}
The caller (hyperpolymath/cicd-squabbler) is owned by a user; the callee is now owned by an organization. Cross-owner reusable-workflow calls are refused at startup unless the caller's Actions posture admits them.
Ruled out
- The pinned files exist. All six reusables resolve at
8e48b1caade08a552646adeab66558ac43b4360d, sizes 1.5–25 kB. - The called repository moved, and the callers already use the canonical name. No repoint is outstanding (this is the inverse of Zero-job startup failures as first-class classes; chains resolves canonical upstream names #140's moved-coordinate class).
- The lockfile is not the cause.
Lock Sync Gateis green (actions.lockis in sync and transitively closed, including thecreusot.ymlentry added in Zero-job startup failures as first-class classes; chains resolves canonical upstream names #140). - Not a missing input/secret. No caller passes an undeclared input; the caller-declared secrets match what
mirror-reusable.ymldeclares. - Not the same failure in other repos using the old name.
hyperpolymath/docmatrix'srust-ci.yml, still callinghyperpolymath/standards/…, also produces a 0-jobfailure. So this is not "the new name is refused, the old one works" — it is every cross-owner reusable call.
What it most likely is (needs an admin token to confirm)
One of two Settings-level postures, both of which are checked against the written owner/repo:
- Actions → General → Access: "Allow owner actions and reusable workflows" rather than "Allow all", which refuses a callee in a different account (
metadatastician) at startup; or allowed_actions=selectedwith apatterns_allowedlist that has no pattern coveringmetadatastician/standards@*.
I cannot read either. Every permissions endpoint refuses this token:
$ gh api repos/hyperpolymath/cicd-squabbler/actions/permissions
{"message":"Resource not accessible by integration","status":"403"}
$ … /actions/permissions/access → 403
$ … /actions/permissions/selected-actions → 403
administration: read is required, and the token here is a GitHub App installation token without it.
Fix (owner action, either is enough)
A. Admit the callee — Settings → Actions → General → Access: Allow all actions and reusable workflows; or keep selected and add the pattern metadatastician/standards@* to patterns_allowed. Keep sha_pinning_required=true; the callers are already full-SHA pinned, so nothing is weakened.
B. Or make caller and callee the same owner — move these workflows into a repository owned by the same account as the reusable, which is the posture before 2026-10-25.
Then confirm with:
gh run list --workflow rust-ci.yml --limit 3
# expect: success/failure with jobs > 0, never startup_failure with 0 jobs
Why this matters beyond CI hygiene
This is exactly the second class #140 makes first-class: a coordinate refused by the caller's allow-list, dying with zero jobs, creating no check run, therefore invisible in every PR check list — and here it is silently blocking every merge in this repository while the board reads green.
squabble zero-job is the command built to name this per run (repo, workflow, coordinate as written, canonical target, required allow-list pattern). It reports Unattributed with the probe failure quoted, rather than inventing a cause, when it cannot read the posture — which is precisely the evidence trail this issue needed and could not get.
Follow-up
Once the posture is readable, squabble zero-job . --limit 30 on this repository should name metadatastician/standards@* as the required pattern for each of these runs. Until then this issue is the record.
Activity
coderabbitai commentedon Oct 28, 2026
🔗 Related PRs
#140 - Zero-job startup failures as first-class classes; chains resolves canonical upstream names [open]
📝 Issue Planner
Check the box below or use the
@coderabbitai plancommand to generate an implementation plan and prompts that you can use with your favorite coding assistant.🧪 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:💬 Have feedback or questions? Drop into our discord!
hyperpolymath commentedon Oct 29, 2026
2026-10-29 canary findings: PR #143 now starts real scan / gitleaks, scan / rust-secrets and scan / shell-secrets jobs; all three passed. The live selected-actions configuration was updated additively with metadatastician/standards/.github/workflows/@ and read-back verified, retaining SHA pinning. A separate governance / Allowlist Preflight failure remains: governance-reusable.yml is pinned at standards commit 8e48b1c, whose rhodium-standard-repositories/actions-allowlist/allowed-actions.json predates the metadatastician owner transfer and omits seven now-used workflow refs. The later standards commit 8d1a2aa has the required pattern, but repinning cannot yet be safely committed because gh actions-lock v0.2.0 regenerates the untouched repository lockfile with over 100 dependency lines removed and governance.yml changed to an empty dependency list, while claiming all 31 workflows valid. Reproduced on unmodified caller workflow too; not caused by the candidate pin. The unsafe lockfile regeneration was reverted, not pushed. Next: repair/verify gh actions-lock reusable-workflow dependency tracking, repin governance to a compatible post-transfer SHA, re-lock without loss of dependency attestations, then re-run and close this issue only on confirmed green.
hyperpolymath commentedon Oct 29, 2026
Additional lockfile diagnosis (29 Oct): downloaded official github/gh-actions-lock v0.4.0 Linux binary into an isolated /tmp trial, verified its GitHub release SHA-256 digest f9da98f2a6e9e0ae77deadf9a2319a8a86bb002b541cc3203b247cc59fb04842 (installed v0.2.0 unchanged). On a clean main checkout v0.4.0
--no-fix --jsonreports 15 findings. Several existing full-SHAuses: metadatastician/standards/.github/workflows/*@8e48...are incorrectly described as stale because their lockfilemetadatastician/standards@8e48...entry is not seen as referenced. This matches v0.2.0 regeneration turning the governance workflow dependency list empty. The newer version is therefore not a verified safe replacement; do not regenerate/commit a truncated actions.lock until the discrepancy is explained and an accurate readback audit passes. Separate CI faults now isolated: Rust formatting/Clippy PR #144, and missing Why3 opam packages repaired upstream in merged cicd-suite PR #61. Scanner Gitleaks/Rust/shell checks passed in PR #143.