Skip to content

fix(ci): restore reachable standards workflow pins - #65

Merged
hyperpolymath merged 2 commits into
mainfrom
fix/restore-hypatia-reusable-pin
Sep 6, 2026
Merged

fix(ci): restore reachable standards workflow pins#65
hyperpolymath merged 2 commits into
mainfrom
fix/restore-hypatia-reusable-pin

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Re-pin four standards reusable workflows from the non-mainline 7fdc270 commit to reachable standards main commit 092dedad. This restores the standalone Hypatia SARIF upload that the code-scanning rule on PR #49 is waiting for. The old commit exists but is not reachable from standards main, so GitHub rejects it before creating jobs as workflow was not found. Verified with actionlint and the repository workflow validator; the old SHA is absent from active workflows after serving as the positive control. Related: #49, #15.

@coderabbitai

coderabbitai Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Team

Run ID: bc9cb226-0521-4b48-a4e6-e5033e3db27b

📥 Commits

Reviewing files that changed from the base of the PR and between 969d529 and 15ea5c0.

📒 Files selected for processing (4)
  • .github/workflows/governance.yml
  • .github/workflows/hypatia-scan.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 (25)

GitHub Actions: SonarQube / 0_SonarQube.txt: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run SonarSource/sonarqube-scan-action@22918119ff8e1ca75a623e15c8296b6ea4fbe28f
 with:
   projectBaseDir: .
   scannerVersion: 8.1.0.6389
   scannerBinariesUrl: https://binaries.sonarsource.com/Distribution/sonar-scanner-cli
   skipSignatureVerification: false
 env:
   SONAR_***REDACTED_SECRET_ASSIGNMENT***
 ##[endgroup]
 Installing Sonar Scanner CLI 8.1.0.6389 for linux-x64...
 Downloading from: https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-8.1.0.6389-linux-x64.zip
 Downloading signature from: https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-8.1.0.6389-linux-x64.zip.asc
 Importing SonarSource public key from hkps://keyserver.ubuntu.com...
 [command]/usr/bin/gpg --homedir /home/runner/work/_temp/gpg-c1812d06 --batch --keyserver hkps://keyserver.ubuntu.com --recv-keys 679F1EE92B19609DE816FDE81DB198F93525EC1A
 gpg: keybox '/home/runner/work/_temp/gpg-c1812d06/pubring.kbx' created
 gpg: /home/runner/work/_temp/gpg-c1812d06/trustdb.gpg: trustdb created
 gpg: key 1DB198F93525EC1A: public key "SonarSource S.A. <infra@sonarsource.com>" imported
 gpg: Total number processed: 1
 gpg:               imported: 1
 Successfully imported key from hkps://keyserver.ubuntu.com
 ✓ SonarSource public key imported successfully
 Verifying GPG signature...
 [command]/usr/bin/gpg --homedir /home/runner/work/_temp/gpg-c1812d06 --batch --verify /home/runner/work/_temp/95c39623-3716-48fc-9460-efc142a5dbcc /home/runner/work/_temp/da8e0324-0c0e-4d2e-b32f-eb474bac8b8b
 gpg: Signature made Tue Apr 21 07:20:26 2026 UTC
 gpg:                using RSA key D1436C0DBACEA48702AF97C363F1DD7753B8B315
 gpg: Good signature from "SonarSource S.A. <infra@sonarsource.com>" [unknown]
 gpg: WARNING: This key is not certified with a trusted signature!
 gpg:          There is no indication that the signature belongs to the owner.
 Primary key fingerprint: 679F 1EE9 2B19 609D E816  FDE8 1DB1 98F9 3525 EC1A
      Subkey fingerprint: D14...

