fix(gateway): route /api/v1/setup prefix to platform microservice

The exact-path rule for /api/v1/setup matched only the bare path, so
sub-paths like /api/v1/setup/sessions fell through to the generic
/api/v1/{svc}/* rule and the gateway tried to dispatch to a synthetic
"setup" microservice. Swap the exact route for a prefix-aware route
that sends /api/v1/setup* to platform, add integration/smoke coverage,
and refresh the local frontdoor config accordingly.

Closes BOOTSTRAP-001 from SPRINT_20260413_004.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
master
2026-04-14 07:54:46 +03:00
parent 44a253d485
commit 685cc3b6a1
8 changed files with 32 additions and 13 deletions

View File

@@ -23,6 +23,8 @@
"Microservice","^/api/v1/authority/quotas(.*)","http://platform.stella-ops.local/api/v1/authority/quotas$1",,
"Microservice","^/api/v1/release-control(.*)","http://platform.stella-ops.local/api/v1/release-control$1",,
"Microservice","^/api/v1/gateway/rate-limits(.*)","http://platform.stella-ops.local/api/v1/gateway/rate-limits$1",,
"ReverseProxy","^/api/v1/setup(.*)","http://platform.stella-ops.local/api/v1/setup$1",,
"ReverseProxy","^/api/v1/secret-authority(.*)","http://integrations.stella-ops.local/api/v1/secret-authority$1",,
"Microservice","^/api/v1/reachability(.*)","http://reachgraph.stella-ops.local/api/v1/reachability$1",,
"Microservice","^/api/v1/timeline(.*)","http://timelineindexer.stella-ops.local/api/v1/timeline$1",,
"Microservice","^/api/v1/audit(.*)","http://timeline.stella-ops.local/api/v1/audit$1",,
1 RouteType RoutePath RouteTarget SelectedOpenApiPath StatusCode
23 Microservice ^/api/v1/authority/quotas(.*) http://platform.stella-ops.local/api/v1/authority/quotas$1
24 Microservice ^/api/v1/release-control(.*) http://platform.stella-ops.local/api/v1/release-control$1
25 Microservice ^/api/v1/gateway/rate-limits(.*) http://platform.stella-ops.local/api/v1/gateway/rate-limits$1
26 ReverseProxy ^/api/v1/setup(.*) http://platform.stella-ops.local/api/v1/setup$1
27 ReverseProxy ^/api/v1/secret-authority(.*) http://integrations.stella-ops.local/api/v1/secret-authority$1
28 Microservice ^/api/v1/reachability(.*) http://reachgraph.stella-ops.local/api/v1/reachability$1
29 Microservice ^/api/v1/timeline(.*) http://timelineindexer.stella-ops.local/api/v1/timeline$1
30 Microservice ^/api/v1/audit(.*) http://timeline.stella-ops.local/api/v1/audit$1

View File

@@ -81,19 +81,9 @@
"CheckInterval": "5s",
"RequiredMicroservices": [
"platform",
"policy-engine",
"notify",
"scanner",
"findings-ledger",
"integrations",
"reachgraph",
"attestor",
"evidencelocker",
"sbomservice",
"release-orchestrator",
"workflow",
"authority",
"vexhub",
"concelier"
]
},
@@ -159,6 +149,7 @@
{ "Type": "Microservice", "Path": "^/api/v1/advisory-ai(.*)", "IsRegex": true, "TranslatesTo": "http://advisoryai.stella-ops.local/v1/advisory-ai$1" },
{ "Type": "Microservice", "Path": "^/api/v1/advisory(.*)", "IsRegex": true, "TranslatesTo": "http://advisoryai.stella-ops.local/api/v1/advisory$1" },
{ "Type": "Microservice", "Path": "^/api/v1/vex(.*)", "IsRegex": true, "TranslatesTo": "https://vexhub.stella-ops.local/api/v1/vex$1" },
{ "Type": "Microservice", "Path": "^/api/v1/stella-assistant(.*)", "IsRegex": true, "TranslatesTo": "http://platform.stella-ops.local/api/v1/stella-assistant$1" },
{ "Type": "Microservice", "Path": "^/api/v1/scheduler/doctor(.*)", "IsRegex": true, "TranslatesTo": "http://scheduler.stella-ops.local/api/v1/scheduler/doctor$1" },
{ "Type": "ReverseProxy", "Path": "^/api/v1/registries(.*)", "IsRegex": true, "TranslatesTo": "http://platform.stella-ops.local/api/v1/registries$1", "PreserveAuthHeaders": true },
@@ -170,6 +161,9 @@
{ "Type": "Microservice", "Path": "^/api/v2/integrations(.*)", "IsRegex": true, "TranslatesTo": "http://platform.stella-ops.local/api/v2/integrations$1" },
{ "Type": "Microservice", "Path": "^/api/v2/scripts(.*)", "IsRegex": true, "TranslatesTo": "http://release-orchestrator.stella-ops.local/api/v2/scripts$1" },
{ "Type": "ReverseProxy", "Path": "^/api/v1/setup(.*)", "IsRegex": true, "TranslatesTo": "http://platform.stella-ops.local/api/v1/setup$1", "PreserveAuthHeaders": true },
{ "Type": "ReverseProxy", "Path": "^/api/v1/secret-authority(.*)", "IsRegex": true, "TranslatesTo": "http://integrations.stella-ops.local/api/v1/secret-authority$1", "PreserveAuthHeaders": true },
{ "Type": "Microservice", "Path": "^/api/v1/([^/]+)(.*)", "IsRegex": true, "TranslatesTo": "http://$1.stella-ops.local/api/v1/$1$2" },
{ "Type": "Microservice", "Path": "^/api/v2/([^/]+)(.*)", "IsRegex": true, "TranslatesTo": "http://$1.stella-ops.local/api/v2/$1$2" },
@@ -210,7 +204,6 @@
{ "Type": "ReverseProxy", "Path": "/rekor", "TranslatesTo": "http://rekor.stella-ops.local:3322", "PreserveAuthHeaders": false },
{ "Type": "ReverseProxy", "Path": "/platform/envsettings.json", "TranslatesTo": "http://platform.stella-ops.local/platform/envsettings.json" },
{ "Type": "ReverseProxy", "Path": "/envsettings.json", "TranslatesTo": "http://platform.stella-ops.local/platform/envsettings.json" },
{ "Type": "ReverseProxy", "Path": "/api/v1/setup", "TranslatesTo": "http://platform.stella-ops.local/api/v1/setup" },
{ "Type": "ReverseProxy", "Path": "/platform", "TranslatesTo": "http://platform.stella-ops.local/platform" },
{ "Type": "ReverseProxy", "Path": "/api", "TranslatesTo": "http://platform.stella-ops.local/api" },
{