• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

stacklok / toolhive / 32976581648
70%

Build:
DEFAULT BRANCH: main
Ran 26 Aug 2026 01:58PM UTC
Jobs 1
Files 902
Run time 3min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

26 Aug 2026 01:50PM UTC coverage: 69.55% (+0.05%) from 69.504%
32976581648

push

github

web-flow
Block plugin upgrades that change the signer identity (#6401)

Block plugin upgrades that change the signer

An upgrade re-resolves a mutable source, which is exactly when a
compromised or transferred publisher would slip a differently-signed
artifact into the pinned trust chain (RFC THV-0080). Upgrade planning
now probes the candidate's signer identity — chain-of-trust
verification only, no install — and blocks with a signer-change-blocked
status when it differs from the identity the lock file records, when a
pinned certificate field (repository ref or runner class) diverges, or
when the candidate is unsigned. Blocked plans carry no pinned
reference, exactly like ref changes: preview reports them,
fail-on-changes counts them as changes, and a plain upgrade exits with
the policy-rejection code pointing at --allow-signer-change.

The explicit override verifies the candidate chain-of-trust-only and
re-records the newly observed identity in the lock entry, so the
rotation is deliberate and diff-visible rather than silent. Entries
with no recorded provenance — including those marked unsigned — are
unaffected and skip the probe entirely.

Git candidates carry their commit signature material out of resolution
so the probe verifies the exact commit being planned without a second
clone. That material is bounded the same way verifyGitInstall bounds
it: the probe runs on every guarded upgrade, including the plan-only
modes that install nothing, so leaving it unbounded would let a hostile
repository spend our CPU without ever reaching an install.

Part of #6300.

Signed-off-by: Samuele Verzi <samu@stacklok.com>

74 of 86 new or added lines in 5 files covered. (86.05%)

3 existing lines in 1 file now uncovered.

75990 of 109259 relevant lines covered (69.55%)

91.26 hits per line

Uncovered Changes

Lines Coverage ∆ File
7
40.57
23.9% cmd/thv/app/ai_plugin_upgrade.go
5
68.75
4.21% pkg/plugins/pluginsvc/upgrade.go

Coverage Regressions

Lines Coverage ∆ File
3
96.18
-0.57% pkg/authz/authorizers/cedar/core.go
Jobs
ID Job ID Ran Files Coverage
1 32976581648.1 26 Aug 2026 01:58PM UTC 902
69.55
GitHub Action Run
Source Files on build 32976581648
  • Tree
  • List 902
  • Changed 10
  • Source Changed 6
  • Coverage Changed 10
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #32976581648
  • ddf38443 on github
  • Prev Build on main (#32974088242)
  • Next Build on main (#32988628763)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc