openova/products/catalyst
e3mrah 2ffdba038f
fix: restore natural FlowPage canvas + drop synthetic phase/region pillars (#1411)
Founder rejected the lane-layout + synthetic-phase scaffolding shipped
via PR #1399/#1400/#1407. This commit restores the founder-tuned
natural view (FlowCanvasOrganic) and adds the per-bubble fold-
disclosure badge + top-right depth chip on top of it.

Adapter (products/openova-flow/adapter-flux/):
  - mapper.go: BuildFromHR now returns ONE leaf FlowNode + finish-to-
    start edges from spec.dependsOn only. Deleted BuildRegionNode,
    BuildPhaseNodes, BuildPhaseEdges, phaseLabels, phaseSortKey,
    AllPhaseSuffixes, PhaseSuffix* constants, derivePhase, PhaseLabel,
    PhaseSortKey. Node-id separator changed "/" → ":" so ids do not
    collide with URL routing (founder hit "Not Found" drilling into
    contabo/phase-0).
  - hr_informer.go: dropped bootstrap(), tracker, nodeGroups,
    reemitGroups(), buildGroupNode(). handle() is now single-leaf
    upsert + dependsOn edges.
  - rollup.go: deleted entirely (StatusTracker only existed for
    synthetic group rollups).
  - mapper_synthetic_test.go + rollup_test.go: deleted; mapper_test.go
    updated for the ":" separator + no-synthetic-rels assertions.

UI (products/catalyst/bootstrap/ui/):
  - FlowPage.tsx: switched from @openova/flow-canvas's FlowCanvas back
    to FlowCanvasOrganic. Dropped lane-layout (regionDescriptorsFromFlow),
    defaultFoldedAtDepth from @openova/flow-core, FoldControls chrome
    strip. Kept useFlowStream + ?folded=/?depth= URL contract.
  - flowStreamToOrganic.ts (new): bridges live SSE state to the Job[]
    + hints + region/family descriptors flowLayoutOrganic expects.
    Treats `contains` rels as parent-child and FS/SS/FF/SF/triggers as
    dependsOn.
  - FlowCanvasOrganic.tsx: ADDITIVE optional props onFoldToggle,
    badgeCounts, nodeActions, onNodeAction. Renders per-bubble "⊕ K"/
    "⊖" disclosure badge on group bubbles when wired; right-click
    opens a small action menu. Existing call sites are unchanged.
  - Depth chip: ◀ L<n>/<max> ▶ pinned top-right of canvas host,
    visible only when real groups exist in the data. Esc clears
    manual fold overrides.

Verification:
  - go build ./... in adapter-flux: clean
  - go test ./... in adapter-flux: PASS (12 tests)
  - tsc --noEmit on bootstrap/ui: clean
  - vitest FlowPage + FlowCanvasOrganic.bounded: 25/25 PASS
  - vitest JobDetail + distribution + flowLayoutOrganic + flow-bridge:
    27/27 PASS

Co-authored-by: e3mrah <1234567+e3mrah@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 20:22:58 +04:00
..
bootstrap fix: restore natural FlowPage canvas + drop synthetic phase/region pillars (#1411) 2026-05-11 20:22:58 +04:00
chart deploy: update catalyst images to d96d3dd 2026-05-11 16:02:47 +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