Context
While fixing the standards-repo workflow startup_failures (#359, #371, #372), the Hypatia security scan repeatedly surfaced findings against this repo's workflows that are false positives — the rules flag structurally-valid GitHub Actions YAML, and "fixing" two of them would actively break the workflows. The actual fixes belong in hyperpolymath/hypatia's rule modules, not here. Filing in standards because (a) hypatia is out of the current agent session's scope, and (b) standards is the estate standards/umbrella hub. Please transfer to hyperpolymath/hypatia if preferred.
Evidence gathered against hyperpolymath/standards@main (post-#372).
1. workflow_audit/missing_timeout_minutes — exempt reusable-caller jobs (false positive)
Flagged on governance.yml, mirror.yml, secret-scanner.yml (and previously scorecard.yml). Each is a single-job thin caller of the form:
jobs:
governance:
uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@<sha>
timeout-minutes is not a legal key on a job that calls a reusable workflow — adding it produces Invalid workflow ... 'timeout-minutes' is not allowed. The timeout belongs on the reusable's jobs, where it already lives:
| caller (flagged) |
reusable it calls |
reusable job timeout coverage |
governance.yml |
governance-reusable.yml |
9/9 bounded |
mirror.yml |
mirror-reusable.yml |
7/7 bounded |
secret-scanner.yml |
secret-scanner-reusable.yml |
4/4 bounded |
Fix: skip the missing_timeout_minutes check for jobs that have a top-level uses: (reusable-workflow callers).
2. workflow_audit/unpinned_action — SHA-truncation misread (false positive)
Flagged twice on governance-reusable.yml, with the reason string:
Action for the check script)\n uses: actions/checkout@de0f needs attention
The action is actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 — a full 40-char SHA pin. The rule's reason string truncates the ref to de0f and then flags it as unpinned. A comprehensive scan of all root workflows found 0 genuinely-unpinned actions.
Fix: the pin check is matching/parsing a truncated ref. It should treat a 40-hex-char ref as pinned (and the truncation in the reason string is a display bug worth fixing too).
3. cicd_rules/missing_requirement (public_repo) + workflow_audit/missing_workflow — accept scorecard-enforcer.yml (policy gap)
After scorecard.yml was retired (#372, redundant + perpetually startup_failure-ing), the scan raised two high findings requiring a scorecard.yml to exist on public repos. But this repo runs OSSF Scorecard via scorecard-enforcer.yml, which is a strict superset (runs scorecard, uploads SARIF, publishes with publish_results: true, and gates on the aggregate score). The requirement is satisfied in substance; only the filename check fails.
Fix: the public_repo scorecard requirement should accept scorecard-enforcer.yml (or any workflow invoking ossf/scorecard-action) as satisfying it, not just a file literally named scorecard.yml.
Related note (not a request here)
workflow_audit/scorecard_publish_with_run_step continued to flag scorecard-enforcer.yml after #371 split it so no single job mixes ossf/scorecard-action with a run: step. If the rule is matching at file level (scorecard-action and a run: step anywhere in the file) rather than job level, it should be scoped to the job — the OSSF publish contract is per-job. Worth confirming against the rule's implementation.
Raised by an agent session scoped to hyperpolymath/standards; could not file directly in hyperpolymath/hypatia (out of scope) nor self-add that repo (session lacks the repo-management tools).
https://claude.ai/code/session_011xv3VLrqeXkpjXxUojKz82
Context
While fixing the standards-repo workflow
startup_failures (#359, #371, #372), the Hypatia security scan repeatedly surfaced findings against this repo's workflows that are false positives — the rules flag structurally-valid GitHub Actions YAML, and "fixing" two of them would actively break the workflows. The actual fixes belong inhyperpolymath/hypatia's rule modules, not here. Filing instandardsbecause (a) hypatia is out of the current agent session's scope, and (b) standards is the estate standards/umbrella hub. Please transfer tohyperpolymath/hypatiaif preferred.Evidence gathered against
hyperpolymath/standards@main(post-#372).1.
workflow_audit/missing_timeout_minutes— exempt reusable-caller jobs (false positive)Flagged on
governance.yml,mirror.yml,secret-scanner.yml(and previouslyscorecard.yml). Each is a single-job thin caller of the form:timeout-minutesis not a legal key on a job that calls a reusable workflow — adding it producesInvalid workflow ... 'timeout-minutes' is not allowed. The timeout belongs on the reusable's jobs, where it already lives:governance.ymlgovernance-reusable.ymlmirror.ymlmirror-reusable.ymlsecret-scanner.ymlsecret-scanner-reusable.ymlFix: skip the
missing_timeout_minutescheck for jobs that have a top-leveluses:(reusable-workflow callers).2.
workflow_audit/unpinned_action— SHA-truncation misread (false positive)Flagged twice on
governance-reusable.yml, with the reason string:The action is
actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2— a full 40-char SHA pin. The rule's reason string truncates the ref tode0fand then flags it as unpinned. A comprehensive scan of all root workflows found 0 genuinely-unpinned actions.Fix: the pin check is matching/parsing a truncated ref. It should treat a 40-hex-char ref as pinned (and the truncation in the reason string is a display bug worth fixing too).
3.
cicd_rules/missing_requirement(public_repo) +workflow_audit/missing_workflow— acceptscorecard-enforcer.yml(policy gap)After
scorecard.ymlwas retired (#372, redundant + perpetuallystartup_failure-ing), the scan raised two high findings requiring ascorecard.ymlto exist on public repos. But this repo runs OSSF Scorecard viascorecard-enforcer.yml, which is a strict superset (runs scorecard, uploads SARIF, publishes withpublish_results: true, and gates on the aggregate score). The requirement is satisfied in substance; only the filename check fails.Fix: the
public_reposcorecard requirement should acceptscorecard-enforcer.yml(or any workflow invokingossf/scorecard-action) as satisfying it, not just a file literally namedscorecard.yml.Related note (not a request here)
workflow_audit/scorecard_publish_with_run_stepcontinued to flagscorecard-enforcer.ymlafter #371 split it so no single job mixesossf/scorecard-actionwith arun:step. If the rule is matching at file level (scorecard-action and arun:step anywhere in the file) rather than job level, it should be scoped to the job — the OSSF publish contract is per-job. Worth confirming against the rule's implementation.Raised by an agent session scoped to
hyperpolymath/standards; could not file directly inhyperpolymath/hypatia(out of scope) nor self-add that repo (session lacks the repo-management tools).https://claude.ai/code/session_011xv3VLrqeXkpjXxUojKz82