Skip to content

route: remove two host advantages instead of disclosing them - #661

Merged
MikeyPetrillo merged 1 commit into
mainfrom
claude/sweet-brown-i99jl3
Aug 2, 2026
Merged

route: remove two host advantages instead of disclosing them#661
MikeyPetrillo merged 1 commit into
mainfrom
claude/sweet-brown-i99jl3

Conversation

@MikeyPetrillo

Copy link
Copy Markdown
Owner

Follow-up to #660, which published three rules favouring our own catalog on the theory that a checkable small claim beats an unverifiable large one. Right instinct, applied one step too late: two of the three did not need to exist.

Removed

The per-seller diversity cap now applies to our catalog on the same terms as every external seller's. The exemption was justified on the reasoning that capping the host pushes buyers toward less-vetted externals. Measured over 30 representative queries at top=12, our catalog took 8.3% of slots and the exemption bound on exactly one query. It was buying almost nothing and costing the thing the endpoint exists for.

Skipped only for include=local, where there is one seller by definition and a per-seller cap would truncate the answer to a third. Verified: include=local&top=12 still returns 12.

The listing-injection filter now runs against our rows too. It was external-only because the filter defends against seller-controlled text and we trust our own, but "we are exempt from our own safety check" is a rule that favours the host, and a catalog entry of ours that tripped it would be a bug worth seeing rather than an exception worth granting. Verified live: all 526 tools still findable by their own slug, none filtered.

Kept, and still disclosed

Our own health is asserted as 1 rather than measured, because the crawler never probes itself and there is no honest way to synthesise a crawl history for ourselves on the router's hot path. Every result carries why.healthSource so an asserted 1 is never mistaken for a measured one.

The neutrality block went from three entries to one, by fixing rather than explaining.

Verification

  • 80 assertions in scripts/test-discovery-note.js, in CI
  • The tests now guard the removals as well as the disclosure. Three mutations, all killed: restoring the cap exemption, making the filter external-only again, and disarming the filter entirely
  • The filter guard pins both directions — no ordinary tool description of ours trips it, and a real injection attempt still does — so making it symmetric cannot have quietly disarmed it
  • Sweeps clean: 210 strict / 296 lenient tools, 526/526 through MCP

… of disclosing them

The previous commit published three rules that favoured our own catalog on the
theory that a checkable small claim beats an unverifiable large one. That was
the right instinct applied one step too late: two of the three did not need to
exist.

REMOVED - the per-seller diversity cap now applies to our catalog on the same
terms as every external seller's. The exemption was justified on the reasoning
that capping the host pushes buyers toward less-vetted externals. Measured over
30 representative queries at top=12, our catalog took 8.3% of slots and the
exemption actually bound on ONE query. It was buying almost nothing and costing
the thing the endpoint exists for. Skipped only for include=local, where there
is one seller by definition and a per-seller cap would truncate the answer to a
third; verified include=local still returns 12 of 12.

REMOVED - the listing-injection filter now runs against our rows too. It was
external-only because the filter defends against seller-controlled text and we
trust our own, but "we are exempt from our own safety check" is a rule that
favours the host, and a catalog entry of ours that tripped it would be a bug
worth seeing rather than an exception worth granting. Verified live: all 526
tools still findable by their own slug, none filtered.

KEPT AND STILL DISCLOSED - our own health is asserted as 1 rather than
measured, because the crawler never probes itself and there is no honest way to
synthesise a crawl history for ourselves on the router's hot path. Every result
carries why.healthSource so an asserted 1 is never mistaken for a measured one.

So the disclosure went from three entries to one, by fixing rather than
explaining. Fixing an asymmetry beats publishing it.

80 assertions. The tests now guard the removals as well as the disclosure:
restoring the cap exemption, making the filter external-only again, and
disarming the filter entirely each kill assertions. The filter guard pins both
directions - no ordinary tool description of ours trips it, and a real
injection attempt still does, so making it symmetric cannot have quietly
disarmed it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@MikeyPetrillo
MikeyPetrillo merged commit 6955a79 into main Aug 2, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant