fix(ci): hypatia self-clean — replace 3 fake action SHA pins#401
Merged
Conversation
Hypatia's own workflows carried three fake SHAs caught by the 2026-05-30 estate audit. Self-clean so hypatia passes its own `:known_fake_action_sha` rule (#397) when scanning itself. ## Substitutions Swatinem/rust-cache (7 sites across ci/release/tests) ad397744b0d591a723ab90405b7247fac0e6b8db (fake; partial-prefix corruption) → 9d47c6ad4b02e050fd481d890b2ea34778fd09d6 (real v2.7.8) Version intent preserved (# v2.7.8 → still v2.7.8). haskell-actions/hlint-run (1 site in ci.yml) 75c62c3bed4ab3e4c85c64ed8f287478c5f86ce2 (fake) → 0b0024319753ba0c8b2fa21b7018ed252aed8181 (real v2.4.9) Version intent preserved (# v2.4.9 → still v2.4.9). haskell-actions/hlint-setup (1 site in ci.yml) 17f0f4093d35cfdbf02aab186d51d0bb8b92ddfa # v2.7.0 (DOUBLY FICTIONAL) → fe9cd1cd1af94a23900c06738e73f6ddb092966a # v2.4.10 (real, current latest) Note: the original `# v2.7.0` was itself fictional — hlint-setup's tag history only goes to v2.4.10 (verified via `gh api repos/haskell-actions/hlint-setup/tags`). Bumped to the actual current latest rather than try to preserve a version that never existed. ## Verification `gh api repos/<org>/<action>/commits/<sha>` returns 200 for all three real SHAs (verified pre-commit). Hypatia's own audit rule + verify task will see these as `real` going forward. ## Provenance Estate audit 2026-05-30 found these among 67 fake action SHA pairs. The round-2 sweep in flight handles rust-cache for ~46 estate repos including hypatia, but it doesn't carry the hlint-* substitutions in its map — so this PR catches both for hypatia in one shot rather than waiting for the sweep to fix only the rust-cache subset later. See `project_estate_fake_action_sha_punch_list_2026_05_30` for the full substitution map context.
🔍 Hypatia Security ScanFindings: 103 issues detected
View findings[
{
"reason": "Action urin 21 JRE\n uses: actions/setup-java@be666c2fcd27 needs attention",
"type": "unpinned_action",
"file": "verify-proofs.yml",
"action": "pin_sha",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in ci.yml",
"type": "missing_timeout_minutes",
"file": "ci.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in ci.yml",
"type": "missing_timeout_minutes",
"file": "ci.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in ci.yml",
"type": "missing_timeout_minutes",
"file": "ci.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in ci.yml",
"type": "missing_timeout_minutes",
"file": "ci.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in ci.yml",
"type": "missing_timeout_minutes",
"file": "ci.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in ci.yml",
"type": "missing_timeout_minutes",
"file": "ci.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in ci.yml",
"type": "missing_timeout_minutes",
"file": "ci.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in ci.yml",
"type": "missing_timeout_minutes",
"file": "ci.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in clusterfuzzlite.yml",
"type": "missing_timeout_minutes",
"file": "clusterfuzzlite.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
}
]Powered by Hypatia Neurosymbolic CI/CD Intelligence |
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.
Summary
Hypatia carried 3 fake SHA pins in its own workflows. Self-clean so hypatia passes its own
:known_fake_action_sharule (#397) when scanning itself.Substitutions (version-faithful where possible)
Swatinem/rust-cachead397744...b8db9d47c6ad4b02e050fd481d890b2ea34778fd09d6haskell-actions/hlint-run75c62c3b...6ce20b0024319753ba0c8b2fa21b7018ed252aed8181haskell-actions/hlint-setup17f0f409...ddfafe9cd1cd1af94a23900c06738e73f6ddb092966a# v2.7.0was doubly fictional)Note on hlint-setup
The original
haskell-actions/hlint-setup@17f0f4093d35cfdbf02aab186d51d0bb8b92ddfa # v2.7.0was fake at TWO levels: the SHA doesn't exist, AND the versionv2.7.0was never released.hlint-setup's tag history only goes up to v2.4.10. Bumped to v2.4.10 (current latest) rather than try to preserve a version that never existed.Verification
All three real SHAs return 200 from
gh api repos/<org>/<action>/commits/<sha>. Verified pre-commit.Why one PR for both action families
The round-2 estate sweep in flight (~46 repos, version-faithful substitution map) handles
rust-cache@ad397744...but NOThlint-run/hlint-setup— those aren't in the substitution map. Filing both fixes in one PR for hypatia means:corrected_not_emitted(no-op) — clean handoffProvenance
Estate audit 2026-05-30 found 67 fake action SHA pairs; the in-flight round-2 sweep handles 26 substitutions across 46 repos; ~25 niche single-repo fakes including hlint were documented as deferred. This PR moves the 2 hlint fakes from "deferred" to "done" since they're in hypatia's own repo and there's symbolic value to hypatia being self-clean.
See
project_estate_fake_action_sha_punch_list_2026_05_30.mdfor the full substitution map context.Test plan
gh apireturns 200 for all 3 new SHAs (verified)