Files
git.stella-ops.org/docs/modules/router/rollout-acceptance-20260222.md
master 6578c82602 Eliminate legacy gateway container (consolidate into router-gateway)
The gateway service was a redundant deployment of the same
StellaOps.Gateway.WebService binary already running as router-gateway.
It served no unique purpose — all traffic is handled by router-gateway
(slot 0). This removes the container, its route table entries, nginx
proxy blocks, health/quota stubs, and redirects STELLAOPS_GATEWAY_URL
to router.stella-ops.local so the Angular frontend resolves API base
URLs through the canonical frontdoor.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 03:50:16 +02:00

3.6 KiB

Router Rollout Acceptance Package (2026-02-22)

Scope

  • Program closeout for Router sprints 047-050.
  • Dual-mode verification:
  • Default microservice mode (router-gateway-local.json).
  • Reverse-proxy fallback mode (router-gateway-local.reverseproxy.json).

Command Matrix

  • Image refresh:
  • docker build ... -t stellaops/scanner-web:dev
  • docker build ... -t stellaops/integrations-web:dev
  • (stellaops/gateway:dev removed — consolidated into router-gateway)
  • docker build ... -t stellaops/doctor-web:dev
  • Clean bootstrap:
  • devops/compose/scripts/router-mode-redeploy.ps1 -Mode reverseproxy
  • devops/compose/scripts/router-mode-redeploy.ps1 -Mode microservice
  • Route smoke:
  • devops/compose/scripts/router-routeprefix-smoke.ps1
  • Conformance tests:
  • dotnet test src/Router/__Tests/StellaOps.Router.AspNet.Tests/StellaOps.Router.AspNet.Tests.csproj
  • dotnet test src/Router/__Tests/StellaOps.Router.Gateway.Tests/StellaOps.Router.Gateway.Tests.csproj
  • dotnet test src/Router/__Tests/StellaOps.Gateway.WebService.Tests/StellaOps.Gateway.WebService.Tests.csproj

Evidence Artifacts

  • devops/compose/openapi_current.json
  • devops/compose/openapi_reverse.json
  • devops/compose/openapi_routeprefix_smoke_microservice.csv
  • devops/compose/openapi_routeprefix_smoke_reverseproxy.csv
  • devops/compose/openapi_quality_report_microservice.json
  • devops/compose/openapi_quality_report_reverseproxy.json
  • devops/compose/perf_microservice.json
  • devops/compose/perf_reverseproxy.json
  • devops/compose/perf_mode_comparison.json
  • devops/compose/timeline.json
  • devops/compose/timeline_schemas.json
  • devops/compose/openai_adapter.json
  • devops/compose/llm_providers.json

Acceptance Results

Microservice mode:

  • Route smoke summary: 200=30,302=4,400=25,401=14,403=2,404=3,410=1
  • Route smoke blocker status: 500=0
  • OpenAPI counts: paths=1899, schemas=901
  • Timeline contract gate: 4 timeline operations with summary/description/security/timeouts/auth extensions.
  • Advisory AI adapter exposure: 2 LLM adapter operations in aggregated openapi.json; providers endpoint denies anonymous access (403).

Reverse mode:

  • Route smoke summary: 200=15,400=6,401=18,404=15
  • Route smoke blocker status: 500=0
  • OpenAPI counts: paths=1529, schemas=901
  • Reverse-proxy exception set remains explicit (/rekor, /platform, static SPA/error routes).

Security and authorization:

  • Gateway and Router conformance suites pass.
  • Identity-header spoofing protections covered in gateway test suite.
  • Authority claims refresh and effective-claim integration covered in Router gateway tests.

Performance Gate Decision

  • Baseline: reverse-proxy mode.
  • Candidate: microservice mode.
  • Comparison artifact: devops/compose/perf_mode_comparison.json.
  • Result:
  • openapi.json and timeline unauthorized path remained within acceptable local-dev drift.
  • Advisory AI adapter unauthorized path showed higher latency in microservice mode; accepted for now as non-blocking because error-rate and contract gates passed, with follow-up hardening item retained in Router backlog.

Rollback

  • Scripted mode rollback:
  • devops/compose/scripts/router-mode-redeploy.ps1 -Mode reverseproxy
  • Return to default:
  • devops/compose/scripts/router-mode-redeploy.ps1 -Mode microservice
  • The redeploy helper now auto-recovers transient unhealthy services (bounded retries) before declaring failure.

Final Runtime State

  • Default compose mode restored to microservice routing:
  • ROUTER_GATEWAY_CONFIG=./router-gateway-local.json
  • Timeline route /api/v1/timeline remains Type=Microservice with Valkey messaging transport.