GitHub Actions: SonarQube / SonarQube: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run SonarSource/sonarqube-scan-action@22918119ff8e1ca75a623e15c8296b6ea4fbe28f
 with:
   projectBaseDir: .
   scannerVersion: 8.1.0.6389
   scannerBinariesUrl: https://binaries.sonarsource.com/Distribution/sonar-scanner-cli
   skipSignatureVerification: false
 env:
   SONAR_***REDACTED_SECRET_ASSIGNMENT***
 ##[endgroup]
 Installing Sonar Scanner CLI 8.1.0.6389 for linux-x64...
 Downloading from: https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-8.1.0.6389-linux-x64.zip
 Downloading signature from: https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-8.1.0.6389-linux-x64.zip.asc
 Importing SonarSource public key from hkps://keyserver.ubuntu.com...
 [command]/usr/bin/gpg --homedir /home/runner/work/_temp/gpg-c1812d06 --batch --keyserver hkps://keyserver.ubuntu.com --recv-keys 679F1EE92B19609DE816FDE81DB198F93525EC1A
 gpg: keybox '/home/runner/work/_temp/gpg-c1812d06/pubring.kbx' created
 gpg: /home/runner/work/_temp/gpg-c1812d06/trustdb.gpg: trustdb created
 gpg: key 1DB198F93525EC1A: public key "SonarSource S.A. <infra@sonarsource.com>" imported
 gpg: Total number processed: 1
 gpg:               imported: 1
 Successfully imported key from hkps://keyserver.ubuntu.com
 ✓ SonarSource public key imported successfully
 Verifying GPG signature...
 [command]/usr/bin/gpg --homedir /home/runner/work/_temp/gpg-c1812d06 --batch --verify /home/runner/work/_temp/95c39623-3716-48fc-9460-efc142a5dbcc /home/runner/work/_temp/da8e0324-0c0e-4d2e-b32f-eb474bac8b8b
 gpg: Signature made Tue Apr 21 07:20:26 2026 UTC
 gpg:                using RSA key D1436C0DBACEA48702AF97C363F1DD7753B8B315
 gpg: Good signature from "SonarSource S.A. <infra@sonarsource.com>" [unknown]
 gpg: WARNING: This key is not certified with a trusted signature!
 gpg:          There is no indication that the signature belongs to the owner.
 Primary key fingerprint: 679F 1EE9 2B19 609D E816  FDE8 1DB1 98F9 3525 EC1A
      Subkey fingerprint: D14...

