chore(ci): make Scorecard periodic, not per-push - #44
Conversation
Scorecard measures the REPOSITORY's supply-chain posture, not the change under review. The estate's signal-discipline standard puts repository-level measurements in the PERIODIC tier: on a schedule against the default branch, feeding one dashboard — not on every event. Measured across 303 scorecard workflows before this sweep: 199 push, schedule, workflow_dispatch 93 branch_protection_rule, schedule, push 1 push, pull_request, schedule, workflow_dispatch 1 schedule, workflow_dispatch <- the target shape So roughly 292 repositories ran a full posture scan on EVERY push to the default branch. That is pure cost: a supply-chain score cannot meaningfully change between two consecutive merges, and it never gated anything. WHAT IS DELIBERATELY KEPT: schedule the point of the tier workflow_dispatch manual re-run when one is actually wanted branch_protection_rule event-driven re-measurement of precisely what Scorecard scores. It fires on a settings change, not per pull request, so it does not violate the PERIODIC rule — and it keeps the score honest after exactly the change most likely to alter it. Only `push` and `pull_request` are removed. `pull_request` existed in one repository and was the genuine violation; `push` was the cost. Related, and the reason this matters beyond minutes: Scorecard was ALSO required as a `code_scanning` tool in 78 repositories at alertsThreshold=all, while producing code-scanning results in essentially none — because it does not emit per-commit SARIF. That made it an estate-wide merge blocker asking to do something it does not do. Those requirements have been removed separately. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com>
Note Automatic reviews are paused because your trial's included automatic processing has been used for this period. Upgrade now, or comment "Gitar review" to run a review anytime. Code Review✅ ApprovedUpdates the OpenSSF Scorecard workflow triggers to run periodically on a schedule and branch protection rules rather than on every push. No issues found.
OptionsDisplay: compact → Showing less information. Comment with these commands to change the behavior for this request:
Important Your trial ends in 4 days — upgrade now to keep code review, CI analysis, auto-apply, custom automations, and more. Was this helpful? React with 👍 / 👎 | Gitar |
🔍 Hypatia Security ScanFindings: 18 issues detected
View findings[
{
"reason": "Issue in push-email-notify.yml",
"type": "missing_timeout_minutes",
"file": "push-email-notify.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Code scanning (Scorecard): TokenPermissionsID -- Token-Permissions -- 15 day(s) old [STALE]",
"type": "CSA001",
"file": ".github/workflows/scorecard.yml",
"action": "escalate",
"rule_module": "code_scanning_alerts",
"severity": "high"
},
{
"reason": "Code scanning (Scorecard): BranchProtectionID -- Branch-Protection -- 41 day(s) old [STALE]",
"type": "CSA001",
"file": "no file associated with this alert",
"action": "escalate",
"rule_module": "code_scanning_alerts",
"severity": "high"
},
{
"reason": "Code scanning (Hypatia): hypatia/workflow_audit/missing_timeout_minutes -- Hypatia workflow_audit: missing_timeout_minutes -- 42 day(s) old [STALE]",
"type": "CSA001",
"file": "push-email-notify.yml",
"action": "update",
"rule_module": "code_scanning_alerts",
"severity": "medium"
},
{
"reason": "Code scanning (Scorecard): SASTID -- SAST -- 49 day(s) old [STALE]",
"type": "CSA001",
"file": "no file associated with this alert",
"action": "update",
"rule_module": "code_scanning_alerts",
"severity": "medium"
},
{
"reason": "Code scanning (Scorecard): FuzzingID -- Fuzzing -- 49 day(s) old [STALE]",
"type": "CSA001",
"file": "no file associated with this alert",
"action": "update",
"rule_module": "code_scanning_alerts",
"severity": "medium"
},
{
"reason": "Code scanning (Scorecard): MaintainedID -- Maintained -- 49 day(s) old [STALE]",
"type": "CSA001",
"file": "no file associated with this alert",
"action": "escalate",
"rule_module": "code_scanning_alerts",
"severity": "high"
},
{
"reason": "Code scanning (Scorecard): CodeReviewID -- Code-Review -- 49 day(s) old [STALE]",
"type": "CSA001",
"file": "no file associated with this alert",
"action": "escalate",
"rule_module": "code_scanning_alerts",
"severity": "high"
},
{
"reason": "Code scanning (Scorecard): TokenPermissionsID -- Token-Permissions -- 49 day(s) old [STALE]",
"type": "CSA001",
"file": ".github/workflows/hypatia-scan.yml",
"action": "escalate",
"rule_module": "code_scanning_alerts",
"severity": "high"
},
{
"reason": "10 total open code-scanning alert(s) -- security hygiene review",
"type": "CSA002",
"file": "hyperpolymath/lucidscript",
"action": "review",
"rule_module": "code_scanning_alerts",
"severity": "medium"
}
]Powered by Hypatia Neurosymbolic CI/CD Intelligence |
Uh oh!
There was an error while loading. Please reload this page.
🔍 Hypatia Security ScanFindings: 21 issues detected
View findings[
{
"reason": "Issue in push-email-notify.yml",
"type": "missing_timeout_minutes",
"file": "push-email-notify.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "6 workflow(s) with tag-pinned (not SHA-pinned) actions in lucidscript",
"type": "DependencyPinning",
"file": "/home/runner/work/lucidscript/lucidscript",
"action": "auto_fix",
"rule_module": "scorecard",
"severity": "medium",
"remediation": "Pin GitHub Actions and Docker base images by SHA hash.",
"scorecard_check": "Pinned-Dependencies"
},
{
"reason": "Code scanning (Scorecard): TokenPermissionsID -- Token-Permissions -- 16 day(s) old [STALE]",
"type": "CSA001",
"file": ".github/workflows/scorecard.yml",
"action": "escalate",
"rule_module": "code_scanning_alerts",
"severity": "high"
},
{
"reason": "Code scanning (Scorecard): BranchProtectionID -- Branch-Protection -- 42 day(s) old [STALE]",
"type": "CSA001",
"file": "no file associated with this alert",
"action": "escalate",
"rule_module": "code_scanning_alerts",
"severity": "high"
},
{
"reason": "Code scanning (Hypatia): hypatia/workflow_audit/missing_timeout_minutes -- Hypatia workflow_audit: missing_timeout_minutes -- 43 day(s) old [STALE]",
"type": "CSA001",
"file": "push-email-notify.yml",
"action": "update",
"rule_module": "code_scanning_alerts",
"severity": "medium"
},
{
"reason": "Code scanning (Scorecard): SASTID -- SAST -- 50 day(s) old [STALE]",
"type": "CSA001",
"file": "no file associated with this alert",
"action": "update",
"rule_module": "code_scanning_alerts",
"severity": "medium"
},
{
"reason": "Code scanning (Scorecard): FuzzingID -- Fuzzing -- 50 day(s) old [STALE]",
"type": "CSA001",
"file": "no file associated with this alert",
"action": "update",
"rule_module": "code_scanning_alerts",
"severity": "medium"
},
{
"reason": "Code scanning (Scorecard): MaintainedID -- Maintained -- 50 day(s) old [STALE]",
"type": "CSA001",
"file": "no file associated with this alert",
"action": "escalate",
"rule_module": "code_scanning_alerts",
"severity": "high"
},
{
"reason": "Code scanning (Scorecard): CodeReviewID -- Code-Review -- 50 day(s) old [STALE]",
"type": "CSA001",
"file": "no file associated with this alert",
"action": "escalate",
"rule_module": "code_scanning_alerts",
"severity": "high"
},
{
"reason": "Code scanning (Scorecard): TokenPermissionsID -- Token-Permissions -- 50 day(s) old [STALE]",
"type": "CSA001",
"file": ".github/workflows/hypatia-scan.yml",
"action": "escalate",
"rule_module": "code_scanning_alerts",
"severity": "high"
}
]Powered by Hypatia Neurosymbolic CI/CD Intelligence |



Makes the OpenSSF Scorecard workflow periodic by dropping its
push(and, in one repository,pull_request) trigger.schedule,workflow_dispatchandbranch_protection_ruleare all kept.Why. Scorecard measures the repository's supply-chain posture, not the change under review. That is the
📅 PERIODIC:tier in the estate's signal-discipline standard: on a schedule against the default branch, feeding a dashboard — not on every event. It cannot meaningfully pass or fail a diff.Measured across 303 scorecard workflows before this sweep:
So ~292 repositories ran a full posture scan on every push to the default branch. That is pure cost: the score cannot meaningfully change between two consecutive merges.
Deliberately kept:
branch_protection_rule. It fires on a settings change — not per pull request — so it does not violate the PERIODIC rule, and it re-measures precisely what Scorecard scores after exactly the change most likely to alter it.🤖 Generated with Claude Code