[architect] refactor: remove orphaned keys/*.pub trust material + check-cosign-key-rotation.yml watchdog - #442
Open
kubestellar-hive[bot] wants to merge 1 commit into
Open
Conversation
…tchdog
keys/{fedora-ostree,projectbluefin-common,ublue-os-brew}.pub had no
consumer. Every verification site in this repo is keyless (Sigstore
--certificate-identity-regexp): scripts/verify_signatures.sh,
reusable-release-gate.yml, reusable-execute-release.yml and
bootc-build/sign-and-publish/action.yml. None take --key, and there is no
policy.json sigstoreSigned entry. Org-wide code search finds no external
consumer either.
The only reader was .github/workflows/check-cosign-key-rotation.yml, a
weekly job that diffed each key against its own upstream URL and filed
area/security + priority/p1 issues on drift -- a standing P1 alarm channel
attached to files that cannot affect any build, gate or release.
Removes both halves and adds tests/test_no_orphaned_trust_material.py so
the shape cannot return: any committed key file must be referenced by
something other than a rotation/drift/health watchdog. Verified
self-enforcing -- the guard fails on the pre-removal tree and passes after.
Refs #441
Signed-off-by: sec-check[bot] <sec-check[bot]@users.noreply.github.com>
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned Files
|
hanthor
approved these changes
Sep 2, 2026
hanthor
left a comment
Member
There was a problem hiding this comment.
Removes the orphaned cosign keys/*.pub trust material and the watchdog that referenced it. Verified via an org-wide code search that these keys have zero consumers anywhere in projectbluefin/* outside the deleted watchdog file itself, so this isn't dropping live functionality. The new regression-guard test is sound. CI green (7/7).
Generated by Claude Code
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.
Refactor
Claimed cluster:
keys/fedora-ostree.pub,keys/projectbluefin-common.pub,keys/ublue-os-brew.pub,.github/workflows/check-cosign-key-rotation.yml, and a newtests/test_no_orphaned_trust_material.py. Nothing else is touched. No other open PR in this repo claims any of these paths.Removes an orphaned subsystem: three vendored cosign public keys that no code reads, plus the weekly workflow that watched them.
Why these files are dead
Every signature-verification site in this repo is keyless — Sigstore/Fulcio with
--certificate-identity-regexpand--certificate-oidc-issuer https://token.actions.githubusercontent.com:scripts/verify_signatures.sh.github/workflows/reusable-release-gate.yml.github/workflows/reusable-execute-release.ymlbootc-build/sign-and-publish/action.ymlNone of them passes
--key, and there is nopolicy.json/containers-policysigstoreSignedentry anywhere in the tree. The one--keyoccurrence in the repo iscosign sign --key env://COSIGN_PRIVATE_KEYinsign-and-publish— a signing key from a secret, unrelated tokeys/.The sole reader of
keys/wascheck-cosign-key-rotation.yml, which fetched each key's upstream URL and compared it to the vendored copy. That is a watchdog over the keys, not a consumer of them. Org-wide code search for"actions/keys"and"fedora-ostree.pub"returns no hits outside this repo, andgrep -rn 'keys/' docs/ README.md AGENTS.md SECURITY.mdmatches nothing, so there is no documented external contract either.The keys arrived in #178 ("add org-wide cosign key rotation check") and the verifier half was never built. Since then the only commits in this cluster have been Renovate bumps of the
actions/checkoutpin inside the watchdog.Why removal rather than wiring them up
The watchdog runs every Monday 06:00 UTC and, on drift, opens an issue labelled
area/security/kind/bug/priority/p1. That is a standing generator of P1 security pages about files that cannot affect any build, gate, or release — it spends maintainer attention and erodes the meaning of the P1 security label. The workflow also holdsissues: writeon the factory repo solely to report on unused files.I checked all three upstream sources while preparing this; all three currently match. So the watchdog works correctly and still protects nothing. This is a design gap, not stale data.
Wiring the keys into
scripts/verify_signatures.shis deliberately not proposed: that script verifiesprojectbluefin-built images, which this factory signs keylessly. These are upstream base-image keys (Fedora ostree, ublue-os brew) — a different trust decision at a different pipeline stage. Substituting them would change verification semantics rather than remove debt. If key-based upstream verification is wanted, it should land together with its call site.Regression guard
tests/test_no_orphaned_trust_material.pyasserts every committed.pub/.pem/.gpg/.ascfile is referenced by something other than arotation/drift/healthwatchdog. Reintroducing vendored trust material is therefore only possible alongside a real consumer.Verified self-enforcing: the guard fails on the pre-removal tree (naming all three keys and identifying
check-cosign-key-rotation.ymlas their only, watchdog-only, reference) and passes after removal.Validation
python -m pytest tests/ --ignore=tests/bats→ 312 passed (311 pre-existing + 1 new).grep -rn 'check-cosign-key-rotation|key-rotation'over the tree → no dangling references remain.Refs #441
Filed by architect agent (ACMM L5 — hold-gated mode). Hold-gated: human review required.
— hive: agent=architect backend=copilot model=claude-opus-5