Skip to content

fix(ci): revive the startup-dead governance gates (0 jobs -> running) - #174

Merged
hyperpolymath merged 3 commits into
mainfrom
fix/restore-reachable-standards-pin
Sep 8, 2026
Merged

hyperpolymath merged 3 commits into
mainfrom
fix/restore-reachable-standards-pin

Conversation

@hyperpolymath

@hyperpolymath hyperpolymath commented Sep 4, 2026 •

Copy link
Copy Markdown
Owner

What was actually wrong

Three of this repo's five governance-suite gates were dying at startup: scorecard, mirror and secret-scanner each reported 0 jobs and 0 check runs. A gate that never starts is absent, not red — so main looked green while nothing ran.

gh run view on those runs says only: "This run likely failed because of a workflow file issue."

Two causes

  1. Stale pins. Callers sat on older standards revisions (7fdc2705, 892497fe) whose reusables request actions: read — a permission the callers never granted. The reusable call fails validation and the run dies before any job is created.
  2. A job-level permissions: block REPLACES the workflow-level map rather than merging with it. So a job carrying its own block ran with neither contents: read nor actions: read, regardless of what the top of the file granted. This is why "just add actions: read at the top" is a no-op on these callers — the gate stays absent while looking patched.

What this PR does

  • Repoints the standards reusables to main HEAD 257869d3.
  • Grants actions: read + contents: read at both workflow and job level.
  • Adds workflow_dispatch to scorecard.yml so the gate is verifiable on demand (matching proof-burrower, the verified-working control caller).
  • Holds governance.yml at fad242d3. standards main HEAD is currently unparseable by callers: its actions.lock fell out of sync with governance-reusable.yml after Dependabot #746, so pinning HEAD returns HTTP 422 … references actions not present in the lockfile and the run dies at startup. fix(ci): resync actions.lock with the workflow refs Dependabot bumped (#746) standards#754 resyncs it; governance moves to HEAD once that lands.

Verification — dispatched on this branch, job counts measured

workflow main this branch
governance 15j 14j already alive, held at fad242d3
scorecard 0j 2j REVIVED
mirror 0j 7j REVIVED
secret-scanner 0j 3j REVIVED
hypatia-scan 1j 1j local workflow, not a standards caller

Job counts come from actions/runs/<id>/jobs .total_count — a failing-checks list cannot distinguish "gate passed" from "gate never ran", so the positive control is the count itself.

