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

stacklok / toolhive / 30004792349
69%

Build:
DEFAULT BRANCH: main
Ran 23 Jul 2026 11:59AM UTC
Jobs 1
Files 819
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

23 Jul 2026 11:52AM UTC coverage: 69.186% (+0.05%) from 69.136%
30004792349

push

github

web-flow
Add project-level skills lock file schema package (#5892)

* Add project-level skills lock file schema package

RFC THV-0080 pins every project-scoped skill install to a
committed toolhive.lock.yaml so teams get reproducible installs
across machines, the same guarantee package-lock.json/Cargo.lock
provide elsewhere. This package defines the v1 schema (entries,
content digest, requiredBy) with no callers yet; skillsvc wiring
follows in a later PR of the stack.

Access is confined to the validated project root via os.Root
(OS-enforced containment), not string validation alone.

* Fix content-digest path forgery and unvalidated lock writes

Path validation rejected traversal but not control characters, so a
crafted Path containing an embedded NUL and newline could reproduce
the byte stream of an unrelated multi-file tree and collide with its
digest. Save also never validated before writing, so a caller bug
could persist an invalid lock file with no recovery through the
package API. Also normalize repeated "./" prefixes idempotently.

* Harden lock file schema against skew, forgery, and races

Address panel-review findings on the schema package: unknown fields
written by a newer binary were silently stripped on the next Save
(breaking the deferred Sigstore fields before they exist) — round-trip
them via inline maps; resolvedReference was completely unvalidated
despite being the exact value sync fetches from without re-resolving —
constrain it syntactically (strict OCI or git:// parse, no control
characters, bounded length); Save used a fixed temp filename with no
lock, so two direct concurrent calls could promote or destroy each
other's half-written file — use a per-call random suffix; and a
hand-edited requiredBy ring of non-explicit entries validated cleanly
yet could never be cascade-removed — reject cycles at validation.
Also document the frozen digest algorithm's file-mode/symlink
limitations.

291 of 331 new or added lines in 3 files covered. (87.92%)

14 existing lines in 5 files now uncovered.

77172 of 111543 relevant lines covered (69.19%)

75.09 hits per line

Uncovered Changes

Lines Coverage ∆ File
28
80.56
pkg/skills/lockfile/lockfile.go
6
89.29
pkg/skills/lockfile/contentdigest.go
6
95.42
pkg/skills/lockfile/validation.go

Coverage Regressions

Lines Coverage ∆ File
6
76.15
-5.5% pkg/secrets/keyring/keyctl_linux.go
2
94.0
-1.33% pkg/authserver/storage/cimd_decorator.go
2
96.05
0.0% pkg/authserver/storage/memory.go
2
82.29
-0.21% pkg/vmcp/composer/workflow_engine.go
2
67.21
-0.17% pkg/workloads/manager.go
Jobs
ID Job ID Ran Files Coverage
1 30004792349.1 23 Jul 2026 11:59AM UTC 819
69.19
GitHub Action Run
Source Files on build 30004792349
  • Tree
  • List 819
  • Changed 7
  • Source Changed 0
  • Coverage Changed 7
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #30004792349
  • 3441e75c on github
  • Prev Build on main (#30002443191)
  • Next Build on main (#30010680762)
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