Skip to content

Rust #325: service catalog reads like Server 2.11 - #681

Merged
rmcdaniel merged 1 commit into
rust-325-train-oct22cfrom
rust-325-service-catalog
Oct 22, 2026
Merged

rmcdaniel merged 1 commit into
rust-325-train-oct22cfrom
rust-325-service-catalog

Conversation

@rmcdaniel

Copy link
Copy Markdown
Member

Part of #325. Stacked on the #675 train, which carries the 2.11.1 reference.

What

The eight service-catalog reads that published Server 2.11 added: GET /api/service-catalog/{endpoints|services|operations|calls} and GET /api/service-catalog/{…}/{id}. Waterline's service catalog view calls them; native answered 501 rust_capability_not_implemented.

Native never holds catalog rows:

  • takeover refuses a PHP database with services, endpoints, operations or service calls (upgrade_source_services_unsupported / upgrade_source_service_calls_unsupported);
  • native has no path that writes them.

So PHP's answers for an empty catalog are exact for native:

  • Lists: 200 pages with empty data, the requested page and per_page (defaults 1 and 50), total: 0, last_page: 1 and the resolved namespace. Calls also report scope, buckets, outcome and the status and outcome vocabularies.

  • Identities: 404 catalog_object_not_found.

  • Filters, validated like PHP's filters():

    • an unsupported filter, including page on a detail;
    • a non-integer or out-of-range page / per_page (adds Laravel's between rule);
    • an empty identity filter;
    • an unknown scope, status, outcome or bucket;
    • a bucket that disagrees with status_bucket.

    Each answers 422 validation_failed with Laravel's messages.

  • Namespace selection, version header and auth: the existing control-plane admission handles them. The catalog joins the named-namespace allowlist for GET.

Evidence

  • Measured first on the published 2.11.1 image: 37 requests covering every route, every filter refusal and namespace selection by header, query and default, case-folded. Native answers all 37 identically (status and body).
  • The service-catalog fixture encodes those 37 answers against the fixture's own namespace, with a contract and 18 unit tests (15 mutations).
  • Native unit tests for paging, refusals and not-found.
  • Local parity step against PHP 2.11.1: see below.

Local parity step against PHP 2.11.1: PHP, embedded (explicitly inapplicable) and native each pass every fixture, including service-catalog, and the three-way comparison passes.

Waterline's service catalog view reads GET /api/service-catalog/
{endpoints,services,operations,calls}[/{id}], which native answered with
501. Native never holds catalog rows: takeover refuses a database with
services, endpoints, operations or service calls, and native has no path
that writes them. Every list is PHP's empty page and every identity its
catalog_object_not_found, after PHP's validation of the filters, which
adds Laravel's between rule.

The service-catalog fixture records 37 requests against the published
reference: every route, each filter refusal and namespace selection.
@rmcdaniel
rmcdaniel merged commit dfb03f6 into rust-325-train-oct22c Oct 22, 2026
5 checks passed
@rmcdaniel
rmcdaniel deleted the rust-325-service-catalog branch October 22, 2026 22:10
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