Skip to content

feat(governance): add scorecard-reusable.yml — close 5-candidate convergence set#205

Open
hyperpolymath wants to merge 1 commit into
mainfrom
feat/scorecard-reusable
Open

feat(governance): add scorecard-reusable.yml — close 5-candidate convergence set#205
hyperpolymath wants to merge 1 commit into
mainfrom
feat/scorecard-reusable

Conversation

@hyperpolymath
Copy link
Copy Markdown
Owner

Summary

5th and final reusable in the workflow convergence campaign (see #199 for the meta-doc). Consolidates the per-repo scorecard.yml workflow.

Drift signal (full pagination + per-repo verified)

  • 258 top-level estate deployments
  • 626 nested copies in monorepos (asdf-tool-plugins, developer-ecosystem, ssg-collection, standards, ambientops, julia-ecosystem, etc. — Layer-2 truncation discovery via tooling(scripts): nested-path support — Git Tree helper + classifier consumers #204's helper)
  • 46 unique blob SHAs / 17.8% structural drift
  • Top SHA covers 100/258 (38.8%) — highest dominant-cluster of the 5 campaigns
  • Top 7 SHAs cover ~80%
  • 100% mechanical drift, ZERO feature variance — SPDX header (PMPL-1.0 / PMPL-1.0-or-later / MPL-2.0), upload-sarif SHA-pin churn, permissions: read-all vs contents: read wording

Design

  • One input: runs-on (default ubuntu-latest)
  • No secrets: inherit — Scorecard uses GITHUB_TOKEN directly
  • Caller MUST grant security-events: write + id-token: write on the calling job (called-workflow permissions are capped by caller)
  • Caller keeps own on: triggers + concurrency: group

Per Layer-3 caveat from the campaign meta-doc

Nested workflows are inert — GitHub Actions only runs .github/workflows/ at the repo root. Sweeping the 626 nested copies is single-source-of-truth cleanup, not security hardening.

Campaign convergence set (closes with this PR)

PR Template
#187 mirror-reusable.yml
#190 secret-scanner-reusable.yml
#192 codeql-reusable.yml
#193 hypatia-scan-reusable.yml
#194 sweep-classifier scripts
#199 campaign meta-doc
#204 list-workflow-paths.sh (bypass /search/code undercount)
this scorecard-reusable.yml

Test plan

  • Wrapper sweep (~258 top-level + ~626 nested) — owner-gated; not part of this PR
  • Update classify-* scripts to consume helper TSV — follow-up

🤖 Generated with Claude Code

…ergence set

Consolidates 258 top-level estate deployments + 626 nested copies of
scorecard.yml into one reusable workflow.

Drift signal:
  - 258 top-level / 46 unique blob SHAs / 17.8% structural drift
  - Top SHA covers 100/258 (38.8%); top 7 cover ~80%
  - 100% of drift is MECHANICAL — SPDX header lag, action SHA-pin
    drift, permissions wording — ZERO feature variance across all 46
    blob SHAs

Design:
  - One input: `runs-on` (default ubuntu-latest)
  - No `secrets: inherit` needed — uses GITHUB_TOKEN directly
  - Caller MUST grant `security-events: write` + `id-token: write`
    on the calling job (capped by caller per GitHub Actions semantics)

This closes the workflow convergence campaign 5-candidate set (#187
mirror, #190 secret-scanner, #192 codeql, #193 hypatia-scan, #194
classifier tooling, #199 campaign meta-doc, #204 list-workflow-paths
helper, this PR).
@hyperpolymath hyperpolymath enabled auto-merge (squash) May 26, 2026 12:52
hyperpolymath added a commit that referenced this pull request May 26, 2026
Walked the Git Tree API for all 5 templates via list-workflow-paths.sh
from #204. Findings:

- Top-level path-filtered queries were 1-35% undercounted across
  all 5 templates (worst: hypatia-scan 255 -> 344, +89 / 35%).
- Nested-copy counts were 100%+ undercounted for mirror.yml
  (133 reported -> 335 true).
- hypatia-scan top-level has only 3 unique blob SHAs across
  344 sites -> 0.9% drift on the executing surface (vs the
  11.8% drift the PR body reports for top-level+nested).

Replaced the 'Corrected estate counts' section with three tables:
helper-validated totals, top-level-only drift, and initial-survey
undercount summary. Added LOC retirement table: ~275k LOC top-level
across the 5 reusables, ~732k including nested copies.

Updated Layer 2 documentation to note path-filtered queries are
ALSO truncated (previously the doc only said broad queries were).

Updated Standing follow-ups: marked the per-(repo,path) classifier
ingestion DONE (shipped in #204); removed the 'file scorecard' item
(filed as #205); added quarterly re-run suggestion.
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.

1 participant