openova/products/catalyst
e3mrah c5bfa34b27
fix(api): BE handler 5xx/4xx errors + items envelope (qa-loop iter-2 #17) (#1204)
QA-loop iter-2 cluster: be-handler-errors-5xx-4xx. After Fix #15
(SPA route guard) + Fix #16 (whoami) shipped, the largest remaining
matrix-FAIL cluster is BE handler errors:

- ITEMS-ENVELOPE FAILs (TC-070..075, TC-184/192/194/227): the
  generic /api/v1/sovereigns/{id}/k8s/{kind} surface returned
  "unknown kind" for helmreleases/applications/blueprints/
  useraccesses/organizations/environments. The kinds were reachable
  via per-CRD handlers but the k8scache.Factory's dynamic informer
  pool didn't know about them. Added six entries to DefaultKinds
  with matching ClusterRole verbs per
  feedback_chroot_in_cluster_fallback.md.

- TC-261 (HTTP 404 on /api/v1/version): the endpoint didn't exist.
  Added handler/version.go returning git SHA + chart version + Go
  runtime, with env override for chart-injected truth and ldflag
  fallback for CI-baked-in values. Public route, no auth gate.

- TC-089 (HTTP 503 on /blueprints/curatable when Gitea unwired):
  changed to return 200 + empty list envelope so the UI's empty-state
  renders instead of "Failed to fetch".

Categorisation of the rest of the cluster:

- HTTP 500 cluster (TC-061..068, TC-149): already 200 — Fix #15+#16
  cleared the underlying auth context.
- HTTP 503/200 (TC-088, TC-090, TC-244, TC-235, TC-236) and TC-078:
  matrix-drift; the executor calls POST endpoints with GET, or the
  matrix targets a hard-coded pod name that doesn't exist on
  omantel. Listed in fix-author report for the Test-Plan Author to
  fix in iter-3.
- HTTP 502 (TC-210, TC-211): keycloak proxy SA misconfig in chroot
  Sovereign — separate cluster (out of scope for this fix; the
  catalyst client/role members lookups need a Sovereign-side SA the
  chroot doesn't currently provision).

Tests:
- TestDefaultKinds_GraphAndDashboardSurface pinned to assert the six
  new CRDs stay registered.
- TestHandleVersion_AlwaysJSON / EnvOverride / TrimsWhitespace cover
  the wire shape + truth resolution.
- TestHandleBlueprintListCuratable_GiteaUnwiredReturnsEmptyList
  pins the 200 + empty envelope graceful path.

Chart: bp-catalyst-platform 1.4.93 -> 1.4.94 (ClusterRole change
needs a chart bump; Helm reconciles RBAC on every release).

Refs qa-loop iter-2 cluster be-handler-errors-5xx-4xx.

Co-authored-by: hatiyildiz <hati.yildiz@openova.io>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 17:09:27 +04:00
..
bootstrap fix(api): BE handler 5xx/4xx errors + items envelope (qa-loop iter-2 #17) (#1204) 2026-05-09 17:09:27 +04:00
chart fix(api): BE handler 5xx/4xx errors + items envelope (qa-loop iter-2 #17) (#1204) 2026-05-09 17:09:27 +04: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