security: re-pin secret scanner onto the real gitleaks gate - #56
Merged
Conversation
The caller pinned standards' secret-scanner-reusable at @d135b05 (2026-06-24), which is 64 commits behind standards#500. At that pin the gitleaks step carries `continue-on-error: true` — the scan runs, reports success, and cannot fail. This repo's Secret Scanner has therefore been green while being incapable of failing. Re-pinned to @c65436ee, which contains #500: gitleaks now runs as a pinned, checksum-verified binary with `--exit-code 1` and gates for real. Also narrowed the caller's grant to `contents: read`. The new reusable invokes a binary rather than gitleaks-action, so it no longer requests `pull-requests: write` / `actions: read`. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…le run
Bisected on http-capability-gateway 2026-07-21 with two isolation branches:
exp/scan-only (reusable only) -> 3 jobs created, run executes
exp/trufflehog-only (trufflehog only) -> 0 jobs created, startup_failure
startup_failure means no job is ever created, so the Secret Scanner has been
reporting nothing at all — not a red, an absence. This repo has had no secret
scanning since the pin landed. A required check that never reports is
indistinguishable from one still running, which is why this went unnoticed.
The action is allowlisted (`trufflesecurity/trufflehog@*` is in
patterns_allowed, github_owned_allowed=true), so this is not an Actions-policy
rejection; the reference itself fails to resolve at run creation.
Removing it loses no coverage: standards' secret-scanner-reusable dropped
trufflehog deliberately ("Trufflehog removed: gitleaks provides sufficient
coverage at lower cost"), and the reusable's gitleaks + rust-secrets +
shell-secrets jobs now run for real on this repo.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This repo's Secret Scanner has produced no runs, no checks and no logs. Not a
red: an absence. GitHub rejected the workflow file outright, and a rejected
workflow is registered under its FILE PATH instead of its `name:` — which is
how this was finally identified (the Actions API reports
name == '.github/workflows/secret-scanner.yml').
Two invalid constructs, both from copying job-level syntax onto a job that
calls a reusable workflow:
* `timeout-minutes:` is not permitted on a `uses:` job. The timeout
belongs to the callee, which already sets its own per-job values.
* a duplicated `secrets: inherit` key. Python's yaml.safe_load accepts
duplicate keys (last wins), so local linting passed; the GitHub Actions
parser rejects them.
A reusable-workflow call accepts only: uses, with, secrets, needs, if,
strategy, concurrency, permissions.
Also completes the re-pin this branch was opened for: the pin moves to
@c65436ee (the real `--exit-code 1` gitleaks gate) and the caller's grant is
narrowed to `contents: read`.
Verified before push: the file passes a strict YAML load that rejects
duplicate keys, and contains no `timeout-minutes` on the `uses:` job.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Conflict is main's two invalid constructs, both kept removed on this branch:
* a duplicated `secrets: inherit` key. GitHub Actions rejects duplicate
keys outright; Python's yaml.safe_load accepts them (last wins), so local
linting never caught it.
* the inline trufflehog job, which creates ZERO jobs and startup_failures
the whole run (bisected on http-capability-gateway).
Either alone is enough to stop this workflow existing as far as Actions is
concerned — the tell was the Actions API reporting
name == '.github/workflows/secret-scanner.yml' instead of 'Secret Scanner',
which is how GitHub registers a file it cannot parse.
Verified: passes a strict YAML load that rejects duplicate keys AND rejects an
empty/jobless file (a vacuous pass is not a pass).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This repo's
Secret Scannerhas been reporting success while being incapable of failing.The caller pinned
secret-scanner-reusableat@d135b05(2026-06-24) — 64 commits behind standards#500. At that pin the step is literally:Re-pinned to
@c65436ee(contains #500 —comparereports ahead 5 / behind 0):Also narrowed the caller's grant to
contents: read— the new reusable invokes a binary rather thangitleaks-action, so it no longer requestspull-requests: write/actions: read. (That mismatch is whatstartup_failured standards' own scanner; see standards#511.)Verified before opening:
gitleaks detect --exit-code 1passes on this tree.Part of the estate-wide sweep of ~200 repos still on the pre-#500 pin.
🤖 Generated with Claude Code