Skip to content

ci: restore block YAML until the gates read KYAML - #373

Merged
hyperpolymath merged 1 commit into
mainfrom
chore/workflow-block-yaml
Oct 8, 2026
Merged

hyperpolymath merged 1 commit into
mainfrom
chore/workflow-block-yaml

Conversation

@hyperpolymath

@hyperpolymath hyperpolymath commented Oct 8, 2026 •

Copy link
Copy Markdown
Owner

Summary

Restores block-style formatting of .github/workflows/ci.yml. #372 removed this repo's duplicate Semgrep scan and, in the same PR, rewrote the file as KYAML. The KYAML form turned two gates red that read only block YAML:

  • governance / Workflow security linter: its duplicate-key check comes from standards@317101e0 (2026-09-14). Flow-document support landed later, in standards 13b872c1 (2026-10-01), so the old copy reads every step's name:/run: as a repeat of the previous one and reports phantom duplicates.
  • lint-workflows (this repo's workflow-linter.yml), where present: it checks for top-level permissions with grep -q "^permissions:". KYAML indents that key inside {, so the check fails although the permissions are declared.

The parsed workflow is unchanged, so behaviour does not change. KYAML conversion waits until both gates read it.

Follow-up to #372.

Type of change

  • 🐛 Bug fix: no code change; this clears CI reds the earlier reformat caused.
  • ✨ New feature: n/a
  • 💥 Breaking change: no
  • 🕳️ Soundness fix: n/a
  • 📖 Documentation: n/a
  • 🧹 Refactor / tech debt (behaviour-preserving)
  • ⚡ Performance: n/a
  • 🔧 Build / CI / tooling

📌 New pins

Head SHA: c59230581179e6803cbb36ecb17d3ea349e1827c. No pins added or changed.

How has this been verified?

  • yq -o json 'sort_keys(..)' on main @ 50bacde and on this head: identical data.
  • The current standards duplicate-key checker passes this file. A planted duplicate in a KYAML copy is still caught (rc=1), so the KYAML file was clean and the old checker was wrong.
  • grep -c '^permissions:' = 1 (was 0 in the KYAML form).
  • actionlint: same diagnostics as the pre-ci: remove per-repo Semgrep scan (the Semgrep Code app covers PRs) #372 file.
  • No uses: ref changes, so actions.lock is unaffected.

Checklist

  • My commits are signed (verified G).
  • I ran the project's own checks/tests locally and they pass: the checks above. This is formatting only.
  • New files carry the correct SPDX identifier: n/a, no new files.
  • Docs are updated, and no public claim now overstates what the code does: nothing to update.
  • I have not introduced a soundness hole.

Notes for reviewers

Formatting only. The data-identity check is the whole claim.

Pre-existing reds on main (not caused by this PR)

Each red check on this head, with its most recent conclusion on main (up to 15 commits back). Owner ruling 2026-10-08: these are logged in dev-notes/inbox/findings.md, with no new issues (D273).

Check Latest on main
CodeQL Analysis (python) failure@b899619
governance / Security policy checks failure@b899619
governance / Workflow security linter failure@b899619
Hypatia NOT RUN in last 15
Lint Elixir failure@b899619
Lint Node.js/AffineScript failure@b899619
Lint Rust (ai-jail) failure@b899619
Lint Rust (core) cancelled@b899619
Lint Shell Scripts failure@b899619
Rust Security Audit failure@b899619
scan / gitleaks failure@b899619
scan / rust-secrets failure@b899619
scan / shell-secrets failure@b899619
SonarQube failure@b899619
Validate DEED manifests failure@b899619

Hypatia review threads were answered and resolved: every flagged line exists unchanged on main from before the Semgrep PR.

🤖 Generated with Claude Code

https://claude.ai/code/session_013aSu89DNALjTYHBvA6FcoM

Undoes the KYAML rewrite that landed with the Semgrep removal. The
parsed workflow is identical to main; only the formatting changes.

The KYAML form turned two gates red that read only block YAML: the
governance duplicate-key check, pinned to standards@317101e0 from before
its flow-document support (13b872c1), and the workflow linter grep for
a column-0 `permissions:` key. Converting waits until both read KYAML.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013aSu89DNALjTYHBvA6FcoM
@coderabbitai

coderabbitai Bot commented Oct 8, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You'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 31 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: e85fdf80-8326-4416-ac5b-c688dd5f0daf
📥 Commits

Reviewing files that changed from the base of the PR and between 50bacde and c592305.

📒 Files selected for processing (1)
  • .github/workflows/ci.yml
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Comment thread .github/workflows/ci.yml Resolved
Comment thread .github/workflows/ci.yml Resolved
Comment thread .github/workflows/ci.yml Resolved
Comment thread .github/workflows/ci.yml Resolved
Comment thread .github/workflows/ci.yml Resolved
Comment thread .github/workflows/ci.yml Resolved
Comment thread .github/workflows/ci.yml Resolved
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown

🔍 Hypatia Security Scan

Findings: 195 issues detected

Severity Count
🔴 Critical 7
🟠 High 23
🟡 Medium 165

⚠️ Action Required: Critical security issues found!

View findings
[
  {
    "reason": "Job `sonarqube` in build.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/build.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium",
    "recipe_id": "recipe-add-workflow-timeout-minutes",
    "job": "sonarqube"
  },
  {
    "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"
  },
  {
    "reason": "Step uses `peter-evans/repository-dispatch` with `token: ${{ secrets.FARM_DISPATCH_TOKEN }}` but has no `if: secrets.FARM_DISPATCH_TOKEN != ''` gate. On repos where the secret hasn't been propagated the action fails on every push, red-maining the repo. Add the step-level gate (or env+if pattern) so the missing-secret path is a clean skip instead of a red.",
    "type": "secret_action_without_presence_gate",
    "file": ".github/workflows/instant-sync.yml",
    "action": "peter-evans/repository-dispatch",
    "rule_module": "workflow_audit",
    "severity": "high",
    "fix_recipe": "add_secret_presence_gate"
  },
  {
    "reason": "Step uses `webfactory/ssh-agent` with `ssh-private-key: ${{ secrets.GITLAB_SSH_KEY }}` but has no `if: secrets.GITLAB_SSH_KEY != ''` gate. On repos where the secret hasn't been propagated the action fails on every push, red-maining the repo. Add the step-level gate (or env+if pattern) so the missing-secret path is a clean skip instead of a red.",
    "type": "secret_action_without_presence_gate",
    "file": ".github/workflows/mirror.yml",
    "action": "webfactory/ssh-agent",
    "rule_module": "workflow_audit",
    "severity": "high",
    "fix_recipe": "add_secret_presence_gate"
  },
  {
    "reason": "Step uses `webfactory/ssh-agent` with `ssh-private-key: ${{ secrets.BITBUCKET_SSH_KEY }}` but has no `if: secrets.BITBUCKET_SSH_KEY != ''` gate. On repos where the secret hasn't been propagated the action fails on every push, red-maining the repo. Add the step-level gate (or env+if pattern) so the missing-secret path is a clean skip instead of a red.",
    "type": "secret_action_without_presence_gate",
    "file": ".github/workflows/mirror.yml",
    "action": "webfactory/ssh-agent",
    "rule_module": "workflow_audit",
    "severity": "high",
    "fix_recipe": "add_secret_presence_gate"
  },
  {
    "reason": "Step uses `webfactory/ssh-agent` with `ssh-private-key: ${{ secrets.CODEBERG_SSH_KEY }}` but has no `if: secrets.CODEBERG_SSH_KEY != ''` gate. On repos where the secret hasn't been propagated the action fails on every push, red-maining the repo. Add the step-level gate (or env+if pattern) so the missing-secret path is a clean skip instead of a red.",
    "type": "secret_action_without_presence_gate",
    "file": ".github/workflows/mirror.yml",
    "action": "webfactory/ssh-agent",
    "rule_module": "workflow_audit",
    "severity": "high",
    "fix_recipe": "add_secret_presence_gate"
  },
  {
    "reason": "Step uses `webfactory/ssh-agent` with `ssh-private-key: ${{ secrets.SOURCEHUT_SSH_KEY }}` but has no `if: secrets.SOURCEHUT_SSH_KEY != ''` gate. On repos where the secret hasn't been propagated the action fails on every push, red-maining the repo. Add the step-level gate (or env+if pattern) so the missing-secret path is a clean skip instead of a red.",
    "type": "secret_action_without_presence_gate",
    "file": ".github/workflows/mirror.yml",
    "action": "webfactory/ssh-agent",
    "rule_module": "workflow_audit",
    "severity": "high",
    "fix_recipe": "add_secret_presence_gate"
  },
  {
    "reason": "Step uses `webfactory/ssh-agent` with `ssh-private-key: ${{ secrets.DISROOT_SSH_KEY }}` but has no `if: secrets.DISROOT_SSH_KEY != ''` gate. On repos where the secret hasn't been propagated the action fails on every push, red-maining the repo. Add the step-level gate (or env+if pattern) so the missing-secret path is a clean skip instead of a red.",
    "type": "secret_action_without_presence_gate",
    "file": ".github/workflows/mirror.yml",
    "action": "webfactory/ssh-agent",
    "rule_module": "workflow_audit",
    "severity": "high",
    "fix_recipe": "add_secret_presence_gate"
  },
  {
    "reason": "Step uses `webfactory/ssh-agent` with `ssh-private-key: ${{ secrets.GITEA_SSH_KEY }}` but has no `if: secrets.GITEA_SSH_KEY != ''` gate. On repos where the secret hasn't been propagated the action fails on every push, red-maining the repo. Add the step-level gate (or env+if pattern) so the missing-secret path is a clean skip instead of a red.",
    "type": "secret_action_without_presence_gate",
    "file": ".github/workflows/mirror.yml",
    "action": "webfactory/ssh-agent",
    "rule_module": "workflow_audit",
    "severity": "high",
    "fix_recipe": "add_secret_presence_gate"
  }
]

Powered by Hypatia Neurosymbolic CI/CD Intelligence

@hyperpolymath
hyperpolymath merged commit b899619 into main Oct 8, 2026
56 of 80 checks passed
@hyperpolymath
hyperpolymath deleted the chore/workflow-block-yaml branch October 8, 2026 11:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants