openova/products/catalyst
e3mrah ae24194920
fix(k8scache): plural + short-name aliases on kind registry (qa-loop iter-1) (#1191)
Iter-1 QA matrix surfaced 5 cloud-list 404s (TC-084 services, TC-085
nodes, TC-090 pvcs, TC-091 namespaces, TC-130) — every call used the
kubectl-conventional plural path segment ('/k8s/services') but the
registry only resolved the canonical singular Name ('service'). The
file-level kinds.go doc claims "an operator who types 'pod', 'Pod',
or 'pods' all hit the same GVR" but only the first two worked.

Two new lookup paths in Registry.Get:

  1. Plural alias index — built from each Kind's GVR.Resource (the
     form `kubectl api-resources` prints). Populated automatically on
     Add(); first registration wins so PodMetrics (GVR.Resource="pods")
     can never shadow core/v1 Pod.
  2. Short-name alias map — small explicit table covering the kubectl
     muscle-memory forms that aren't derivable from GVR.Resource
     (pvc → persistentvolumeclaim, ns → namespace, svc → service, …).
     Includes pluralised short forms (pvcs, pvs) since the matrix uses
     them.

Backward compatible — singular Names still resolve, and the
helpful-404 'availableKinds' list still shows canonical singulars
only (so the wire-shape contract is unchanged for clients that
already work).

Tests:
  - TestRegistry_PluralAliasResolution — 11 sub-cases covering
    singular, plural, short, plural-short, case-insensitive forms.
  - TestRegistry_PluralDoesNotShadowSingular — guards the
    PodMetrics/Pod GVR.Resource collision via registration order.

Co-authored-by: hatiyildiz <hati.yildiz@openova.io>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 15:26:55 +04:00
..
bootstrap fix(k8scache): plural + short-name aliases on kind registry (qa-loop iter-1) (#1191) 2026-05-09 15:26:55 +04:00
chart deploy: update catalyst images to a0ed54c 2026-05-09 11:18:13 +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