GitHub Actions: Dogfood Gate / 2_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 eclexiaiser.toml structure (bash + grep; NO Python per estate policy).�[0m
 �[36;1m# Structural presence checks only — deep schema validation is eclexiaiser's own job.�[0m
 �[36;1merr=0�[0m
 �[36;1mgrep -qE '^[[:space:]]*\[project\]'        eclexiaiser.toml || { echo "::error file=eclexiaiser.toml::[project] section is required"; err=1; }�[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 eclexiaiser.toml structure (bash + grep; NO Python per estate policy).�[0m
 �[36;1m# Structural presence checks only — deep schema validation is eclexiaiser's own job.�[0m
 �[36;1merr=0�[0m
 �[36;1mgrep -qE '^[[:space:]]*\[project\]'        eclexiaiser.toml || { echo "::error file=eclexiaiser.toml::[project] section is required"; err=1; }�[0m

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

Conclusion: failure

View job details

##[group]K9 Configuration Validation
 Scanning . for K9 files (.k9, .k9.ncl)...
 Found 18 K9 file(s)
   Validating: ./.machine_readable/arrival-pack/claude-md.k9.ncl
   Validating: ./.machine_readable/coaptation/coapt.k9.ncl
   Validating: ./.machine_readable/contractiles/adjust/adjust.k9.ncl
   Validating: ./.machine_readable/contractiles/bust/bust.k9.ncl
   Validating: ./.machine_readable/contractiles/dust/dust.k9.ncl
   Validating: ./.machine_readable/contractiles/intend/intend.k9.ncl
   Validating: ./.machine_readable/contractiles/must/must.k9.ncl
   Validating: ./.machine_readable/contractiles/trust/trust.k9.ncl
   Validating: ./.machine_readable/self-validating/examples/ci-config.k9.ncl
   Validating: ./.machine_readable/self-validating/examples/project-metadata.k9.ncl
   Validating: ./.machine_readable/self-validating/examples/setup-repo.k9.ncl
   Validating: ./.machine_readable/self-validating/methodology-guard.k9.ncl
   Validating: ./.machine_readable/self-validating/template-hunt.k9.ncl
   Validating: ./.machine_readable/self-validating/template-kennel.k9.ncl
   Validating: ./.machine_readable/self-validating/template-yard.k9.ncl
   Validating: ./container/stapeln/deploy.k9.ncl
   Validating: ./coordination.k9
 ##[warning]Missing SPDX-License-Identifier in first 10 lines
 ##[error]Missing pedigree block. K9 files must contain a 'pedigree = { ... }' section

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

Conclusion: failure

View job details

##[group]K9 Configuration Validation
 Scanning . for K9 files (.k9, .k9.ncl)...
 Found 18 K9 file(s)
   Validating: ./.machine_readable/arrival-pack/claude-md.k9.ncl
   Validating: ./.machine_readable/coaptation/coapt.k9.ncl
   Validating: ./.machine_readable/contractiles/adjust/adjust.k9.ncl
   Validating: ./.machine_readable/contractiles/bust/bust.k9.ncl
   Validating: ./.machine_readable/contractiles/dust/dust.k9.ncl
   Validating: ./.machine_readable/contractiles/intend/intend.k9.ncl
   Validating: ./.machine_readable/contractiles/must/must.k9.ncl
   Validating: ./.machine_readable/contractiles/trust/trust.k9.ncl
   Validating: ./.machine_readable/self-validating/examples/ci-config.k9.ncl
   Validating: ./.machine_readable/self-validating/examples/project-metadata.k9.ncl
   Validating: ./.machine_readable/self-validating/examples/setup-repo.k9.ncl
   Validating: ./.machine_readable/self-validating/methodology-guard.k9.ncl
   Validating: ./.machine_readable/self-validating/template-hunt.k9.ncl
   Validating: ./.machine_readable/self-validating/template-kennel.k9.ncl
   Validating: ./.machine_readable/self-validating/template-yard.k9.ncl
   Validating: ./container/stapeln/deploy.k9.ncl
   Validating: ./coordination.k9
 ##[warning]Missing SPDX-License-Identifier in first 10 lines
 ##[error]Missing pedigree block. K9 files must contain a 'pedigree = { ... }' section

GitHub Actions: Dogfood Gate / 5_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: 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: Governance / 3_governance _ Actions lockfile verify.txt: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run set -uo pipefail
 �[36;1mset -uo pipefail�[0m
 �[36;1mif [ "$GITHUB_REPOSITORY" = hyperpolymath/standards ]; then�[0m
 �[36;1m  SRC=scripts�[0m
 �[36;1m  echo "Using this repository's own gate + verifier (standards self-lint)."�[0m
 �[36;1melse�[0m
 �[36;1m  SRC=.standards-lock/scripts�[0m
 �[36;1mfi�[0m
 �[36;1mfor f in check-actions-lock-gate.sh update-actions-lock.sh; do�[0m
 �[36;1m  if [ ! -f "$SRC/$f" ]; then�[0m
 �[36;1m    echo "::error::actions-lock gate: $f not found in $SRC (standards checkout at job.workflow_sha failed?)"�[0m

GitHub Actions: Governance / governance _ Actions lockfile verify: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run set -uo pipefail
 �[36;1mset -uo pipefail�[0m
 �[36;1mif [ "$GITHUB_REPOSITORY" = hyperpolymath/standards ]; then�[0m
 �[36;1m  SRC=scripts�[0m
 �[36;1m  echo "Using this repository's own gate + verifier (standards self-lint)."�[0m
 �[36;1melse�[0m
 �[36;1m  SRC=.standards-lock/scripts�[0m
 �[36;1mfi�[0m
 �[36;1mfor f in check-actions-lock-gate.sh update-actions-lock.sh; do�[0m
 �[36;1m  if [ ! -f "$SRC/$f" ]; then�[0m
 �[36;1m    echo "::error::actions-lock gate: $f not found in $SRC (standards checkout at job.workflow_sha failed?)"�[0m

GitHub Actions: Governance / 5_governance _ Workflow security linter.txt: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run if [ "$GITHUB_REPOSITORY" = hyperpolymath/standards ]; then
 �[36;1mif [ "$GITHUB_REPOSITORY" = hyperpolymath/standards ]; then�[0m
 �[36;1m  SCRIPT="tools/policy/check-workflows-parse.sh"�[0m
 �[36;1m  echo "Using this repository's own copy (standards self-lint)."�[0m
 �[36;1melse�[0m
 �[36;1m  SCRIPT=".standards-dupkey/tools/policy/check-workflows-parse.sh"�[0m
 �[36;1mfi�[0m
 �[36;1mif [ ! -f "$SCRIPT" ]; then�[0m
 �[36;1m  echo "::error::workflow parser gate not found in the pinned Standards revision or locally"�[0m

GitHub Actions: Governance / governance _ Workflow security linter: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run if [ "$GITHUB_REPOSITORY" = hyperpolymath/standards ]; then
 �[36;1mif [ "$GITHUB_REPOSITORY" = hyperpolymath/standards ]; then�[0m
 �[36;1m  SCRIPT="tools/policy/check-workflows-parse.sh"�[0m
 �[36;1m  echo "Using this repository's own copy (standards self-lint)."�[0m
 �[36;1melse�[0m
 �[36;1m  SCRIPT=".standards-dupkey/tools/policy/check-workflows-parse.sh"�[0m
 �[36;1mfi�[0m
 �[36;1mif [ ! -f "$SCRIPT" ]; then�[0m
 �[36;1m  echo "::error::workflow parser gate not found in the pinned Standards revision or locally"�[0m

GitHub Actions: Governance / governance _ Workflow security linter: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run # GitHub Actions REJECTS a workflow with duplicate keys: the run is
 �[36;1m# GitHub Actions REJECTS a workflow with duplicate keys: the run is�[0m
 �[36;1m# `failure` with no jobs, no log and no check run. Nothing else here�[0m
 �[36;1m# can see it, because yaml.safe_load silently keeps the LAST�[0m
 �[36;1m# duplicate and reports success — so the file "parses" and every�[0m
 �[36;1m# other lint passes. Measured 2026-08-05: nine workflows in hypatia�[0m
 �[36;1m# were dead this way, including a CodeQL workflow with zero�[0m
 �[36;1m# successful runs in its entire lifetime.�[0m
 �[36;1mset -euo pipefail�[0m
 �[36;1m# Standards exercises its pull-request scripts; every consumer uses�[0m
 �[36;1m# the canonical scripts fetched from this workflow's immutable�[0m
 �[36;1m# Standards revision.�[0m
 �[36;1mif [ "$GITHUB_REPOSITORY" = hyperpolymath/standards ]; then�[0m
 �[36;1m  SCRIPT="scripts/check-workflow-duplicate-keys.sh"�[0m
 �[36;1m  echo "Using this repository's own copy (standards self-lint)."�[0m
 �[36;1melse�[0m
 �[36;1m  SCRIPT=".standards-dupkey/scripts/check-workflow-duplicate-keys.sh"�[0m
 �[36;1mfi�[0m
 �[36;1mif [ ! -f "$SCRIPT" ]; then�[0m
 �[36;1m  echo "::error::duplicate-key checker not found — neither fetched from" \�[0m

GitHub Actions: Governance / governance _ Workflow security linter: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run # Copy out and delete the checkout before scanning, so the standards
 �[36;1m# Copy out and delete the checkout before scanning, so the standards�[0m
 �[36;1m# tree is never part of the caller's workspace (same idiom as the�[0m
 �[36;1m# allowlist preflight above).�[0m
 �[36;1mcp .standards-checkout/scripts/check-action-pins-resolve.sh "$RUNNER_TEMP/"�[0m
 �[36;1mrm -rf .standards-checkout�[0m
 �[36;1mbash "$RUNNER_TEMP/check-action-pins-resolve.sh" .�[0m
 shell: /usr/bin/bash -e {0}
 env:
   GH_***REDACTED_SECRET_ASSIGNMENT***
 ##[endgroup]
 Checking 23 unique action pin(s) resolve upstream…
 ##[error]1 of 23 action pin(s) DO NOT EXIST upstream.

GitHub Actions: Governance / 8_governance _ Security policy checks.txt: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run FAILED=false
 �[36;1mFAILED=false�[0m
 �[36;1mWEAK_CRYPTO=$(grep -rE 'md5\(|sha1\(' --include="*.py" --include="*.rb" --include="*.js" --include="*.ts" --include="*.go" --include="*.rs" . 2>/dev/null | grep -v 'checksum\|cache\|test\|spec' | head -5 || true)�[0m
 �[36;1mif [ -n "$WEAK_CRYPTO" ]; then�[0m
 �[36;1m  echo "::warning::Weak crypto (MD5/SHA1) detected — ADVISORY, does not fail this job. Use SHA256+:"�[0m
 �[36;1m  echo "$WEAK_CRYPTO"�[0m
 �[36;1mfi�[0m
 �[36;1mHTTP_URLS=$(grep -rE 'http://[^l][^o][^c]' --include="*.py" --include="*.js" --include="*.ts" --include="*.go" --include="*.rs" --include="*.yaml" --include="*.yml" . 2>/dev/null | grep -v 'localhost\|127.0.0.1\|example\|test\|spec' | head -5 || true)�[0m
 �[36;1mif [ -n "$HTTP_URLS" ]; then�[0m
 �[36;1m  echo "::warning::HTTP URLs found — ADVISORY, does not fail this job. Use HTTPS:"�[0m
 �[36;1m  echo "$HTTP_URLS"�[0m
 �[36;1mfi�[0m
 �[36;1mSECRETS=$(grep -rEi '(api_key|apikey|secret_key|password)\s*[=:]\s*["\x27][A-Za-z0-9+/=]{20,}' --include="*.py" --include="*.js" --include="*.ts" --include="*.go" --include="*.rs" --include="*.env" . 2>/dev/null | grep -v 'example\|sample\|test\|mock\|placeholder' | head -3 || true)�[0m
 �[36;1mif [ -n "$SECRETS" ]; then�[0m
 �[36;1m  echo "::error::Potential hardcoded secrets detected — this FAILS the job:"�[0m

GitHub Actions: Governance / governance _ Security policy checks: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run FAILED=false
 �[36;1mFAILED=false�[0m
 �[36;1mWEAK_CRYPTO=$(grep -rE 'md5\(|sha1\(' --include="*.py" --include="*.rb" --include="*.js" --include="*.ts" --include="*.go" --include="*.rs" . 2>/dev/null | grep -v 'checksum\|cache\|test\|spec' | head -5 || true)�[0m
 �[36;1mif [ -n "$WEAK_CRYPTO" ]; then�[0m
 �[36;1m  echo "::warning::Weak crypto (MD5/SHA1) detected — ADVISORY, does not fail this job. Use SHA256+:"�[0m
 �[36;1m  echo "$WEAK_CRYPTO"�[0m
 �[36;1mfi�[0m
 �[36;1mHTTP_URLS=$(grep -rE 'http://[^l][^o][^c]' --include="*.py" --include="*.js" --include="*.ts" --include="*.go" --include="*.rs" --include="*.yaml" --include="*.yml" . 2>/dev/null | grep -v 'localhost\|127.0.0.1\|example\|test\|spec' | head -5 || true)�[0m
 �[36;1mif [ -n "$HTTP_URLS" ]; then�[0m
 �[36;1m  echo "::warning::HTTP URLs found — ADVISORY, does not fail this job. Use HTTPS:"�[0m
 �[36;1m  echo "$HTTP_URLS"�[0m
 �[36;1mfi�[0m
 �[36;1mSECRETS=$(grep -rEi '(api_key|apikey|secret_key|password)\s*[=:]\s*["\x27][A-Za-z0-9+/=]{20,}' --include="*.py" --include="*.js" --include="*.ts" --include="*.go" --include="*.rs" --include="*.env" . 2>/dev/null | grep -v 'example\|sample\|test\|mock\|placeholder' | head -3 || true)�[0m
 �[36;1mif [ -n "$SECRETS" ]; then�[0m
 �[36;1m  echo "::error::Potential hardcoded secrets detected — this FAILS the job:"�[0m

GitHub Actions: Governance / governance _ Security policy checks: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run set -uo pipefail
 �[36;1mset -uo pipefail�[0m
 �[36;1mDIR=.github/canonical-references�[0m
 �[36;1mif [ ! -d "$DIR" ]; then�[0m
 �[36;1m  echo "ℹ️  [R5] no $DIR/ — skipped (repo has not opted in)"�[0m
 �[36;1m  exit 0�[0m
 �[36;1mfi�[0m
 �[36;1mif ! command -v python3 >/dev/null 2>&1; then�[0m
 �[36;1m  echo "❌ [R5] python3 missing on runner — required for YAML rule parsing"�[0m
 �[36;1m  exit 2�[0m
 �[36;1mfi�[0m
 �[36;1mpython3 - <<'PY'�[0m
 �[36;1mimport os, sys, glob, subprocess�[0m
 �[36;1mtry:�[0m
 �[36;1m    import yaml�[0m
 �[36;1mexcept ImportError:�[0m
 �[36;1m    sys.exit("❌ [R5] PyYAML not installed on runner; install python3-yaml")�[0m
 �[36;1m�[0m
 �[36;1mdir_ = ".github/canonical-references"�[0m
 �[36;1mfiles = sorted(glob.glob(f"{dir_}/*.yml") + glob.glob(f"{dir_}/*.yaml"))�[0m
 �[36;1mif not files:�[0m
 �[36;1m    print(f"ℹ️  [R5] {dir_}/ has no .yml/.yaml rules — skipped")�[0m
 �[36;1m    sys.exit(0)�[0m
 �[36;1m�[0m
 �[36;1mtotal = 0�[0m
 �[36;1mfor rf in files:�[0m
 �[36;1m    with open(rf, encoding="utf-8") as fh:�[0m
 �[36;1m        cfg = yaml.safe_load(fh)�[0m
 �[36;1m    if not isinstance(cfg, dict):�[0m
 �[36;1m        print(f"❌ [R5] {rf}: top-level must be a mapping"); total += 1; continue�[0m
 �[36;1m    rid  = cfg.get("id", os.path.basename(rf))�[0m
 �[36;1m    desc = cfg.get("description", "")�[0m
 �[36;1m    pats = cfg.get("patterns") or []�[0m
 �[36;1m    canon = cfg.get("canonical_pointer", "")�[0m
 �[36;1m    scope = (cfg.get("scope") or {})�[0m
 �[36;1m    includes = scope.get("include") or []�[0m
 �[36;1m    if not pats or not includes:�[0m
 �[36;1m        print(f"❌ [R5:{rid}] missing patterns or scope.include in {rf}")�[0m
 �[36;1m        total += 1; continue�[0m
 �[36;1m    # exclude self-references�[0m
 �[36;1m    skip = set(["CHANGELOG.md", "CHANGELOG.adoc", rf])�[0m
 �[36;1m    if canon: skip.add(canon)�[0m
 �[36;1m    rule_hits = 0�[0m
 �[36;1m    for f_ in includes:�[0m
 �[36;1m        if f_ in skip or not os...

GitHub Actions: Governance / 9_governance _ Well-Known (RFC 9116 + RSR).txt: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run SECTXT=""
 �[36;1mSECTXT=""�[0m
 �[36;1m[ -f ".well-known/security.txt" ] && SECTXT=".well-known/security.txt"�[0m
 �[36;1m[ -f "security.txt" ] && SECTXT="security.txt"�[0m
 �[36;1mif [ -z "$SECTXT" ]; then�[0m
 �[36;1m  echo "::warning::No security.txt found."�[0m
 �[36;1m  exit 0�[0m
 �[36;1mfi�[0m
 �[36;1mgrep -q "^Contact:" "$SECTXT" || { echo "::error::Missing Contact field"; exit 1; }�[0m

GitHub Actions: Governance / governance _ Well-Known (RFC 9116 + RSR): fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run SECTXT=""
 �[36;1mSECTXT=""�[0m
 �[36;1m[ -f ".well-known/security.txt" ] && SECTXT=".well-known/security.txt"�[0m
 �[36;1m[ -f "security.txt" ] && SECTXT="security.txt"�[0m
 �[36;1mif [ -z "$SECTXT" ]; then�[0m
 �[36;1m  echo "::warning::No security.txt found."�[0m
 �[36;1m  exit 0�[0m
 �[36;1mfi�[0m
 �[36;1mgrep -q "^Contact:" "$SECTXT" || { echo "::error::Missing Contact field"; exit 1; }�[0m

GitHub Actions: Governance / governance _ Well-Known (RFC 9116 + RSR): fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run MIXED=$(grep -rE 'src="http://|href="http://' --include="*.html" --include="*.htm" . 2>/dev/null | grep -vE 'localhost|127\.0\.0\.1|example\.com|lol/|node_modules/|third-party/|vendor/' | head -5 || true)
 �[36;1mMIXED=$(grep -rE 'src="http://|href="http://' --include="*.html" --include="*.htm" . 2>/dev/null | grep -vE 'localhost|127\.0\.0\.1|example\.com|lol/|node_modules/|third-party/|vendor/' | head -5 || true)�[0m
 �[36;1mif [ -n "$MIXED" ]; then�[0m
 �[36;1m  echo "::error::Mixed content (HTTP in HTML)"�[0m

GitHub Actions: Governance / 12_governance _ Code quality + docs.txt: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run editorconfig-checker/action-editorconfig-checker@840e866d93b8e032123c23bac69dece044d4d84c
 with:
   github-***REDACTED_SECRET_ASSIGNMENT***
   version: latest
 ##[endgroup]
 Find 'latest' release
 ##[error]Error: The binary 'ec-linux-amd64*' not found

GitHub Actions: Governance / governance _ Code quality + docs: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run editorconfig-checker/action-editorconfig-checker@840e866d93b8e032123c23bac69dece044d4d84c
 with:
   github-***REDACTED_SECRET_ASSIGNMENT***
   version: latest
 ##[endgroup]
 Find 'latest' release
 ##[error]Error: The binary 'ec-linux-amd64*' not found

GitHub Actions: Governance / 13_governance _ Language _ package anti-pattern policy.txt: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run SCRIPT=".standards-checkout/scripts/check-ts-allowlist.sh"
 �[36;1mSCRIPT=".standards-checkout/scripts/check-ts-allowlist.sh"�[0m
 �[36;1mif [ ! -f "$SCRIPT" ] && [ "$GITHUB_REPOSITORY" = "hyperpolymath/standards" ] \�[0m
 �[36;1m   && [ -f scripts/check-ts-allowlist.sh ]; then�[0m
 �[36;1m  SCRIPT="scripts/check-ts-allowlist.sh"�[0m
 �[36;1m  echo "Using this repository's own copy (standards self-check)."�[0m
 �[36;1mfi�[0m
 �[36;1mif [ ! -f "$SCRIPT" ]; then�[0m
 �[36;1m  echo "::error::check-ts-allowlist gate not found in standards@main or locally"�[0m

GitHub Actions: Governance / governance _ Language _ package anti-pattern policy: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run SCRIPT=".standards-checkout/scripts/check-ts-allowlist.sh"
 �[36;1mSCRIPT=".standards-checkout/scripts/check-ts-allowlist.sh"�[0m
 �[36;1mif [ ! -f "$SCRIPT" ] && [ "$GITHUB_REPOSITORY" = "hyperpolymath/standards" ] \�[0m
 �[36;1m   && [ -f scripts/check-ts-allowlist.sh ]; then�[0m
 �[36;1m  SCRIPT="scripts/check-ts-allowlist.sh"�[0m
 �[36;1m  echo "Using this repository's own copy (standards self-check)."�[0m
 �[36;1mfi�[0m
 �[36;1mif [ ! -f "$SCRIPT" ]; then�[0m
 �[36;1m  echo "::error::check-ts-allowlist gate not found in standards@main or locally"�[0m

GitHub Actions: Governance / governance _ Language _ package anti-pattern policy: fix(ci): restore reachable standards workflow pins

Conclusion: failure

View job details

##[group]Run SCRIPT=".standards-checkout/tools/policy/check-language-policy.sh"
 �[36;1mSCRIPT=".standards-checkout/tools/policy/check-language-policy.sh"�[0m
 �[36;1mif [ ! -f "$SCRIPT" ] && [ -f tools/policy/check-language-policy.sh ]; then�[0m
 �[36;1m  SCRIPT="tools/policy/check-language-policy.sh"�[0m
 �[36;1m  echo "Using this repository's own copy (standards self-check)."�[0m
 �[36;1mfi�[0m
 �[36;1mif [ ! -f "$SCRIPT" ]; then�[0m
 �[36;1m  echo "::error::language-policy gate not found in standards@main or locally"�[0m
🔇 Additional comments (4)
.github/workflows/governance.yml (1)

20-20: LGTM!

.github/workflows/hypatia-scan.yml (1)

29-29: LGTM!

.github/workflows/scorecard.yml (1)

18-18: LGTM!

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

24-24: LGTM!


📝 Summary

Summary by CodeRabbit

  • Chores
    • Updated automated governance checks to use the latest approved workflow version.
    • Updated security scanning and secret detection checks.
    • Updated scorecard checks to align with the latest reusable workflow version.
    • These changes keep repository compliance, security, and quality checks current.

Walkthrough

Four GitHub Actions workflows now reference reusable workflows at commit 092dedada188f56c5915f74a5fd40aac093742c3 instead of the previous pinned commit.

Changes

Reusable workflow pin updates

Layer / File(s) Summary
Update reusable workflow references
.github/workflows/governance.yml, .github/workflows/hypatia-scan.yml, .github/workflows/scorecard.yml, .github/workflows/secret-scanner.yml
The governance, Hypatia scan, scorecard, and secret scanner jobs now use the newer pinned reusable workflow commit.

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

Merge Risk: ⚪ Minimal · up to 15ea5

This updates four reusable workflow pins to a consistent reachable commit, restoring the expected workflow execution without identified merge-readiness risk.

Poem

A rabbit checks the workflow gate
Four pins hop to a newer state
Scans and scores now follow through
Governance joins the update too
Secret checks march on, neat and true

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description explains the purpose, affected workflows, issue references, and validation. However, it does not use the repository template sections and omits the RSR Quality Checklist, Testing secti… Rewrite the description using the repository template. Add Summary, Changes, RSR Quality Checklist, Testing, and Screenshots sections. Mark each applicable checklist item and state when a section is not applicable.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main change: restoring reachable pins for the standards workflows.
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.
Full details: Description check

Explanation

The description explains the purpose, affected workflows, issue references, and validation. However, it does not use the repository template sections and omits the RSR Quality Checklist, Testing section, and explicit Changes section.

🔄 Running autofix...

✨ Finishing Touches
🛠️ 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

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

@coderabbitai

coderabbitai Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

The agent ran but didn't make any changes. The issues may already be fixed or require manual intervention.

@coderabbitai

coderabbitai Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

The agent ran but didn't make any changes. The issues may already be fixed or require manual intervention.

@coderabbitai

coderabbitai Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

CI fix PR created: #67

Follow #67 for fix progress and CI status. If CI still fails, re-run the fix-ci command to try again.

Note: Fixing CI failures is a beta feature and may encounter errors. Expect some limitations and changes as we gather feedback and continue to improve it.

ℹ️ Local verification skipped — no lint, format, or test checks were found in this PR's CI config.

Note: If your CI is configured to only run on PRs targeting specific branches (e.g., main), it may not trigger on the fix PR. You can merge the fix into your branch and CI will validate on the original PR.

8 PR-caused check(s)
  • GitHub Actions: Dogfood Gate / 2_Validate eclexiaiser manifest.txt
  • GitHub Actions: Dogfood Gate / 5_Groove manifest check.txt
  • GitHub Actions: Governance / 3_governance _ Actions lockfile verify.txt
  • GitHub Actions: Governance / 5_governance _ Workflow security linter.txt
  • GitHub Actions: Governance / 8_governance _ Security policy checks.txt
  • GitHub Actions: Governance / 9_governance _ Well-Known (RFC 9116 + RSR).txt
  • GitHub Actions: Governance / 12_governance _ Code quality + docs.txt
  • GitHub Actions: Governance / 13_governance _ Language _ package anti-pattern policy.txt
⏭️ 2 check(s) skipped — already failing on `main` (not caused by this PR)
  • GitHub Actions: SonarQube / 0_SonarQube.txt
  • GitHub Actions: Dogfood Gate / 3_Validate K9 contracts.txt
2 file(s) modified
  • coordination.k9
  • session/custom-checks.k9
View agent analysis
Confirmed: an unrelated, unintended deletion of the required `pedigree` block, outside the stated PR scope (which was only about workflow SHA pins). This breaks `.githooks/validate-k9.sh`, which requires every `.k9` file to declare a `pedigree` block (error-level check). Let me check the second file too and the validator logic before fixing.

Both files lost their `pedigree` block identically. I'll restore them exactly as they were on `main` (17a6a83), since this deletion is unrelated to the PR's stated intent (workflow SHA re-pinning) and breaks the K9 contract validator's error-level pedigree check.

Now let me verify the restored files match `main` exactly and re-check the diff.

That compares committed HEAD, not my working tree edits. Let me check the actual working tree diff against origin/main.

The working tree now matches `main` exactly for both K9 files (no diff), confirming the pedigree blocks are fully restored.

Good — only the two K9 files are modified, and the workflow SHA re-pins from the PR remain untouched.

## Summary

**Root cause identified:** The PR commit `15ea5c0` ("fix(ci): restore reachable standards workflow pins") bundled in an unrelated, accidental deletion of the `pedigree = { ... }` self-description block from two K9 contract files:
- `coordination.k9`
- `session/custom-checks.k9`

This deletion is **not mentioned anywhere in the PR's stated intent** (which is solely about re-pinning four reusable-workflow SHAs from `7fdc270...` to `092dedad...`). It's a stray regression, not a deliberate change.

`.githooks/validate-k9.sh` (invoked by the `k9-validate` job in `.github/workflows/dogfood-gate.yml`, part of the "Dogfood Gate" check group) treats a missing `pedigree` block as an **error**, not a warning:
```
report_issue "error" "$file" 1 "Missing pedigree block. K9 files must contain a 'pedigree = { ... }' section"
```
With two files failing this, the validator exits non-zero (`::error::K9 validation failed with 2 error(s)`), which explains the Dogfood Gate failures.

**Fix applied:** Restored the exact `pedigree` blocks (schema_version, security.leash, metadata) to both files, matching what's on `main`. The working tree for these two files now diffs identically to `main` — confirmed via `git diff origin/main -- coordination.k9 session/custom-checks.k9` (no output).

**Left untouched (out of scope / not source-fixable):**
- The four workflow SHA re-pins (`governance.yml`, `hypatia-scan.yml`, `scorecard.yml`, `secret-scanner.yml`) — these are the PR's deliberate, intended change; not reverted.
- Governance checks 1–6 and the `editorconfig-checker` binary-fetch failure — based on inspecting all referenced local files (`.well-known/security.txt`, secret-pattern grep, banned-language files, workflow YAML syntax), none of the local, non-workflow content triggers a failing (`exit 1`) branch in the visible script logic. Their gate scripts live in the external `hyperpolymath/standards` repo (not checked out here) or depend on third-party action binaries, so any remaining failure there is CI/workflow infrastructure, which I was instructed not to modify.

@hyperpolymath
hyperpolymath merged commit 8fdae71 into main Sep 6, 2026
36 of 39 checks passed
@hyperpolymath
hyperpolymath deleted the fix/restore-hypatia-reusable-pin branch September 6, 2026 19:59
@sonarqubecloud

sonarqubecloud Bot commented Sep 6, 2026

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