Newly-visible failures (e.g. mirror's bitbucket/sourcehut targets) are real findings the absent gate was concealing, not regressions introduced here.

🤖 Generated with Claude Code

https://claude.ai/code/session_01QMTyDv9CoJo5PfeNzyp519

@coderabbitai

coderabbitai Bot commented Sep 4, 2026 •

Copy link
Copy Markdown
Contributor

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 37220a0d-cd4a-4113-b292-a1b11f143bc4

📥 Commits

Reviewing files that changed from the base of the PR and between 3745fe7 and 3ba1737.

📒 Files selected for processing (5)
  • .github/workflows/elixir-ci.yml
  • .github/workflows/governance.yml
  • .github/workflows/mirror.yml
  • .github/workflows/scorecard.yml
  • .github/workflows/secret-scanner.yml

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.

📜 Recent review details
⚠️ CI failures not shown inline (24)

GitHub Actions: Elixir CI / 0_Build and test.txt: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Running mix local.rebar,--force
 [command]/home/runner/work/_temp/.setup-beam/elixir/bin/mix local.rebar --force
 ** (Mix) httpc request failed with: {:failed_connect, [{:to_address, {~c"builds.hex.pm", 443}}, {:inet, [:inet], {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}}]}
 Could not install Rebar because Mix could not download metadata at https://builds.hex.pm/installs/rebar3-1.x.csv.
 Action mix rebar failed for mirror https://builds.hex.pm, with Error: The process '/home/runner/work/_temp/.setup-beam/elixir/bin/mix' failed with exit code 1
 ##[error]Could not mix rebar from any hex.pm mirror

GitHub Actions: Hypatia Security Scan / 0_Hypatia Neurosymbolic Analysis.txt: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Running mix local.rebar,--force
 [command]/home/runner/work/_temp/.setup-beam/elixir/bin/mix local.rebar --force
 ** (Mix) httpc request failed with: {:failed_connect, [{:to_address, {~c"builds.hex.pm", 443}}, {:inet, [:inet], {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}}]}
 Could not install Rebar because Mix could not download metadata at https://builds.hex.pm/installs/rebar3-1.x.csv.
 Action mix rebar failed for mirror https://builds.hex.pm, with Error: The process '/home/runner/work/_temp/.setup-beam/elixir/bin/mix' failed with exit code 1
 ##[error]Could not mix rebar from any hex.pm mirror

GitHub Actions: Elixir CI / Build and test: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Running mix local.rebar,--force
 [command]/home/runner/work/_temp/.setup-beam/elixir/bin/mix local.rebar --force
 ** (Mix) httpc request failed with: {:failed_connect, [{:to_address, {~c"builds.hex.pm", 443}}, {:inet, [:inet], {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}}]}
 Could not install Rebar because Mix could not download metadata at https://builds.hex.pm/installs/rebar3-1.x.csv.
 Action mix rebar failed for mirror https://builds.hex.pm, with Error: The process '/home/runner/work/_temp/.setup-beam/elixir/bin/mix' failed with exit code 1
 ##[error]Could not mix rebar from any hex.pm mirror

GitHub Actions: Elixir CI / 0_elixir-ci _ Compile + test.txt: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Running mix local.rebar,--force
 [command]/home/runner/work/_temp/.setup-beam/elixir/bin/mix local.rebar --force
 ** (Mix) httpc request failed with: {:failed_connect, [{:to_address, {~c"builds.hex.pm", 443}}, {:inet, [:inet], {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}}]}
 Could not install Rebar because Mix could not download metadata at https://builds.hex.pm/installs/rebar3-1.x.csv.
 Action mix rebar failed for mirror https://builds.hex.pm, with Error: The process '/home/runner/work/_temp/.setup-beam/elixir/bin/mix' failed with exit code 1
 ##[error]Could not mix rebar from any hex.pm mirror

GitHub Actions: Hypatia Security Scan / Hypatia Neurosymbolic Analysis: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Running mix local.rebar,--force
 [command]/home/runner/work/_temp/.setup-beam/elixir/bin/mix local.rebar --force
 ** (Mix) httpc request failed with: {:failed_connect, [{:to_address, {~c"builds.hex.pm", 443}}, {:inet, [:inet], {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}}]}
 Could not install Rebar because Mix could not download metadata at https://builds.hex.pm/installs/rebar3-1.x.csv.
 Action mix rebar failed for mirror https://builds.hex.pm, with Error: The process '/home/runner/work/_temp/.setup-beam/elixir/bin/mix' failed with exit code 1
 ##[error]Could not mix rebar from any hex.pm mirror

GitHub Actions: Elixir CI / elixir-ci _ Compile + test: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Running mix local.rebar,--force
 [command]/home/runner/work/_temp/.setup-beam/elixir/bin/mix local.rebar --force
 ** (Mix) httpc request failed with: {:failed_connect, [{:to_address, {~c"builds.hex.pm", 443}}, {:inet, [:inet], {:tls_alert, {:unsupported_certificate, ~c"TLS client: In state wait_cert_cr at ssl_handshake.erl:2199 generated CLIENT ALERT: Fatal - Unsupported Certificate\n {key_usage_mismatch,{{'Extension',{2,5,29,15},true,[keyCertSign,cRLSign]},\n                      {'Extension',{2,5,29,37},false,[{1,3,6,1,5,5,7,3,1}]}}}"}}}]}
 Could not install Rebar because Mix could not download metadata at https://builds.hex.pm/installs/rebar3-1.x.csv.
 Action mix rebar failed for mirror https://builds.hex.pm, with Error: The process '/home/runner/work/_temp/.setup-beam/elixir/bin/mix' failed with exit code 1
 ##[error]Could not mix rebar from any hex.pm mirror

GitHub Actions: Elixir CI / Build and test: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

Print service container logs: 21208dbbba7e47c1b0d9d7f373301710_postgres16alpinesha25679950da386bda7fcc9d57aa9aa9be6c6d7407596a9b8f68014b09a778a9ab316_35b4fc
 ##[command]/usr/bin/docker logs --details ***REDACTED_HIGH_ENTROPY_STRING***
  sh: locale: not found
  The files belonging to this database system will be owned by user "postgres".
  .586 UTC [35] WARNING:  no usable system locales were found
  initdb: warning: enabling "trust" authentication for local connections
  initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
  .431 UTC [1] LOG:  starting PostgreSQL 16.14 on x86_64-pc-linux-musl, compiled by gcc (Alpine 15.2.0) 15.2.0, 64-bit
  .431 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
  .431 UTC [1] LOG:  listening on IPv6 address "::", port 5432
  .432 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
  .435 UTC [55] LOG:  database system was shut down at  UTC
  .440 UTC [1] LOG:  database system is ready to accept connections
  This user must also own the server process.
  The database cluster will be initialized with locale "en_US.utf8".
  The default database encoding has accordingly been set to "UTF8".
  The default text search configuration will be set to "english".
  Data page checksums are disabled.
  fixing permissions on existing directory /var/lib/postgresql/data ... ok
  creating subdirectories ... ok
  selecting dynamic shared memory implementation ... posix
  selecting default max_connections ... 100
  selecting default shared_buffers ... 128MB
  selecting default time zone ... UTC
  creating configuration files ... ok
  running bootstrap script ... ok
  performing post-bootstrap initialization ... ok
  syncing data to disk ... ok
  Success. You can now start the database server using:
      pg_ctl -D /var/lib/postgresql/data -l logfile start
  waiting for server to start.....216 UTC [41] LOG:  starting PostgreSQL...

GitHub Actions: Deno CI / 0_build.txt: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run deno task lint
 �[36;1mdeno task lint�[0m
 shell: /usr/bin/bash -e {0}
 ##[endgroup]
 �[0m�[1m�[31merror�[0m: deno task couldn't find deno.json(c) or package.json. See https://docs.deno.com/go/config
 ##[error]Process completed with exit code 1.

GitHub Actions: Hypatia Security Scan / Hypatia Neurosymbolic Analysis: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run github/codeql-action/upload-sarif@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd
 with:
   sarif_file: hypatia.sarif
   category: hypatia
   checkout_path: /home/runner/work/bofig/bofig
   ***REDACTED_SECRET_ASSIGNMENT***
   matrix: null
   wait-for-processing: true
 env:
   INSTALL_DIR_FOR_OTP: /home/runner/work/_temp/.setup-beam/otp
   INSTALL_DIR_FOR_ELIXIR: /home/runner/work/_temp/.setup-beam/elixir
 ##[endgroup]
 Job run UUID is de5594d7-d811-4f26-a8a6-5b5b1d9df525.
 ##[error]Path does not exist: hypatia.sarif

GitHub Actions: Mirror to Git Forges / 0_mirror _ mirror-gitlab.txt: .github/workflows/mirror.yml

Conclusion: failure

View job details

##[group]Run ssh-keyscan -t ed25519 gitlab.com >> ~/.ssh/known_hosts
 �[36;1mssh-keyscan -t ed25519 gitlab.com >> ~/.ssh/known_hosts�[0m
 �[36;1mgit remote add gitlab git@gitlab.com:hyperpolymath/bofig.git || true�[0m
 �[36;1mgit push --force gitlab main�[0m
 shell: /usr/bin/bash -e {0}
 env:
   GITLAB_KEY: ***
   SSH_AUTH_SOCK: /tmp/ssh-BS8ijtCEOJE1/agent.2259
   SSH_AGENT_PID: 2260
 ##[endgroup]
 # gitlab.com:22 SSH-2.0-GitLab-SSHD
 error: src refspec main does not match any
 error: failed to push some refs to 'gitlab.com:hyperpolymath/bofig.git'
 ##[error]Process completed with exit code 1.

GitHub Actions: Deno CI / build: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run deno task lint
 �[36;1mdeno task lint�[0m
 shell: /usr/bin/bash -e {0}
 ##[endgroup]
 �[0m�[1m�[31merror�[0m: deno task couldn't find deno.json(c) or package.json. See https://docs.deno.com/go/config
 ##[error]Process completed with exit code 1.

GitHub Actions: Mirror to Git Forges / mirror _ mirror-gitlab: .github/workflows/mirror.yml

Conclusion: failure

View job details

##[group]Run ssh-keyscan -t ed25519 gitlab.com >> ~/.ssh/known_hosts
 �[36;1mssh-keyscan -t ed25519 gitlab.com >> ~/.ssh/known_hosts�[0m
 �[36;1mgit remote add gitlab git@gitlab.com:hyperpolymath/bofig.git || true�[0m
 �[36;1mgit push --force gitlab main�[0m
 shell: /usr/bin/bash -e {0}
 env:
   GITLAB_KEY: ***
   SSH_AUTH_SOCK: /tmp/ssh-BS8ijtCEOJE1/agent.2259
   SSH_AGENT_PID: 2260
 ##[endgroup]
 # gitlab.com:22 SSH-2.0-GitLab-SSHD
 error: src refspec main does not match any
 error: failed to push some refs to 'gitlab.com:hyperpolymath/bofig.git'
 ##[error]Process completed with exit code 1.

GitHub Actions: Mirror to Git Forges / 1_mirror _ mirror-sourcehut.txt: .github/workflows/mirror.yml

Conclusion: failure

View job details

##[group]Run ssh-keyscan -t ed25519 git.sr.ht >> ~/.ssh/known_hosts
 �[36;1mssh-keyscan -t ed25519 git.sr.ht >> ~/.ssh/known_hosts�[0m
 �[36;1mgit remote add sourcehut git@git.sr.ht:~hyperpolymath/bofig || true�[0m
 �[36;1mgit push --force sourcehut main�[0m
 shell: /usr/bin/bash -e {0}
 env:
   SOURCEHUT_KEY: ***
   SSH_AUTH_SOCK: /tmp/ssh-ebNtGCg3XAjQ/agent.2287
   SSH_AGENT_PID: 2288
 ##[endgroup]
 # git.sr.ht:22 SSH-2.0-OpenSSH_10.3
 error: src refspec main does not match any
 error: failed to push some refs to 'git.sr.ht:~hyperpolymath/bofig'
 ##[error]Process completed with exit code 1.

GitHub Actions: Mirror to Git Forges / mirror _ mirror-sourcehut: .github/workflows/mirror.yml

Conclusion: failure

View job details

##[group]Run ssh-keyscan -t ed25519 git.sr.ht >> ~/.ssh/known_hosts
 �[36;1mssh-keyscan -t ed25519 git.sr.ht >> ~/.ssh/known_hosts�[0m
 �[36;1mgit remote add sourcehut git@git.sr.ht:~hyperpolymath/bofig || true�[0m
 �[36;1mgit push --force sourcehut main�[0m
 shell: /usr/bin/bash -e {0}
 env:
   SOURCEHUT_KEY: ***
   SSH_AUTH_SOCK: /tmp/ssh-ebNtGCg3XAjQ/agent.2287
   SSH_AGENT_PID: 2288
 ##[endgroup]
 # git.sr.ht:22 SSH-2.0-OpenSSH_10.3
 error: src refspec main does not match any
 error: failed to push some refs to 'git.sr.ht:~hyperpolymath/bofig'
 ##[error]Process completed with exit code 1.

GitHub Actions: Mirror to Git Forges / 3_mirror _ mirror-bitbucket.txt: .github/workflows/mirror.yml

Conclusion: failure

View job details

##[group]Run ssh-keyscan -t ed25519 bitbucket.org >> ~/.ssh/known_hosts
 �[36;1mssh-keyscan -t ed25519 bitbucket.org >> ~/.ssh/known_hosts�[0m
 �[36;1mgit remote add bitbucket git@bitbucket.org:hyperpolymath/bofig.git || true�[0m
 �[36;1mgit push --force bitbucket main�[0m
 shell: /usr/bin/bash -e {0}
 env:
   BITBUCKET_KEY: ***
   SSH_AUTH_SOCK: /tmp/ssh-XFJ1zy8NoZtP/agent.2278
   SSH_AGENT_PID: 2279
 ##[endgroup]
 # bitbucket.org:22 SSH-2.0-conker_20260908-51be3a8711 92cd44494f09
 error: src refspec main does not match any
 error: failed to push some refs to 'bitbucket.org:hyperpolymath/bofig.git'
 ##[error]Process completed with exit code 1.

GitHub Actions: Dogfood Gate / 1_Groove manifest check.txt: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run # Check for static or dynamic Groove endpoints
 �[36;1m# Check for static or dynamic Groove endpoints�[0m
 �[36;1mHAS_MANIFEST="false"�[0m
 �[36;1mHAS_GROOVE_CODE="false"�[0m
 �[36;1m�[0m
 �[36;1mif [ -f ".well-known/groove/manifest.json" ]; then�[0m
 �[36;1m  HAS_MANIFEST="true"�[0m
 �[36;1m  # Validate the manifest JSON�[0m
 �[36;1m  if ! jq empty .well-known/groove/manifest.json 2>/dev/null; then�[0m
 �[36;1m    echo "::error file=.well-known/groove/manifest.json::Invalid JSON in Groove manifest"�[0m

GitHub Actions: Mirror to Git Forges / mirror _ mirror-bitbucket: .github/workflows/mirror.yml

Conclusion: failure

View job details

##[group]Run ssh-keyscan -t ed25519 bitbucket.org >> ~/.ssh/known_hosts
 �[36;1mssh-keyscan -t ed25519 bitbucket.org >> ~/.ssh/known_hosts�[0m
 �[36;1mgit remote add bitbucket git@bitbucket.org:hyperpolymath/bofig.git || true�[0m
 �[36;1mgit push --force bitbucket main�[0m
 shell: /usr/bin/bash -e {0}
 env:
   BITBUCKET_KEY: ***
   SSH_AUTH_SOCK: /tmp/ssh-XFJ1zy8NoZtP/agent.2278
   SSH_AGENT_PID: 2279
 ##[endgroup]
 # bitbucket.org:22 SSH-2.0-conker_20260908-51be3a8711 92cd44494f09
 error: src refspec main does not match any
 error: failed to push some refs to 'bitbucket.org:hyperpolymath/bofig.git'
 ##[error]Process completed with exit code 1.

GitHub Actions: Dogfood Gate / Groove manifest check: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run # Check for static or dynamic Groove endpoints
 �[36;1m# Check for static or dynamic Groove endpoints�[0m
 �[36;1mHAS_MANIFEST="false"�[0m
 �[36;1mHAS_GROOVE_CODE="false"�[0m
 �[36;1m�[0m
 �[36;1mif [ -f ".well-known/groove/manifest.json" ]; then�[0m
 �[36;1m  HAS_MANIFEST="true"�[0m
 �[36;1m  # Validate the manifest JSON�[0m
 �[36;1m  if ! jq empty .well-known/groove/manifest.json 2>/dev/null; then�[0m
 �[36;1m    echo "::error file=.well-known/groove/manifest.json::Invalid JSON in Groove manifest"�[0m

GitHub Actions: Dogfood Gate / 3_Validate eclexiaiser manifest.txt: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run if [ ! -f "eclexiaiser.toml" ]; then
 �[36;1mif [ ! -f "eclexiaiser.toml" ]; then�[0m
 �[36;1m  # Check if repo has a Containerfile — if so, recommend eclexiaiser�[0m
 �[36;1m  if [ -f "Containerfile" ]; then�[0m
 �[36;1m    echo "::warning::Containerfile present but no eclexiaiser.toml. Run \`eclexiaiser init\` to scaffold energy/carbon budgets."�[0m
 �[36;1m  fi�[0m
 �[36;1m  echo "has_manifest=false" >> "$GITHUB_OUTPUT"�[0m
 �[36;1m  exit 0�[0m
 �[36;1mfi�[0m
 �[36;1m�[0m
 �[36;1mecho "has_manifest=true" >> "$GITHUB_OUTPUT"�[0m
 �[36;1m�[0m
 �[36;1m# Validate TOML structure using Python 3.11+ tomllib�[0m
 �[36;1mpython3 -c "�[0m
 �[36;1mimport tomllib, sys�[0m
 �[36;1mwith open('eclexiaiser.toml', 'rb') as f:�[0m
 �[36;1m    data = tomllib.load(f)�[0m
 �[36;1mproject = data.get('project', {})�[0m
 �[36;1mif not project.get('name', '').strip():�[0m
 �[36;1m    print('ERROR: project.name is required', file=sys.stderr)�[0m
 �[36;1m    sys.exit(1)�[0m
 �[36;1mfunctions = data.get('functions', [])�[0m
 �[36;1mif not functions:�[0m
 �[36;1m    print('ERROR: at least one [[functions]] entry is required', file=sys.stderr)�[0m
 �[36;1m    sys.exit(1)�[0m
 �[36;1mfor fn in functions:�[0m
 �[36;1m    if not fn.get('name', '').strip():�[0m
 �[36;1m        print('ERROR: function name cannot be empty', file=sys.stderr)�[0m
 �[36;1m        sys.exit(1)�[0m
 �[36;1m    if not fn.get('source', '').strip():�[0m
 �[36;1m        print(f'ERROR: function {fn[\"name\"]} has no source path', file=sys.stderr)�[0m
 �[36;1m        sys.exit(1)�[0m
 �[36;1mprint(f'Valid: {project[\"name\"]} ({len(functions)} function(s))')�[0m
 �[36;1m" || {�[0m
 �[36;1m  echo "::error file=eclexiaiser.toml::Invalid eclexiaiser.toml — see step output for details"�[0m

GitHub Actions: Dogfood Gate / Validate eclexiaiser manifest: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run if [ ! -f "eclexiaiser.toml" ]; then
 �[36;1mif [ ! -f "eclexiaiser.toml" ]; then�[0m
 �[36;1m  # Check if repo has a Containerfile — if so, recommend eclexiaiser�[0m
 �[36;1m  if [ -f "Containerfile" ]; then�[0m
 �[36;1m    echo "::warning::Containerfile present but no eclexiaiser.toml. Run \`eclexiaiser init\` to scaffold energy/carbon budgets."�[0m
 �[36;1m  fi�[0m
 �[36;1m  echo "has_manifest=false" >> "$GITHUB_OUTPUT"�[0m
 �[36;1m  exit 0�[0m
 �[36;1mfi�[0m
 �[36;1m�[0m
 �[36;1mecho "has_manifest=true" >> "$GITHUB_OUTPUT"�[0m
 �[36;1m�[0m
 �[36;1m# Validate TOML structure using Python 3.11+ tomllib�[0m
 �[36;1mpython3 -c "�[0m
 �[36;1mimport tomllib, sys�[0m
 �[36;1mwith open('eclexiaiser.toml', 'rb') as f:�[0m
 �[36;1m    data = tomllib.load(f)�[0m
 �[36;1mproject = data.get('project', {})�[0m
 �[36;1mif not project.get('name', '').strip():�[0m
 �[36;1m    print('ERROR: project.name is required', file=sys.stderr)�[0m
 �[36;1m    sys.exit(1)�[0m
 �[36;1mfunctions = data.get('functions', [])�[0m
 �[36;1mif not functions:�[0m
 �[36;1m    print('ERROR: at least one [[functions]] entry is required', file=sys.stderr)�[0m
 �[36;1m    sys.exit(1)�[0m
 �[36;1mfor fn in functions:�[0m
 �[36;1m    if not fn.get('name', '').strip():�[0m
 �[36;1m        print('ERROR: function name cannot be empty', file=sys.stderr)�[0m
 �[36;1m        sys.exit(1)�[0m
 �[36;1m    if not fn.get('source', '').strip():�[0m
 �[36;1m        print(f'ERROR: function {fn[\"name\"]} has no source path', file=sys.stderr)�[0m
 �[36;1m        sys.exit(1)�[0m
 �[36;1mprint(f'Valid: {project[\"name\"]} ({len(functions)} function(s))')�[0m
 �[36;1m" || {�[0m
 �[36;1m  echo "::error file=eclexiaiser.toml::Invalid eclexiaiser.toml — see step output for details"�[0m

GitHub Actions: Dogfood Gate / 4_Empty-linter (invisible characters).txt: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run # Inline invisible character detection (from empty-linter's core patterns).
 �[36;1m# Inline invisible character detection (from empty-linter's core patterns).�[0m
 �[36;1m# Checks for: zero-width spaces, zero-width joiners, BOM, soft hyphens,�[0m
 �[36;1m# non-breaking spaces, null bytes, and other invisible Unicode in source files.�[0m
 �[36;1mset +e�[0m
 �[36;1mPATTERNS='(*UTF)[\x00-\x08\x0B\x0C\x0E-\x1F\x{a0}\x{ad}\x{200b}-\x{200f}\x{202a}-\x{202f}\x{2060}\x{2066}-\x{2069}\x{feff}]'�[0m
 �[36;1mfind "$GITHUB_WORKSPACE" \�[0m
 �[36;1m  -not -path '*/.git/*' -not -path '*/node_modules/*' \�[0m
 �[36;1m  -not -path '*/.deno/*' -not -path '*/target/*' \�[0m
 �[36;1m  -not -path '*/_build/*' -not -path '*/deps/*' \�[0m
 �[36;1m  -not -path '*/external_corpora/*' -not -path '*/.lake/*' \�[0m
 �[36;1m  -type f \( -name '*.rs' -o -name '*.ex' -o -name '*.exs' -o -name '*.res' \�[0m
 �[36;1m    -o -name '*.js' -o -name '*.ts' -o -name '*.json' -o -name '*.toml' \�[0m
 �[36;1m    -o -name '*.yml' -o -name '*.yaml' -o -name '*.md' -o -name '*.adoc' \�[0m
 �[36;1m    -o -name '*.idr' -o -name '*.zig' -o -name '*.v' -o -name '*.jl' \�[0m
 �[36;1m    -o -name '*.gleam' -o -name '*.hs' -o -name '*.ml' -o -name '*.sh' \) \�[0m
 �[36;1m  -exec grep -aPrl "$PATTERNS" {} \; > /tmp/empty-lint-results.txt 2>/dev/null�[0m
 �[36;1mEL_EXIT=$?�[0m
 �[36;1mset -e�[0m
 �[36;1m�[0m
 �[36;1mFINDINGS=$(wc -l < /tmp/empty-lint-results.txt 2>/dev/null || echo 0)�[0m
 �[36;1mecho "findings=$FINDINGS" >> "$GITHUB_OUTPUT"�[0m
 �[36;1mecho "exit_code=$EL_EXIT" >> "$GITHUB_OUTPUT"�[0m
 �[36;1mecho "ready=true" >> "$GITHUB_OUTPUT"�[0m
 �[36;1m�[0m
 �[36;1m# Blocking subset: C0 controls and NUL only (owner ruling 2026-08-28).�[0m
 �[36;1m# Invisible Unicode (NBSP/BOM/zero-width) stays ADVISORY - about 2,100�[0m
 �[36;1m# estate files carry it as legitimate typography in prose.�[0m
 �[36;1mblocking=0�[0m
 �[36;1mwhile IFS= read -r bf; do�[0m
 �[36;1m  [ -z "$bf" ] && continue�[0m
 �[36...

GitHub Actions: Dogfood Gate / Empty-linter (invisible characters): fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run # Inline invisible character detection (from empty-linter's core patterns).
 �[36;1m# Inline invisible character detection (from empty-linter's core patterns).�[0m
 �[36;1m# Checks for: zero-width spaces, zero-width joiners, BOM, soft hyphens,�[0m
 �[36;1m# non-breaking spaces, null bytes, and other invisible Unicode in source files.�[0m
 �[36;1mset +e�[0m
 �[36;1mPATTERNS='(*UTF)[\x00-\x08\x0B\x0C\x0E-\x1F\x{a0}\x{ad}\x{200b}-\x{200f}\x{202a}-\x{202f}\x{2060}\x{2066}-\x{2069}\x{feff}]'�[0m
 �[36;1mfind "$GITHUB_WORKSPACE" \�[0m
 �[36;1m  -not -path '*/.git/*' -not -path '*/node_modules/*' \�[0m
 �[36;1m  -not -path '*/.deno/*' -not -path '*/target/*' \�[0m
 �[36;1m  -not -path '*/_build/*' -not -path '*/deps/*' \�[0m
 �[36;1m  -not -path '*/external_corpora/*' -not -path '*/.lake/*' \�[0m
 �[36;1m  -type f \( -name '*.rs' -o -name '*.ex' -o -name '*.exs' -o -name '*.res' \�[0m
 �[36;1m    -o -name '*.js' -o -name '*.ts' -o -name '*.json' -o -name '*.toml' \�[0m
 �[36;1m    -o -name '*.yml' -o -name '*.yaml' -o -name '*.md' -o -name '*.adoc' \�[0m
 �[36;1m    -o -name '*.idr' -o -name '*.zig' -o -name '*.v' -o -name '*.jl' \�[0m
 �[36;1m    -o -name '*.gleam' -o -name '*.hs' -o -name '*.ml' -o -name '*.sh' \) \�[0m
 �[36;1m  -exec grep -aPrl "$PATTERNS" {} \; > /tmp/empty-lint-results.txt 2>/dev/null�[0m
 �[36;1mEL_EXIT=$?�[0m
 �[36;1mset -e�[0m
 �[36;1m�[0m
 �[36;1mFINDINGS=$(wc -l < /tmp/empty-lint-results.txt 2>/dev/null || echo 0)�[0m
 �[36;1mecho "findings=$FINDINGS" >> "$GITHUB_OUTPUT"�[0m
 �[36;1mecho "exit_code=$EL_EXIT" >> "$GITHUB_OUTPUT"�[0m
 �[36;1mecho "ready=true" >> "$GITHUB_OUTPUT"�[0m
 �[36;1m�[0m
 �[36;1m# Blocking subset: C0 controls and NUL only (owner ruling 2026-08-28).�[0m
 �[36;1m# Invisible Unicode (NBSP/BOM/zero-width) stays ADVISORY - about 2,100�[0m
 �[36;1m# estate files carry it as legitimate typography in prose.�[0m
 �[36;1mblocking=0�[0m
 �[36;1mwhile IFS= read -r bf; do�[0m
 �[36;1m  [ -z "$bf" ] && continue�[0m
 �[36...

GitHub Actions: Dogfood Gate / 5_Validate A2ML manifests.txt: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]A2ML Manifest Validation
 Scanning . for .a2ml files...
 Found 22 .a2ml file(s)
   Validating: ./.machine_readable/6a2/AGENTIC.a2ml
   Validating: ./.machine_readable/6a2/ECOSYSTEM.a2ml
   Validating: ./.machine_readable/6a2/META.a2ml
   Validating: ./.machine_readable/6a2/NEUROSYM.a2ml
   Validating: ./.machine_readable/6a2/PLAYBOOK.a2ml
   Validating: ./.machine_readable/6a2/STATE.a2ml
   Validating: ./.machine_readable/CLADE.a2ml
   Validating: ./.machine_readable/agent_instructions/coverage.a2ml
   Validating: ./.machine_readable/agent_instructions/debt.a2ml
   Validating: ./.machine_readable/agent_instructions/methodology.a2ml
   Validating: ./.machine_readable/anchors/ANCHOR.a2ml
 ##[warning]Missing SPDX-License-Identifier in first 10 lines
   Validating: ./.machine_readable/contractiles/bust/Bustfile.a2ml
   Validating: ./.machine_readable/contractiles/dust/Dustfile.a2ml
   Validating: ./.machine_readable/contractiles/trust/Trustfile.a2ml
   Validating: ./.machine_readable/integrations/feedback-o-tron.a2ml
   Validating: ./.machine_readable/integrations/proven.a2ml
   Validating: ./.machine_readable/integrations/verisimdb.a2ml
   Validating: ./.machine_readable/integrations/vexometer.a2ml
   Validating: ./0-AI-MANIFEST.a2ml
   Validating: ./audits/assail-classifications.a2ml
 ##[warning]Missing SPDX-License-Identifier in first 10 lines
 ##[error]Missing required identity field (agent-id, name, or project)

GitHub Actions: Dogfood Gate / Validate A2ML manifests: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]A2ML Manifest Validation
 Scanning . for .a2ml files...
 Found 22 .a2ml file(s)
   Validating: ./.machine_readable/6a2/AGENTIC.a2ml
   Validating: ./.machine_readable/6a2/ECOSYSTEM.a2ml
   Validating: ./.machine_readable/6a2/META.a2ml
   Validating: ./.machine_readable/6a2/NEUROSYM.a2ml
   Validating: ./.machine_readable/6a2/PLAYBOOK.a2ml
   Validating: ./.machine_readable/6a2/STATE.a2ml
   Validating: ./.machine_readable/CLADE.a2ml
   Validating: ./.machine_readable/agent_instructions/coverage.a2ml
   Validating: ./.machine_readable/agent_instructions/debt.a2ml
   Validating: ./.machine_readable/agent_instructions/methodology.a2ml
   Validating: ./.machine_readable/anchors/ANCHOR.a2ml
 ##[warning]Missing SPDX-License-Identifier in first 10 lines
   Validating: ./.machine_readable/contractiles/bust/Bustfile.a2ml
   Validating: ./.machine_readable/contractiles/dust/Dustfile.a2ml
   Validating: ./.machine_readable/contractiles/trust/Trustfile.a2ml
   Validating: ./.machine_readable/integrations/feedback-o-tron.a2ml
   Validating: ./.machine_readable/integrations/proven.a2ml
   Validating: ./.machine_readable/integrations/verisimdb.a2ml
   Validating: ./.machine_readable/integrations/vexometer.a2ml
   Validating: ./0-AI-MANIFEST.a2ml
   Validating: ./audits/assail-classifications.a2ml
 ##[warning]Missing SPDX-License-Identifier in first 10 lines
 ##[error]Missing required identity field (agent-id, name, or project)
🔇 Additional comments (5)
.github/workflows/governance.yml (1)

30-30: LGTM!

Also applies to: 35-35

.github/workflows/elixir-ci.yml (1)

18-18: LGTM!

Also applies to: 23-23

.github/workflows/mirror.yml (1)

10-10: LGTM!

Also applies to: 15-15

.github/workflows/scorecard.yml (1)

10-10: LGTM!

Also applies to: 18-19, 22-22

.github/workflows/secret-scanner.yml (1)

14-14: LGTM!

Also applies to: 20-20, 22-22


📝 Summary

Summary by CodeRabbit

  • Chores
    • Updated governance, Scorecards, Elixir CI, mirroring and secret-scanning automation to use newer verified revisions.
    • Added read-only permissions required by the Scorecards, Elixir CI, mirroring and secret-scanning workflows.
    • Improved the reliability and security of automated repository checks and maintenance tasks.

Walkthrough

Five GitHub Actions workflows now use the pinned revision 257869d3061d5a8ed1529bf34225d90a2416d51a. The workflows also declare the required read permissions.

Changes

Reusable workflow updates

Layer / File(s) Summary
Workflow permissions and pins
.github/workflows/governance.yml, .github/workflows/elixir-ci.yml, .github/workflows/mirror.yml, .github/workflows/scorecard.yml, .github/workflows/secret-scanner.yml
The workflows update reusable workflow references. They add actions: read where required and define read permissions at workflow and job scope where specified.

Priority: ⬆️ High

Estimated code review effort: 1 (Trivial) | ~5 minutes

Merge Risk: ⚪ Minimal · up to 987bd

This updates reusable GitHub Actions workflow pins and read permissions across five workflows. No concrete current-head merge-blocking risk remains.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly describes the primary change: restoring governance gates that previously started with zero jobs. It matches the workflow pin and permission updates.
Description check ✅ Passed The description directly explains the failed governance gates, the causes, the workflow changes, and the verification results. It is relevant to the changeset.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch

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

A rabbit checks each workflow pin
Read permissions let jobs begin
Five paths point to one revision
YAML stays neat with clear precision
Hop, hop, the updates win

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

coderabbitai[bot]
coderabbitai Bot previously approved these changes Sep 4, 2026
The governance suite was dying at startup on this repo: scorecard, mirror and
secret-scanner each reported 0 jobs and 0 check runs, so main looked green
because the gates were ABSENT, not passing.

Two causes, both fixed here:

1. Callers sat on older standards pins (7fdc2705, 892497fe) whose reusables
   request `actions: read`, which the callers did not grant.
2. A job-level `permissions:` block REPLACES the workflow-level map rather than
   merging with it, so scorecard's job ran with neither `contents: read` nor
   `actions: read` regardless of the workflow-level grant.

All five callers are repointed to standards main HEAD 257869d3 and now grant
`actions: read` + `contents: read` at BOTH workflow and job level.

Verified: every *-reusable.yml referenced exists at 257869d3.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QMTyDv9CoJo5PfeNzyp519
@hyperpolymath
hyperpolymath force-pushed the fix/restore-reachable-standards-pin branch from bab40dc to 3ba1737 Compare September 8, 2026 18:11
hyperpolymath and others added 2 commits September 8, 2026 19:17
standards main HEAD (257869d3) cannot be parsed by a caller: its actions.lock is
out of sync with governance-reusable.yml after Dependabot PR #746, so a caller
pinning it gets HTTP 422 and dies at startup with zero jobs.

hyperpolymath/standards#754 resyncs the lockfile. Until it merges, governance stays
on fad242d3 - the pin with a verified green 15-job run. The other four callers move
to main HEAD, which parses cleanly (mirror verified: 7 jobs, was 0).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QMTyDv9CoJo5PfeNzyp519
…emand

scorecard.yml triggered only on branch_protection_rule and schedule, so there was
no way to prove the startup-failure repair works before merging it. The canonical
template caller (proof-burrower, the verified-working control) carries
workflow_dispatch; this matches it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QMTyDv9CoJo5PfeNzyp519
@hyperpolymath hyperpolymath changed the title fix(ci): restore reachable standards workflow pins fix(ci): revive the startup-dead governance gates (0 jobs -> running) Sep 8, 2026
@hyperpolymath
hyperpolymath merged commit fede09f into main Sep 8, 2026
32 of 39 checks passed
@hyperpolymath
hyperpolymath deleted the fix/restore-reachable-standards-pin branch September 8, 2026 23:03
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