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

stacklok / toolhive / 32973771746
71%

Build:
DEFAULT BRANCH: main
Ran 26 Aug 2026 01:30PM UTC
Jobs 1
Files 898
Run time 2min
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:21PM UTC coverage: 69.466% (+0.03%) from 69.432%
32973771746

push

github

web-flow
Re-verify stored plugin signatures during sync (#6399)

* Re-verify stored plugin signatures during sync

Plugin sync now re-verifies each managed entry's stored Sigstore bundle
against the identity recorded in the lock file — entirely offline, via
the embedded trust root — before an entry can count as current. A failed
re-verification is drift: check mode reports it (the CI gate covers
signatures like it covers content drift), and apply mode reinstalls from
the pinned reference, where install-time verification enforces the locked
identity and heals the stored state. An OCI entry recording a signer
identity without a stored bundle fails closed; git entries store no
bundle by design — their signature lives on the commit and is re-verified
when content is re-resolved.

Adoption back-fills provenance from the stored bundle when one exists;
otherwise adopting is the same trust decision as an unsigned install and
now requires the explicit --allow-unsigned exception (new flag on sync,
threaded through the API and Go client DTOs), recorded as unsigned in the
entry.

Part of #6300. Mirrors #6131 for skills.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Samuele Verzi <samu@stacklok.com>

* Bound stored plugin signature material

The Sigstore bundle persisted with an install and the commit payload and
gitsign signature a git install verifies are all attacker-influenced and
unbounded at their source: a registry serves whatever bundle it likes,
and git imposes no length limit on a commit message. Without a ceiling a
hostile plugin source can push a multi-MB blob into SQLite on every
install, which every subsequent sync then reads back for offline
re-verification.

Cap all three at capture time in verify.go, before the bytes reach
InstallOptions and the store, and reject rather than truncate — a
truncated bundle would fail to verify later and be indistinguishable
from tampering. The git payload and signature are checked before ... (continued)

75 of 81 new or added lines in 5 files covered. (92.59%)

6 existing lines in 3 files now uncovered.

75457 of 108625 relevant lines covered (69.47%)

89.62 hits per line

Uncovered Changes

Lines Coverage ∆ File
6
18.75
1.55% cmd/thv/app/ai_plugin_sync.go

Coverage Regressions

Lines Coverage ∆ File
2
93.75
-1.56% pkg/authserver/storage/cimd_decorator.go
2
72.94
-0.29% pkg/transport/proxy/streamable/streamable_proxy.go
2
59.21
-0.21% pkg/workloads/manager.go
Jobs
ID Job ID Ran Files Coverage
1 32973771746.1 26 Aug 2026 01:30PM UTC 898
69.47
GitHub Action Run
Source Files on build 32973771746
  • Tree
  • List 898
  • Changed 11
  • Source Changed 6
  • Coverage Changed 11
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #32973771746
  • 789f2fb8 on github
  • Prev Build on main (#32968008468)
  • Next Build on main (#32973875754)
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