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

stacklok / toolhive / 30355557706
70%

Build:
DEFAULT BRANCH: main
Ran 28 Jul 2026 11:45AM UTC
Jobs 1
Files 851
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

28 Jul 2026 11:37AM UTC coverage: 69.818% (+0.05%) from 69.773%
30355557706

push

github

web-flow
Resolve aggregator conflicts for resources, templates and prompts (#6075)

* Resolve resource, template, and prompt conflicts

The vMCP aggregator resolved name conflicts for tools only; resources,
resource templates and prompts were plain-appended across backends, so
duplicate identities appeared in the aggregated lists undiagnosed while
MergeCapabilities' URI/name-keyed routing tables silently collapsed each
duplicate to a nondeterministically-chosen backend for reads.

Resolve the remaining three types with per-type policies. Prompt names
are names: prompts/get already translates the advertised name back to
the backend's own via GetBackendCapabilityName, so colliding prompts
are losslessly renamed to {backendID}_{name} for every collider.
Resource URIs and template strings are locators the client passes back
verbatim (reads, subscriptions, completion refs, embedded resource
links), so they are never rewritten: a duplicate is advertised once,
owned by the first backend in sorted-backend-ID order, and later
copies are dropped with a warning. Backends are iterated in sorted-ID
order and MergeCapabilities gains first-wins guards, so collision
outcomes and routing are deterministic across runs.

The Modern paginator keeps its collision-safe cursor even though
aggregated keys are now unique: it is generic and must not depend on a
caller invariant. Tools resolution is unchanged.

Closes #6060

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GvBj7nNWqDQ3rKYNeY6aam

* Prefix all vMCP prompts with their backend ID

Review of #6075 found that collision-only prompt renaming made the
advertised name depend on group membership, and the advertised name is
what Cedar authorizes on (Prompt::"<advertised name>"): an unrelated
backend joining with the same prompt name detached existing permit and
forbid policies, the forbid case failing open. Rename every prompt
unconditionally instead, honouring con... (continued)

186 of 198 new or added lines in 5 files covered. (93.94%)

5 existing lines in 2 files now uncovered.

81547 of 116799 relevant lines covered (69.82%)

97.37 hits per line

Uncovered Changes

Lines Coverage ∆ File
11
92.36
2.87% pkg/vmcp/aggregator/default_aggregator.go
1
78.57
-2.28% pkg/vmcp/aggregator/prefix_resolver.go

Coverage Regressions

Lines Coverage ∆ File
3
81.26
0.0% pkg/transport/proxy/httpsse/http_proxy.go
2
61.91
0.09% pkg/workloads/manager.go
Jobs
ID Job ID Ran Files Coverage
1 30355557706.1 28 Jul 2026 11:45AM UTC 851
69.82
GitHub Action Run
Source Files on build 30355557706
  • Tree
  • List 851
  • Changed 11
  • Source Changed 7
  • Coverage Changed 9
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #30355557706
  • de1953e2 on github
  • Prev Build on main (#30352921632)
  • Next Build on main (#30356783315)
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