openova/products/catalyst
e3mrah 8e57abe9d0
fix(wizard): auto-redirect signed-in user to in-flight /sovereign/provision/<id> (closes #747) (#758)
A signed-in operator who refreshed /sovereign/wizard during a 15-minute
provisioning run lost the progress page and landed on Step 1 of an empty
form (caught live with otech90 on 2026-05-04). Wires the wizard route
to call the new GET /api/v1/deployments?owner=<email> endpoint and
redirect to /sovereign/provision/<id> when an in-flight deployment is
found.

Backend
- Add ListDeployments handler returning the slim shape (id, status,
  sovereignFQDN, region, startedAt, finishedAt, ownerEmail, adoptedAt,
  error). Filtered server-side by the X-User-Email header injected by
  RequireSession; ?owner= is a client hint that is silently overridden
  when the session header is set so a signed-in attacker cannot list
  someone else's rows. Adopted deployments are excluded — once the
  customer's Sovereign owns the cluster, the wizard redirect must not
  pull the operator back to Catalyst-Zero.
- Register GET /api/v1/deployments inside the RequireSession group.
- 5 new handler tests covering session-override, adopted exclusion,
  legacy-row exclusion, no-session passthrough, and ?owner= filtering.

Frontend
- New useInflightDeployment hook (TanStack Query, 30s stale time)
  returning {inflight, completed, all} buckets. inflight matches
  pending/provisioning/tofu-applying/tofu-plan/tofu-apply/
  flux-bootstrapping/cloud-init-waiting/phase1-watching plus
  ready-but-not-adopted. Picks the most-recent by startedAt.
- WizardPage redirect effect: when session.signedIn && inflight,
  navigate replace=true to /provision/<id> and render null while the
  redirect resolves. When the operator has only completed/wiped/failed
  rows, render a banner with a "View your previous deployments" link.
- New DeploymentsList page at /deployments (browser path
  /sovereign/deployments behind the Traefik strip-prefix). Single table:
  FQDN, status, started, finished, region. Each FQDN links back to
  /provision/<id>.
- 6 hook unit tests covering most-recent picking, ready-not-adopted,
  adopted exclusion (defense-in-depth), 401 graceful degrade, and
  enabled=false short-circuit.

Tests
- 5 backend handler tests pass (TestListDeployments_*)
- 6 frontend hook tests pass (useInflightDeployment.test.tsx)
- TS typecheck + Vite build clean
- Pre-existing TestAuthHandover_HappyPath panic + StepComponents
  catalog-data failures verified unrelated (fail on bare main)

Co-authored-by: hatiyildiz <269457768+hatiyildiz@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 17:30:36 +04:00
..
bootstrap fix(wizard): auto-redirect signed-in user to in-flight /sovereign/provision/<id> (closes #747) (#758) 2026-05-04 17:30:36 +04:00
chart deploy: update catalyst images to 5decebf 2026-05-04 13:17:56 +00:00
README.md feat(consolidation): Phase 1 — move Catalyst-Zero apps + CI + manifests into public monorepo 2026-04-28 12:08:09 +02:00

OpenOva Catalyst (composite Blueprint)

The umbrella Blueprint bp-catalyst-platform — composes the Catalyst control plane.

Status: Deployed. Updated: 2026-04-28.

This product directory contains:

  • chart/ — the Helm chart that deploys Catalyst-Zero on a Kubernetes cluster (and every franchised Sovereign).
  • chart/templates/{ui,api}-deployment.yaml + service + ingress — the catalyst-ui (React SPA wizard scaffold) and catalyst-api (Go bootstrap API) workloads.
  • chart/templates/sme-services/ — 11 manifests for the legacy SME backend services + the consolidated console, admin, marketplace UI workloads (sourced from core/{console,admin,marketplace}/).
  • chart/templates/marketplace-api/ — manifests for the Go marketplace-api backend (sourced from core/marketplace-api/).
  • bootstrap/{ui,api}/ — the source code for catalyst-ui and catalyst-api (deployed via the catalyst-build CI workflow).

For the unified architecture and the wizard's target shape, see docs/PROVISIONING-PLAN.md, docs/ARCHITECTURE.md, and docs/SOVEREIGN-PROVISIONING.md.


How Catalyst-Zero is deployed today

A Flux Kustomization on the Catalyst-Zero cluster (Contabo k3s) reconciles products/catalyst/chart/templates/ from this public repo. CI workflows (.github/workflows/{catalyst,console,admin,marketplace,marketplace-api}-build.yaml) build and push images on every push to main, then the deploy step pins the image SHA into the corresponding manifest in this directory and commits back. Flux picks up the commit and rolls the deployment.

Image registry: ghcr.io/openova-io/openova/{catalyst-ui,catalyst-api,console,admin,marketplace,marketplace-api}:<sha>.

Migration status (per docs/PROVISIONING-PLAN.md)

Component Source location Image Status
catalyst-ui products/catalyst/bootstrap/ui/ ghcr.io/openova-io/openova/catalyst-ui public repo
catalyst-api products/catalyst/bootstrap/api/ ghcr.io/openova-io/openova/catalyst-api public repo
console core/console/ ghcr.io/openova-io/openova/console public repo (Phase 1)
admin core/admin/ ghcr.io/openova-io/openova/admin public repo (Phase 1)
marketplace core/marketplace/ ghcr.io/openova-io/openova/marketplace public repo (Phase 1)
marketplace-api core/marketplace-api/ ghcr.io/openova-io/openova/marketplace-api public repo (Phase 1)
sme-{auth,billing,catalog,domain,gateway,notification,provisioning,tenant} (still in openova-private/services/) ghcr.io/openova-io/openova-private/sme-* follow-up phase — source not yet moved