feat(governance): add hypatia-scan-reusable.yml — consolidate 702-repo drift#191
Closed
hyperpolymath wants to merge 1 commit into
Closed
feat(governance): add hypatia-scan-reusable.yml — consolidate 702-repo drift#191hyperpolymath wants to merge 1 commit into
hyperpolymath wants to merge 1 commit into
Conversation
…o drift Estate audit (`gh search code filename:hypatia-scan.yml org:hyperpolymath`) found 702 copies of the 416-line Hypatia Neurosymbolic CI/CD scan workflow. Sampled heads (vcl-ut, k9iser, bunsenite, affinescript, echidna) are byte-identical apart from the SPDX header drifting between `MPL-2.0` and `PMPL-1.0-or-later` — the same self-copied template pattern fixed by standards#168 (governance/language) and #174 (rust-ci / elixir-ci). Largest estate-template-propagation lever currently outstanding: 702 copies × 416 lines = ~290k lines of duplicated YAML across the estate, all carrying the same scan body. The reusable preserves the canonical's semantics: * Build Hypatia escript, run scan, dump findings JSON. * Convert findings to SARIF (dependency-free Node, npm-ban-respecting). * Upload SARIF on non-fork triggers; skip on fork PRs (read-only token). * Best-effort gitbot-fleet learning submission (continue-on-error). * PR comment on same-repo PRs (continue-on-error). * Advisory critical-finding warning (gating delegated to branch protection per hypatia#213 gate-decoupling). Two opt-out booleans added: * `enable_fleet_submission` (default true) * `enable_pr_comment` (default true) Both still `continue-on-error`; the toggles exist for repos that want cleaner step logs rather than a non-fatal warning trail. Caller shape (wrapper pattern): name: Hypatia Security Scan on: push: { branches: [main, master, develop] } pull_request: { branches: [main, master] } schedule: [{ cron: '0 0 * * 0' }] workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true permissions: contents: read security-events: write pull-requests: write jobs: hypatia: uses: hyperpolymath/standards/.github/workflows/hypatia-scan-reusable.yml@<sha> secrets: inherit Wrapper sweep gated on owner-merge. Then ~700 mechanical wrapper PRs following the standards#174 sweep pattern. Refs: * hypatia#213 — gate-decoupling design * hypatia#328 — CSA001 self-loop fix precedent * burble#35 — SARIF integration history * standards#168/#174 — template-propagation pattern
Owner
Author
|
Closing in favour of #193 (parallel-session implementation filed 17 min after this PR). After diffing the two reusables:
Hypatia-scan wrapper sweep (264 PRs filed pinned to this branch's HEAD |
auto-merge was automatically disabled
May 26, 2026 12:14
Pull request was closed
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
Estate audit (
gh search code filename:hypatia-scan.yml org:hyperpolymath) found 702 copies of the 416-line Hypatia Neurosymbolic scan workflow. Sampled heads (vcl-ut, k9iser, bunsenite, affinescript, echidna) are byte-identical apart from the SPDX header drifting betweenMPL-2.0andPMPL-1.0-or-later. Largest currently-outstanding template-propagation lever: 702 × 416 ≈ 290k duplicated YAML lines.Same pattern as #168 (governance / language-policy), #174 (rust-ci / elixir-ci), #187 (mirror), and #190 (secret-scanner).
Behaviour preservation
Reusable preserves the canonical's semantics step-for-step:
continue-on-error).continue-on-error).Inputs (both optional)
enable_fleet_submission(defaulttrue) — opt out of the Phase 2 gitbot-fleet learning side-channel.enable_pr_comment(defaulttrue) — opt out of the PR comment.Both steps remain
continue-on-error; toggles exist for repos that want cleaner step logs rather than a non-fatal warning trail.secrets:block declaresHYPATIA_DISPATCH_PATas optional so callers cansecrets: inheritwithout per-secret plumbing.Caller shape
After merge
Wrapper sweep — ~700 mechanical wrapper PRs following the standards#174 sweep pattern (3 proof PRs first to validate the wrapper file syntax, then fan out via background Bash; sandbox blocks the subagent path per
feedback_fanout_needs_bash_allowlist.md).Refs
🤖 Generated with Claude Code