Repository navigation
fix(ci): stop gitleaks flagging the estate baseline the scanner stages itself - #155
Conversation
…s itself The standards secret-scanner reusable copies the estate baseline to .gitleaks-estate.toml in the workspace root unconditionally (metadatastician/standards#888). The baseline documents credential shapes, so generic-api-key fires three times on it and the required `scan / gitleaks` context is red on main and on every PR (e.g. #154). Add a root-anchored self-exclusion (^\.gitleaks-estate\.toml$), the same cure as catachresis-colloquium/IDApTIK#127. Root-only on purpose: a planted PAT at src/.gitleaks-estate.toml is still detected (github-pat). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WPSJ7fBhVAMcpSffCBWUDo Signed-off-by: Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com>
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 27 minutes. View limit detailsLimit details: You’ve used the included review currently available. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Advanced Run ID: 📒 Files selected for processing (2)
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Advanced Run ID: 📒 Files selected for processing (1)
Included review availability: This review used your included allowance. 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. (20)
|
| Layer / File(s) | Summary |
|---|---|
Add root-level path exception .gitleaks.toml |
The path allowlist adds an anchored exception for the root-level .gitleaks-estate.toml. Files with the same basename in subdirectories do not match this pattern. Comments describe the staged file and the exception’s scope. |
Priority: ➖ Normal
Estimated code review effort: 1 (Trivial) | ~3 minutes
Change: Bug fix
Merge Risk: ⚪ Minimal · up to ccc7c
The change adds a root-only Gitleaks exception, but the identified scanner workflow cannot resolve its configured revision. No regression from this diff is established.
Architecture Summary
Architecture risk: 🔵 Low · up to ccc7c
The changed surface does not map to a changed system, dependency edge, entrypoint, or external dependency.
Changed systems: None identified.
Architecture concerns
No architecture-level concerns identified.
Review details
Before / after behavior
- observed — Modified behavior in .gitleaks.toml: Adds an anchored path allowlist entry for the root-level
.gitleaks-estate.toml; files with the same basename at other depths remain outside this pattern. The accompanying comments describe the scanner’s staged file and the exception’s scope.
🚥 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 identifies the primary change: preventing Gitleaks from flagging the staged estate baseline. It is concise and specific. |
| Description check | ✅ Passed | The description explains what changed, why it changed, the verification performed, the intended root-only scope, and known CI findings. It does not use the template headings or include the required sc… |
✨ Finishing Touches
🛠️ Fix failing CI checks
- Commit to this branch
- Create a new PR
- Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Autopilot is currently an internal CodeRabbit preview.
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.
A rabbit checks the scanner’s list,
One root file joins the allowlist.
The nested files stay in their place,
The pattern marks the root’s small space.
I nibble clover, pleased and bright,
Then hop along into the night.
Comment @coderabbitai help to get the list of available commands.
|
Autopilot could not be updated. Open Coding to check access and billing. |
|
ℹ️ No failing CI checks found. No CI/CD pipeline failures were detected for the current commit. If other checks (security scans, code quality, etc.) are failing, those require separate attention. |
🔍 Hypatia Security ScanFindings: 259 issues detected
View findings[
{
"reason": "Job `triage` in label-triage.yml has no `timeout-minutes:` declaration. Default is 6 hours — a stuck codeload fetch or runner hang can burn budget. Add `timeout-minutes: 10` (or proportional).",
"type": "missing_timeout_minutes",
"file": ".github/workflows/label-triage.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium",
"recipe_id": "recipe-add-workflow-timeout-minutes",
"job": "triage"
},
{
"reason": "Job `sync` in labels.yml has no `timeout-minutes:` declaration. Default is 6 hours — a stuck codeload fetch or runner hang can burn budget. Add `timeout-minutes: 10` (or proportional).",
"type": "missing_timeout_minutes",
"file": ".github/workflows/labels.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium",
"recipe_id": "recipe-add-workflow-timeout-minutes",
"job": "sync"
},
{
"line": 39,
"reason": "job in .github/workflows/labels.yml references `secrets.*` but does not install `step-security/harden-runner` — review outbound-egress monitoring",
"type": "RE001",
"file": ".github/workflows/labels.yml",
"action": "report",
"rule_module": "research_extensions",
"severity": "medium"
},
{
"line": 46,
"reason": "job in .github/workflows/push-email-notify.yml references `secrets.*` but does not install `step-security/harden-runner` — review outbound-egress monitoring",
"type": "RE001",
"file": ".github/workflows/push-email-notify.yml",
"action": "report",
"rule_module": "research_extensions",
"severity": "medium"
},
{
"line": 51,
"reason": "job in .github/workflows/build.yml references `secrets.*` but does not install `step-security/harden-runner` — review outbound-egress monitoring",
"type": "RE001",
"file": ".github/workflows/build.yml",
"action": "report",
"rule_module": "research_extensions",
"severity": "medium"
},
{
"line": 78,
"reason": "job in .github/workflows/hypatia-scan.yml references `secrets.*` but does not install `step-security/harden-runner` — review outbound-egress monitoring",
"type": "RE001",
"file": ".github/workflows/hypatia-scan.yml",
"action": "report",
"rule_module": "research_extensions",
"severity": "medium"
},
{
"line": 43,
"reason": "job in .github/workflows/pages-deploy.yml references `secrets.*` but does not install `step-security/harden-runner` — review outbound-egress monitoring",
"type": "RE001",
"file": ".github/workflows/pages-deploy.yml",
"action": "report",
"rule_module": "research_extensions",
"severity": "medium"
},
{
"line": 53,
"reason": "job in .github/workflows/label-triage.yml references `secrets.*` but does not install `step-security/harden-runner` — review outbound-egress monitoring",
"type": "RE001",
"file": ".github/workflows/label-triage.yml",
"action": "report",
"rule_module": "research_extensions",
"severity": "medium"
},
{
"line": 41,
"reason": "workflow .github/workflows/build.yml:41 gates on `github.actor == 'dependabot[bot]'` — `github.actor` is the run-triggering user, which an attacker controls on `pull_request_target` from a fork",
"type": "RE008",
"file": ".github/workflows/build.yml",
"action": "report",
"rule_module": "research_extensions",
"severity": "critical"
},
{
"line": 34,
"reason": "workflow .github/workflows/labels.yml:34 job `sync` has no `timeout-minutes:` — defaults to 360 min on hang",
"type": "WH006",
"file": ".github/workflows/labels.yml",
"action": "report",
"rule_module": "workflow_hardening",
"severity": "medium"
}
]Powered by Hypatia Neurosymbolic CI/CD Intelligence |
The Exemption ratchet reads .gitleaks.toml 14 -> 15. The one new entry is the root-anchored path the reusable stages the estate baseline to; without it gitleaks flags its own config (standards#888). Ratchet-exception: .gitleaks.toml +1 path entry (^\.gitleaks-estate\.toml$), the scanner's own staged artefact; standards#888; remove when the caller pin passes the fix Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WPSJ7fBhVAMcpSffCBWUDo
🔍 Hypatia Security ScanFindings: 259 issues detected
View findings[
{
"reason": "Job `triage` in label-triage.yml has no `timeout-minutes:` declaration. Default is 6 hours — a stuck codeload fetch or runner hang can burn budget. Add `timeout-minutes: 10` (or proportional).",
"type": "missing_timeout_minutes",
"file": ".github/workflows/label-triage.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium",
"recipe_id": "recipe-add-workflow-timeout-minutes",
"job": "triage"
},
{
"reason": "Job `sync` in labels.yml has no `timeout-minutes:` declaration. Default is 6 hours — a stuck codeload fetch or runner hang can burn budget. Add `timeout-minutes: 10` (or proportional).",
"type": "missing_timeout_minutes",
"file": ".github/workflows/labels.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium",
"recipe_id": "recipe-add-workflow-timeout-minutes",
"job": "sync"
},
{
"line": 39,
"reason": "job in .github/workflows/labels.yml references `secrets.*` but does not install `step-security/harden-runner` — review outbound-egress monitoring",
"type": "RE001",
"file": ".github/workflows/labels.yml",
"action": "report",
"rule_module": "research_extensions",
"severity": "medium"
},
{
"line": 46,
"reason": "job in .github/workflows/push-email-notify.yml references `secrets.*` but does not install `step-security/harden-runner` — review outbound-egress monitoring",
"type": "RE001",
"file": ".github/workflows/push-email-notify.yml",
"action": "report",
"rule_module": "research_extensions",
"severity": "medium"
},
{
"line": 51,
"reason": "job in .github/workflows/build.yml references `secrets.*` but does not install `step-security/harden-runner` — review outbound-egress monitoring",
"type": "RE001",
"file": ".github/workflows/build.yml",
"action": "report",
"rule_module": "research_extensions",
"severity": "medium"
},
{
"line": 78,
"reason": "job in .github/workflows/hypatia-scan.yml references `secrets.*` but does not install `step-security/harden-runner` — review outbound-egress monitoring",
"type": "RE001",
"file": ".github/workflows/hypatia-scan.yml",
"action": "report",
"rule_module": "research_extensions",
"severity": "medium"
},
{
"line": 43,
"reason": "job in .github/workflows/pages-deploy.yml references `secrets.*` but does not install `step-security/harden-runner` — review outbound-egress monitoring",
"type": "RE001",
"file": ".github/workflows/pages-deploy.yml",
"action": "report",
"rule_module": "research_extensions",
"severity": "medium"
},
{
"line": 53,
"reason": "job in .github/workflows/label-triage.yml references `secrets.*` but does not install `step-security/harden-runner` — review outbound-egress monitoring",
"type": "RE001",
"file": ".github/workflows/label-triage.yml",
"action": "report",
"rule_module": "research_extensions",
"severity": "medium"
},
{
"line": 41,
"reason": "workflow .github/workflows/build.yml:41 gates on `github.actor == 'dependabot[bot]'` — `github.actor` is the run-triggering user, which an attacker controls on `pull_request_target` from a fork",
"type": "RE008",
"file": ".github/workflows/build.yml",
"action": "report",
"rule_module": "research_extensions",
"severity": "critical"
},
{
"line": 34,
"reason": "workflow .github/workflows/labels.yml:34 job `sync` has no `timeout-minutes:` — defaults to 360 min on hang",
"type": "WH006",
"file": ".github/workflows/labels.yml",
"action": "report",
"rule_module": "workflow_hardening",
"severity": "medium"
}
]Powered by Hypatia Neurosymbolic CI/CD Intelligence |
What
Adds a root-anchored self-exclusion
^\.gitleaks-estate\.toml$to.gitleaks.toml.Why
The standards
secret-scanner-reusable.yml(pinned here at84355587) copies the estate baseline to.gitleaks-estate.tomlin the workspace root unconditionally: metadatastician/standards#888, still open. The baseline documents credential shapes, sogeneric-api-keyfires 3× on it (run 37023024168).scan / gitleaksis this repo's only required context, somain@e922780and every PR (e.g. #154) are blocked for reasons no commit here caused.Same cure as catachresis-colloquium/IDApTIK#127. Remove it once standards#888 lands and the caller pin is bumped past it.
Verified locally (gitleaks 8.16, relative paths, as CI runs it)
.gitleaks-estate.tomlat rootsrc/.gitleaks-estate.tomlgeneric-api-key)github-pat)Root-only on purpose: an unanchored
(^|/)form would also hide a real file of that name at any depth.Known reds on this PR (not caused by its diff)
scan / gitleaks: the main scan is now clean ("no leaks found"). The AsciiDoc step flags 1 finding indocs/handover/2026-05-26/prompts/earlier-02-cloudflare-token-rotation.adoc(run 37026472236). Until now the main scan died first on standards#888, which masked it. Needs owner triage: rotate and redact if live; anchored allowlist if not.governance / Actions lockfile verify,actions.lock is in sync with the workflow YAML: inherited frommain@e922780(red there too). Fixed by build(deps): Bump the actions group across 1 directory with 4 updates #154.governance / Exemption ratchet: cured by aRatchet-exception: .gitleaks.tomlline on the growing commit (cb9d44d, verified locally rc=0). Pending push.🤖 Generated with Claude Code
https://claude.ai/code/session_01WPSJ7fBhVAMcpSffCBWUDo