Skip to content

Ci/caller hygiene secret scanner pages - #542

Merged
hyperpolymath merged 3 commits into
mainfrom
ci/caller-hygiene-secret-scanner-pages
Jul 28, 2026
Merged

Ci/caller hygiene secret scanner pages#542
hyperpolymath merged 3 commits into
mainfrom
ci/caller-hygiene-secret-scanner-pages

Conversation

@hyperpolymath

@hyperpolymath hyperpolymath commented Jul 28, 2026

Copy link
Copy Markdown
Owner

Summary

Closes #

Type of change

  • 🐛 Bug fix (non-breaking change that fixes an issue)
  • ✨ New feature (non-breaking change that adds functionality)
  • 💥 Breaking change (would change existing behaviour)
  • 🕳️ Soundness fix (fixes a checker/proof false-negative)
  • 📖 Documentation
  • 🧹 Refactor / tech debt (behaviour-preserving)
  • ⚡ Performance
  • 🔧 Build / CI / tooling

How has this been verified?

Checklist

  • My commits are signed (git commit -S).
  • I ran the project's own checks/tests locally and they pass.
  • New files carry the correct SPDX-License-Identifier (code/config MPL-2.0,
    prose CC-BY-SA-4.0); I did not relicense existing files.
  • Docs are updated, and no public claim now overstates what the code does.
  • I have not introduced a soundness hole (or I have flagged where I might have).

Notes for reviewers


Summary by Gitar

  • Security & CI/CD:
    • Added .gitleaks.toml configuration to allowlist estate false positives and unblock the secret scanner
    • Switched secret-scanner.yml to use a local relative path workflow to fix startup failures
    • Pinned actions to SHA hashes in pages.yml and updated spark-theatre-gate.yml checkout action version

This will update automatically on new commits.

hyperpolymath and others added 3 commits July 21, 2026 04:59
secret-scanner.yml was pinned to the reusable at @891b1ed6 (2026-07-06),
which is 21 commits behind #500 (08e2d24). At that pin the reusable's
gitleaks job still requests `pull-requests: write` + `actions: read`, but
this caller grants only `contents: read`. A called workflow cannot exceed
its caller's grant, so every run terminated at startup_failure — the last
six runs, including every push to main, all startup_failure. Standards'
own secret scanning has therefore not executed at all since that pin
landed, which is worse than a fake-green gate.

Switch to the local relative path `./.github/workflows/secret-scanner-reusable.yml`,
mirroring governance.yml. This repo owns the reusable, so it should always
scan itself with the current version; a local path also cannot re-stale,
so this class of breakage cannot recur here. The current reusable needs
only `contents: read`, so the existing grant is already correct.

pages.yml (added in #503) had no SPDX header — tripping the governance
"missing SPDX header" gate — and four unpinned tag refs, which the estate
Actions policy rejects at run creation. Add `MPL-2.0` (this repo's licence,
not AGPL) and pin all four to release SHAs, keeping the current majors:
checkout v7.0.0, upload-pages-artifact v5.0.0, deploy-pages v5.0.0.

spark-theatre-gate.yml: correct a mislabelled pin comment — SHA
9c091bb2 is v7.0.0, not v4. Cosmetic; no behavioural change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
With the caller unbroken (previous commit), gitleaks actually executes here
for the first time since 2026-07-06 — and reports 15 findings. All 15 are
false positives, verified individually:

  * deno.lock x8      — SHA-256 integrity hashes of public registry modules
  * Project.toml      — a Julia General-registry package UUID
  * otpiser audit     — a 40-hex OpenPGP fingerprint (published by design)
  * haskell design md — the type name in `data Ed25519KeyPair = Ed25519KeyPair`
  * example.zig       — `abc123def456...`, commented "// Would be real token"
  * NEXT-STEPS.md x2  — `1234567890_abc123...` in a fenced terminal mockup
  * examples.ndjson   — `0a1b2c3d4e5f...`, an ascending-nibble filler walk

This is almost certainly the trap the original `continue-on-error: true` was
papering over: switch the gate on with no allowlist, get a wall of red that
is entirely noise, someone reverts, and the estate is back to a scanner that
cannot fail. So this allowlist is the *unblocker* for re-pinning callers onto
the real gate estate-wide, not merely local cleanup.

Design rule, documented in the file: allowlist by pattern class, anchored to
the whole value; never allowlist a path because "that file is fine" and never
disable a rule. `paths` is confined to formats that cannot hold a live
credential (lockfile integrity hashes, dependency UUIDs).

Every regex is anchored ^...$ deliberately. An earlier draft used unanchored
`(?i)test|example`, and canary-testing caught that it silently allowlisted the
real AWS key wJalrXUtnFEMI/K7MDENG/bPxRfiCY... purely because "EXAMPLE"
appears inside it. Anchoring fixed it. Verified after the rewrite:

  standards scan            -> no leaks found (exit 0)
  planted realistic secrets -> still detected: github-pat, gitlab-pat,
                               slack-bot-token, stripe-access-token,
                               generic-api-key (AWS)

Also confirmed to clear all 8 of boj-server-cartridges' equivalent fixture
findings with no repo-specific additions, so it stands up as the estate
baseline template rather than a standards-only patch.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com>
@hyperpolymath
hyperpolymath merged commit 9b009eb into main Jul 28, 2026
21 of 22 checks passed
@hyperpolymath
hyperpolymath deleted the ci/caller-hygiene-secret-scanner-pages branch July 28, 2026 07:02
@gitar-bot

gitar-bot Bot commented Jul 28, 2026

Copy link
Copy Markdown
Code Review ✅ Approved

Adds a Gitleaks allowlist and fixes local relative path workflows to unblock CI secret scanning, along with SHA-pinning GitHub Actions across workflow files. No issues found.

Auto-approved and auto-merge armed: No blocking issues found.
Please see Auto-approve Docs for details on setting custom approval criteria. — merges when pipeline and required approvals pass.

Options

Auto-apply is off → Gitar will not commit updates to this branch.
Display: compact → Showing less information.

Comment with these commands to change the behavior for this request:

Auto-apply Compact
gitar auto-apply:on         
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Gitar

@sonarqubecloud

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