fix(catalog): sync drifted action pins and remove a dead input - #43
Merged
Conversation
The catalog is the declared source of truth for supply-chain posture, and it was wrong about four tools. setup-node, setup-java, setup-swift and checkov-action each recorded a pin that appears in no workflow — setup-swift by a full major version. validate_catalog.py checked the pin's shape and that used_by paths exist, but never that the recorded pin is the pin actually used, so the gate stayed green over four wrong answers. Sync the four entries and close the hole: the validator now fails when a catalog pin does not appear verbatim in each used_by workflow. Verified by negative control — reintroducing the old setup-node SHA makes it fail with the exact mismatch, and reverting makes it pass. sql-ci.yml declared a python_version input that nothing read; it was the only never-read input across all reusables. The workflow has no setup-python step and provisions Python through setup-uv, so a caller passing python_version got a silently ignored value. Remove it and correct the header comment. Also refresh docs/12-community-dx.md, which listed five community-health files as missing when all five have shipped. Signed-off-by: Danil Silantyev <danilsilantyevwork@gmail.com>
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
Two source-of-truth defects found while auditing semantic entropy across the estate, plus one stale doc.
The catalog was wrong about four action pins.
catalog/tools.ymlrecorded apinforsetup-node,setup-java,setup-swiftandcheckov-actionthat appears in no workflow —setup-swiftby a full major version (v2.4.0recorded,v3shipped). Since.claude/CLAUDE.mddeclares the catalog the source of truth, anyone auditing supply-chain posture from it got four wrong answers.The reason it rotted silently:
validate_catalog.pychecked the pin's shape (PIN_RE) and thatused_bypaths exist, but never that the recorded pin is the pin actually used.sql-ci.ymldeclared apython_versioninput that nothing reads. It is the only never-read input across all 42 reusables. The workflow has nosetup-pythonstep at all — it provisions Python viasetup-uv+uvx sqlfluff. A caller writingwith: { python_version: '3.11' }got a silently ignored value: a false contract, not just dead weight. The line-3 header comment claiming "pinned setup-python" was wrong for the same reason.Type of change
Threat-model note
No workflow behavior, token scope, or egress changes. The
python_versionremoval narrows a reusable'sworkflow_callinterface — safe here because no caller in the estate passes it (verified across all four repos andexamples/), and it was inert regardless.The security-relevant change is the new validator: a catalog that silently disagrees with the workflows is worse than no catalog, because it is consulted instead of reading the workflow.
Permissions diff
None. No
permissions:block is touched.Checklist
permissions— untouchedconcurrencyandtimeout-minutespresent — untouchedpersist-credentials: false— untouched${{ ... }}insiderun:— untouchedactionlintpasses locallyzizmor --pedanticpasses locallydocs//catalog/updatedCHANGELOG.mdupdated under[Unreleased]-S) and signed off (-s, DCO); Conventional CommitTier impact
(
sql-ci.ymlis a both-tiers reusable; the catalog covers every tier.)Verification
python3 scripts/validate_all.pyexits 0.actionlintclean.The new check was proven by negative control, not just by passing: reintroducing the old
setup-nodeSHA into the catalog makesvalidate_catalog.pyfail withfor all three
used_byworkflows, and restoring it makes the gate green again. A validator that has never been seen to fail is not evidence.