ci: repair invalid instant-sync workflow + Scorecard enforcer#18
Merged
Conversation
instant-sync.yml: the "K9-SVC Validation" block was a YAML sequence item
(`- name:` at 2-space indent) placed directly under the `jobs:` mapping,
which is a parse error — the whole workflow was invalid (run fails at
validation with zero jobs). Converged onto the canonical instant-sync:
K9-SVC is now a proper step inside the dispatch job, and the propagation
dispatch is presence-gated via a job-level env var (the `secrets` context
is invalid inside `if:`).
scorecard-enforcer.yml: the scorecard job invoked ossf/scorecard-action with
publish_results: true AND a run: step in the same job, which OSSF rejects with
HTTP 400 ("scorecard job must only have steps with `uses`"), failing the run.
Split into an uses-only publish job + an unprivileged JSON score-gate (reads
top-level `.score`; the SARIF aggregate path is absent so the old gate always
read 0 and failed < 5). Least-privilege contents:read, timeouts, SHA pins.
https://claude.ai/code/session_01VwbFNQJw23tW8tqM7utWku
The initial push of this branch did not create any workflow runs (no run object was produced), so this empty commit re-triggers the CI / governance / scorecard checks for the draft PR. https://claude.ai/code/session_01VwbFNQJw23tW8tqM7utWku
hyperpolymath
marked this pull request as ready for review
June 15, 2026 12:20
🔍 Hypatia Security ScanFindings: 23 issues detected
View findings[
{
"reason": "Issue in scorecard-enforcer.yml",
"type": "scorecard_publish_with_run_step",
"file": "scorecard-enforcer.yml",
"action": "split_scorecard_publish_job",
"rule_module": "workflow_audit",
"severity": "high"
},
{
"reason": "Issue in instant-sync.yml",
"type": "secret_action_without_presence_gate",
"file": "instant-sync.yml",
"action": "peter-evans/repository-dispatch",
"rule_module": "workflow_audit",
"severity": "high"
},
{
"reason": "Issue in mirror.yml",
"type": "secret_action_without_presence_gate",
"file": "mirror.yml",
"action": "webfactory/ssh-agent",
"rule_module": "workflow_audit",
"severity": "high"
},
{
"reason": "Issue in mirror.yml",
"type": "secret_action_without_presence_gate",
"file": "mirror.yml",
"action": "webfactory/ssh-agent",
"rule_module": "workflow_audit",
"severity": "high"
},
{
"reason": "Issue in mirror.yml",
"type": "secret_action_without_presence_gate",
"file": "mirror.yml",
"action": "webfactory/ssh-agent",
"rule_module": "workflow_audit",
"severity": "high"
},
{
"reason": "Issue in mirror.yml",
"type": "secret_action_without_presence_gate",
"file": "mirror.yml",
"action": "webfactory/ssh-agent",
"rule_module": "workflow_audit",
"severity": "high"
},
{
"reason": "Issue in mirror.yml",
"type": "secret_action_without_presence_gate",
"file": "mirror.yml",
"action": "webfactory/ssh-agent",
"rule_module": "workflow_audit",
"severity": "high"
},
{
"reason": "Issue in mirror.yml",
"type": "secret_action_without_presence_gate",
"file": "mirror.yml",
"action": "webfactory/ssh-agent",
"rule_module": "workflow_audit",
"severity": "high"
},
{
"reason": "Nominal-only SAST in Axiology.jl: codeql.yml language matrix contains no language present in the repo and lacks `actions`, so CodeQL records zero results on every commit. Remediation: set the CodeQL matrix to `language: actions`.",
"type": "StaticAnalysis",
"file": "/home/runner/work/Axiology.jl/Axiology.jl",
"action": "auto_fix",
"rule_module": "scorecard",
"severity": "medium",
"remediation": "Add CodeQL or equivalent SAST workflow.",
"scorecard_check": "SAST"
},
{
"reason": "Repository has 3 non-main remote branch(es). Policy: single main branch only.",
"type": "GS007",
"file": ".",
"action": "delete_remote_branches",
"rule_module": "git_state",
"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.
Why
Two workflow files were failing at GitHub Actions validation (whole-run failure, zero jobs), so they show red on every push to
main.instant-sync.yml— invalid YAML structureThe
K9-SVC Validationblock was authored as a YAML sequence item (- name:at 2-space indent) placed directly under thejobs:mapping. A mapping key (dispatch:) and a sequence entry cannot coexist at the same level, so the file does not parse and the whole workflow is invalid.Fix: converged onto the estate-canonical
instant-sync.yml:K9-SVC Validationis now a proper step inside thedispatchjob.env:var (env.FARM_DISPATCH_TOKEN != ''). Thesecretscontext is not available inif:, so gating on it directly would itself invalidate the workflow.scorecard-enforcer.yml— OSSF publish + run-step (HTTP 400) and an unreadable scorescorecardjob ranossf/scorecard-actionwithpublish_results: trueand arun:step in the same job; OSSF attestation rejects that with HTTP 400 ("scorecard job must only have steps withuses")..runs[0].tool.driver.properties.score, which SARIF does not carry → it always read0and failed the< 5check.Fix: split into an uses-only publish job + an unprivileged
score-gatejob that re-derives the score in JSON mode (top-level.score). Also: least-privilegecontents: read, bounded timeouts, canonical SHA pins. (Both failure modes verified live onnextgen-languagesscorecard-enforcer run 27468148000.)Verification
No Julia toolchain locally; both files validated as parseable YAML (
yaml.safe_load). These workflows trigger on push-to-main(notpull_request), so the green proof lands after merge.https://claude.ai/code/session_01VwbFNQJw23tW8tqM7utWku
Generated by Claude Code