Skip to content

fix(ui): page the conformance self-fetch and never cache an empty registry - #464

Open
angela-helios wants to merge 1 commit into
mainfrom
fix/460-conformance-paging
Open

fix(ui): page the conformance self-fetch and never cache an empty registry#464
angela-helios wants to merge 1 commit into
mainfrom
fix/460-conformance-paging

Conversation

@angela-helios

Copy link
Copy Markdown
Contributor

Closes #460

Two robustness fixes to the UI's conformance self-fetch, both found by the #448 sweep and the #449 matrix validation:

Paging (#460). The fetch asked for _count=10000 in one page and trusted the answer — but the server caps _count at 1000, so the R4 registry (1,377 SearchParameters) was silently served as 1,000 and the viewer under-reported with no trace. The fetch now follows next links (rebased onto the loopback base, since advertised links carry the server's public base URL) and fails the whole fetch if any page fails — a silently partial registry is precisely the bug.

Empty is not cached (#462, UI facet). The catalogs cached any successful fetch for the process lifetime, including an empty one. On sqlite-elasticsearch, startup seeding races the ES sync, the first request sees an empty (but 200) answer, and the pages stayed broken forever — 18 browser tests failed as a cluster in run 30582018605. Empty successes are now served for their request only, exactly like failures already were, so the pages self-heal once the index catches up. The server-side facet of #462 (CDs never syncing at all on that leg) stays open.

Tests: next-link discovery + rebase units, a paging round-trip against an in-process axum server that advertises its next page under a foreign base URL, and warming-source tests on both catalogs (first fetch empty → second request re-fetches and sees data). helios-ui 110 tests green.

…istry

The self-fetch asked for 10000 in one page and trusted the answer, but a
server capping _count at 1000 silently truncated the registry — 1377 R4
SearchParameters served as 1000, and the viewer under-reported without a
trace (#460). The fetch now follows next links (rebased onto the
loopback base, since the advertised link carries the server's public
base URL) and fails the whole fetch if any page fails, because a
silently partial registry is the bug this exists to fix.

The catalogs also stop caching an *empty success* (#462): storage seeds
the conformance resources at startup, so an empty search answer means
the backend's index has not caught up (a composite's ES sync), and
pinning it kept the pages broken long after the sync landed. Empty is
now served for its request only, like a failure already was.

Closes #460
@claude

claude Bot commented Jul 31, 2026

Copy link
Copy Markdown

Code review

No issues found. Checked for bugs and CLAUDE.md compliance.

@codecov

codecov Bot commented Jul 31, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 95.50562% with 4 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
crates/ui/src/conformance.rs 94.20% 4 Missing ⚠️

📢 Thoughts on this report? Let us know!

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.

ui: the conformance self-fetch is silently truncated at the 1000 _count cap — the SearchParameter viewer shows 1000 of 1377

2 participants