Appearance
Search Route Rehearsals
Status: Pending.
Search-service currently has internal rebuild/search foundations, but it has no approved public gateway route rehearsal. This page is the guardrail for that gap: service agents may improve copied-index freshness and owner projection tests, but they must not promote or invent public search routes until a real legacy route is selected and mapped to search-service.
Current Mapping
/api/public/catalog* remains course-service-owned. The legacy route snapshot contains PublicCatalogController.catalog and PublicCatalogController.detail, and docs/architecture/legacy-api-map.md maps the current public catalog entries to course-service, not search-service.
Search-service may index copied COURSE, QUESTION, EXAM, and DOCUMENT documents from owner-service projection APIs. Copied index ownership is not enough to move a public catalog route to search-service.
No Search Route Table Yet
There must be no deploy/gateway/routes.search*.json file and no gateway route targeting search-service until an orchestrator-owned route mapping task names:
- the exact legacy controller route from
docs/contracts/legacy/legacy-route-snapshot.json - the target owner mapping in
docs/architecture/legacy-api-map.md - the non-default route table name
- the live/browser parity command
- the rollback proof command
Until that task exists, do not invent synthetic /api/search compatibility routes.
Verification
bash
make test-search-routesThe guard checks:
- default
/api/publicremainslegacy_proxy - no
routes.search*.jsonexample exists - no gateway route table targets
search-service - no route table introduces
/api/searchor forwards to/v1/search - legacy public catalog routes remain mapped to
course-service
Current Guard Recheck (2026-07-13)
make test-search-routes passed with the default route table unchanged. The separate four-source rebuild self-test also passed two paginated pages each for course, document, exam, and question-bank; its evidence is in output/qa/search-legacy-owner-rebuild-proof-20260713/. This is copied-index freshness evidence only. It does not select a legacy route, add a Gateway rehearsal, or provide browser proof for search-service.
Promotion Conditions
A future search route rehearsal can replace this pending guard only after:
- the legacy route and native target are explicitly mapped to
search-service - the route table is non-default and narrower than broad
/api/publicor fallback routes - scope and visibility rules are enforced at gateway/BFF or owner-service contracts
- browser/runtime parity evidence is attached
- rollback proof restores the default legacy route table