fix(catalog): search ranks the real server first against the live registry (Spec fix-catalog-rank) - #1469
Merged
Conversation
… and name-prefix queries (Spec fix-catalog-rank) The official registry's search matches server.name only, in byte order, 100 per page, so a typed query never reached the real server (audit C1). Rank now puts a name-match tier first, a typed query fetches the owner and name-prefix queries too and ranks before truncating, verified means the publisher owns the repository, GitHub stars count only for the publisher's own repo, and a fetch that outlives the 5 s budget warms the listing cache in the background.
…ead of an Official badge (Spec fix-catalog-rank)
…75 and rank wording (Spec fix-catalog-rank)
Deploying mcpproxy-docs with
|
| Latest commit: |
fa25b51
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://e4cd342a.mcpproxy-docs.pages.dev |
| Branch Preview URL: | https://fix-catalog-live-ranking.mcpproxy-docs.pages.dev |
…ds a real owner match R3.1 (medium, confirmed): when the main official-registry query landed inside the 5s budget but an expansion was still running, SearchAll returned no hits and marked the source unavailable. The progress snapshot now includes the landed main query, and a budget expiry after the main query landed returns its hits with no error (D36.2); the fetch keeps warming the cache behind. O1 (medium, confirmed): publisherOwnsRepo's substring rule let com.hub verify against github/github-mcp-server. A domain label must now equal the repo owner, be a whole -/_ token of it, or be a 5+ character brand with a prefix or suffix of at most 4 characters (notion of makenotion). Spec D36.5 and the REST contract text updated.
…put cannot block on Windows
Contributor
📦 Build ArtifactsWorkflow Run: View Run Available Artifacts
How to DownloadOption 1: GitHub Web UI (easiest)
Option 2: GitHub CLI gh run download 37025007012 --repo smart-mcp-proxy/mcpproxy-go
|
|
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
11 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changes for users
Catalog search for
githubnow puts GitHub's own server first on every surface. Before, the official registry's alphabeticalio.github.*page decided what was fetched, so the real server never appeared.limit. Results are ordered by how well the name matches (the publisher equals the query, an exact name, a name prefix, a name word, a substring or description, and last a match through the namespace alone), then official source, verified publisher, popularity, title. A namespace-only match such asio.github.06ketan/slideshotranks last..github/) and name-prefix (/github) queries, one page each, concurrently. The registry only matchesserver.name, so a multi-word query also searches its hyphenated phrase. If the main query times out, the expansion hits are still shown.verifiedis narrower: it is true for a built-in official-protocol entry only when the publisher's namespace owns the source repository. A re-publisher or an entry that names someone else's repo is not verified.officialkeeps meaning "from a built-in source".limitrepos, best-ranked first, so one search cannot spend the hourly budget.fetchand Dockermcp/fetchare one entry).catalog searchhelp text describes the new order. No flag or column changed. REST and MCP wire shapes are unchanged (no field added or removed); only the values ofverified,titleanddescriptionand the result order change.Audit findings fixed
C1 (catalog ranking), found not fixed in the final done-check. Also closes the SC-008 gap: the old hand-written fixture hid the live bug, so the fixture is now recorded from the live registry.
Spec
specs/109-ux-navigation-consistency(spec US5, FR-060, FR-061, SC-008, edge cases; data-model §9; contracts; research D36; plan; tasks Phase 16 T166-T175; quickstart recipe; parity matrix row 14; acceptance index SC-008). Spec 110 gets an amendment line. Docs:docs/api/rest-api.md,docs/cli/catalog-commands.md,docs/features/catalog-popularity.md.Tests added
internal/registries:recorded_registry_test.go(fake registry semantics, and a test that proves the live bug on the recorded corpus),official_catalog_test.go,search_catalog_test.go,catalog_hit_signals_test.go,catalog_rank_tier_test.go,catalog_typed_test.go,catalog_warm_behind_test.go(run under-race -count=20andGOMAXPROCS=1).catalog_github_order.jsonis the union of three real registry responses recorded 2026-10-02 (RECORD_LIVE_REGISTRY=1re-records it). The REST, MCP, CLI, vitest and XCTest legs replay it.catalog-card-signals.spec.ts, extendedadd-server-catalog.spec.tsandcatalog-order-parity.spec.ts. macOS:testCardShowsVerifiedNotOfficialBadgeand extended parity assertions.Deviations from the plan (recorded in research D36)
io.github.<user>, otherwise the second DNS label, not the last label. The last-label rule madecom.quranmajeed.time/prayer-timesan owner match fortimeand ranked it above the reference and Dockertime; this also fixes the publisher shown on the card.starsBorrowed(the negation of "eligible"), so hand-built hits stay eligible and existing tests keep their meaning.catalog-order-parity.spec.tscounted everycatalog-result-*node as a card; its filter now also excludes the new publisher and popularity ids.TestSearchAll_PerformanceBudgetcloses its hung server beforeClose, because timed-out fetches now keep their connections until released.Follow-ups (low)
search_serverstool description still says "official-first"; it is frozen by three schema goldens, so changing it means regenerating them.