Skip to content

fix(ci): repair unparseable scorecard.yml that startup-kills the run - #187

Merged
hyperpolymath merged 1 commit into
mainfrom
fix/repair-startup-dead-scorecard-yml
Sep 14, 2026
Merged

hyperpolymath merged 1 commit into
mainfrom
fix/repair-startup-dead-scorecard-yml

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

The defect

.github/workflows/scorecard.yml was not valid YAML:

permissions: read-all
  actions: read

A scalar value with a mapping key indented beneath it:

yaml: line 12, column 10: mapping values are not allowed in this context

The file also carried a second, well-formed permissions: block immediately below
the broken pair, so those two lines are pure debris from a permissions sweep. Deleting
them leaves the intended permissions exactly as they were.

Why this is worse than a red build

The run is still created, but it emits jobs.total_count == 0 and never produces a
check run
. A required context therefore never reports — so an unrepaired repo
looks greener than a repaired one. Screening on conclusion colour hides this class
entirely; the only sound screen is the job count.

Verification

  • yq parses the file
  • jobs is a non-empty map
  • jobs.analysis is a pure reusable-workflow caller — uses present, no steps, no runs-on
  • actionlint clean
  • the pin 8f2ee508 resolves (standards, 2026-09-08) and is left untouched — this is a YAML-only fix
  • commit is signed, %G? = G

Context

Ten sibling repos already carry this same repair on open PRs. bofig was the one member
of the family with no open repair PR, which is why it is still broken on main.

🤖 Generated with Claude Code

https://claude.ai/code/session_0178nN4Nm3neFRy5K9StZKnB

`permissions: read-all` was followed by an indented `actions: read`, i.e. a
scalar value with a mapping key under it. That is not valid YAML:

    yaml: line 12, column 10: mapping values are not allowed in this context

The file also carried a second, well-formed `permissions:` block immediately
below the broken pair, so the malformed two lines are pure debris from a
permissions sweep. Deleting them leaves the intended permissions intact.

Why this matters more than a red build: the run is created, emits
`jobs.total_count == 0` and NEVER produces a check run, so a *required*
context simply never reports. An unrepaired repo therefore looks GREENER
than a repaired one. Screen on job count, never on conclusion colour.

Verified: `yq` parses; `jobs` is a non-empty map; `jobs.analysis` is a pure
reusable-workflow caller (`uses` present, no `steps`, no `runs-on`);
actionlint clean. The pin 8f2ee508 resolves and is left untouched.

This is the same repair already carried by the other ten repos in this
family; bofig was the one member with no open repair PR.

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

coderabbitai Bot commented Sep 14, 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: 3e4e2736-4fc7-4136-8006-7ec8f2167a03

📥 Commits

Reviewing files that changed from the base of the PR and between 6678798 and 58519b2.

📒 Files selected for processing (1)
  • .github/workflows/scorecard.yml
💤 Files with no reviewable changes (1)
  • .github/workflows/scorecard.yml

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

📜 Recent review details
⏰ Context from checks skipped due to timeout. (2)
  • GitHub Check: governance / Validate Hypatia Baseline
  • GitHub Check: analyze (javascript-typescript, none)
⚠️ CI failures not shown inline (10)

GitHub Actions: Elixir CI / 0_Build and test.txt: fix(ci): repair unparseable scorecard.yml that startup-kills the run

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): repair unparseable scorecard.yml that startup-kills the run

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): repair unparseable scorecard.yml that startup-kills the run

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): repair unparseable scorecard.yml that startup-kills the run

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): repair unparseable scorecard.yml that startup-kills the run

Conclusion: failure

View job details

Print service container logs: 24562cdc7e3843ab9741f0acb83b99fc_postgres16alpinesha25679950da386bda7fcc9d57aa9aa9be6c6d7407596a9b8f68014b09a778a9ab316_d9088b
 ##[command]/usr/bin/docker logs --details ***REDACTED_HIGH_ENTROPY_STRING***
  The files belonging to this database system will be owned by user "postgres".
  sh: locale: not found
  .258 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.
  .023 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
  .023 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
  .023 UTC [1] LOG:  listening on IPv6 address "::", port 5432
  .024 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
  .028 UTC [55] LOG:  database system was shut down at  UTC
  .033 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.....790 UTC [41] LOG:  starting PostgreSQL...

GitHub Actions: Hypatia Security Scan / Hypatia Neurosymbolic Analysis: fix(ci): repair unparseable scorecard.yml that startup-kills the run

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): repair unparseable scorecard.yml that startup-kills the run

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: Deno CI / 0_build.txt: fix(ci): repair unparseable scorecard.yml that startup-kills the run

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): repair unparseable scorecard.yml that startup-kills the run

Conclusion: failure

View job details

##[group]Run github/codeql-action/upload-sarif@b96794f015dfd88f77b49b1c93e0fa7110f94c63
 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 5d4e0ef1-ec62-43fc-a42a-6a0825d5c7f6.
 ##[error]Path does not exist: hypatia.sarif

GitHub Actions: Deno CI / build: fix(ci): repair unparseable scorecard.yml that startup-kills the run

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.

📝 Summary

Summary by CodeRabbit

  • Security
    • Workflow permissions are now governed solely by the explicitly defined permission scopes.
    • Removes the broader default read access, limiting permissions to the scopes required by the workflow.

Walkthrough

The scorecard workflow removes the top-level permissions: read-all and actions: read entries. It retains the explicit permission map for actions, contents, security-events, and id-token.

Changes

Scorecard workflow permissions

Layer / File(s) Summary
Retain explicit workflow permissions
.github/workflows/scorecard.yml
The workflow removes the broad permission entries and uses the explicit permission map for its default scopes.

Priority: ⬇️ Low

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

Change: Bug fix

Merge Risk: ⚪ Minimal · up to 58519

The YAML-only repair retains the explicit permissions map with no identified merge-blocking risk.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely identifies the CI workflow repair and the invalid YAML that prevented the run from creating checks.
Description check ✅ Passed The description directly explains the malformed YAML, the resulting workflow failure, the two-line repair, and the verification performed.
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.
✨ 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 the workflow gate
Two broad permissions leave their place
Read and write scopes stay defined
A tidy YAML trail remains behind
The scorecard hops on, safely aligned

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

@hyperpolymath
hyperpolymath merged commit e754d2b into main Sep 14, 2026
29 of 35 checks passed
@hyperpolymath
hyperpolymath deleted the fix/repair-startup-dead-scorecard-yml branch September 14, 2026 21:05
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