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

stacklok / toolhive / 30358573127
70%

Build:
DEFAULT BRANCH: main
Ran 28 Jul 2026 12:28PM UTC
Jobs 1
Files 853
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 12:21PM UTC coverage: 69.881% (-0.005%) from 69.886%
30358573127

push

github

web-flow
Drop ambiguous prompt names instead of failing aggregation (#6099)

Drop ambiguous prompt names instead of erroring

An advertised prompt name with no defined owner — two (backendID, name)
pairs composing to the same string — failed the whole aggregation. That
error propagated out of ResolveConflicts before the already-computed
tools, resources and templates were returned, so one ambiguous prompt
name took down tools/list, resources/list, resource-templates/list,
prompts/list, Discover's presence flags and backend visibility for the
entire group. Errors are never cached, so every request re-swept every
backend and failed again while the condition persisted. Reaching it
needs no conflict-resolution config, only an unlucky combination of
operator-chosen workload names and backend-chosen prompt names.

Drop every prompt claiming an ambiguous name instead, logging the name,
the colliding backends and their original prompt names at ERROR.
Dropping all claimants rather than only the loser (the tool precedent)
is what makes this safe: a survivor would inherit the ambiguous name
and with it any policy written for the prompt it collided with, since
Cedar authorizes on the advertised name alone. Advertised by nobody,
every permit and forbid on the name is vacuous and the rest of the
group keeps serving.

Also scope the header's stability invariant to the (backendID, name)
pair it actually holds for, and state the caveat it does not cover:
under priority, whoever wins a shared bare name inherits every permit
written for it. forbid still fails closed because the priority loser is
dropped rather than aliased — record that the drop is deliberate, so
the obvious future "improvement" of re-prefixing the loser does not
reopen the fail-open.

Addresses post-merge review feedback on #6075.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

26 of 26 new or added lines in 2 files covered. (100.0%)

24 existing lines in 6 files now uncovered.

81675 of 116878 relevant lines covered (69.88%)

98.47 hits per line

Coverage Regressions

Lines Coverage ∆ File
6
76.15
-5.5% pkg/secrets/keyring/keyctl_linux.go
6
66.98
-0.17% pkg/workloads/manager.go
4
87.79
-2.33% pkg/transport/proxy/transparent/sse_response_processor.go
3
81.26
0.0% pkg/transport/proxy/httpsse/http_proxy.go
3
91.65
-0.71% pkg/vmcp/aggregator/default_aggregator.go
2
93.94
-6.06% pkg/foreach/foreach.go
Jobs
ID Job ID Ran Files Coverage
1 30358573127.1 28 Jul 2026 12:28PM UTC 853
69.88
GitHub Action Run
Source Files on build 30358573127
  • Tree
  • List 853
  • Changed 10
  • Source Changed 2
  • Coverage Changed 10
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #30358573127
  • 919479da on github
  • Prev Build on main (#30358418301)
  • Next Build on main (#30358722331)
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