Hanzo AI 320f061bda k8s: collapse zoo-operator to zoo-system, migrate to CR-driven bring-up
Operator topology fix:
- base/operator.yaml: pin ghcr.io/zooai/operator:v0.1.1 (was :main floating).
  Add OPERATOR_NAMESPACE env via fieldRef: metadata.namespace so the
  leader-election Lease lock is namespace-scoped, not racing in a single
  hardcoded 'zoo-system' literal. imagePullPolicy: Always → IfNotPresent
  (semver tag is immutable).
- zoo-system/patches.yaml: zoo-operator replicas → 2 (HA, leader-election
  picks one). Drop the stale zoo-explorer raw-Deployment patch (operator
  emits it now via ZooExplorer CR).
- zoo-{mainnet,testnet,devnet}/network-patch.yaml: scale per-env
  zoo-operator → 0. Single zoo-system operator watches every namespace
  (--namespace '' default); per-env operators were thrashing the same
  Lease and never becoming leader.

CR migration (away from raw manifests):
- base/network.yaml: full rewrite as ZooNetwork + ZooChain + ZooExplorer
  + ZooGateway base CRs (CRDs already installed: zoonetworks /
  zoochains / zooexplorers / zoogateways).
- base/explorer.yaml: emptied — ZooExplorer CR replaces the raw
  Deployment; operator renders zoo-explorer-explorer Deployment + Svc.
- base/gateway.yaml: Service-only — ZooGateway moved to network.yaml.
- base/ingress.yaml: kind: Ingress → 4 kind: IngressRoute
  (hanzo.ai/v1alpha1). Traefik proxy Deployment kept (it IS the
  hanzoai/ingress L7 proxy on this cluster).
- zoo-{mainnet,testnet}/network-patch.yaml: env-specific patches —
  validators (mainnet=5, testnet=3), bootstrap IPs+IDs from live Lux
  mainnet+testnet svcs, TRACK_CHAINS = Zoo blockchainID per env.
- zoo-{testnet,devnet}/ingressroute.yaml: new — api.test.zoo.network,
  explore.test.zoo.network, api-explore.test.zoo.network (and dev.*
  variants).
- zoo-{system,testnet,devnet}/kustomization.yaml: include new
  ingressroute.yaml resource + strip mainnet-only IngressRoutes via
  $patch: delete pattern.
- zoo-mainnet/zoo-industries.yaml: kind: Ingress → IngressRoute.

Blockers surfaced (separate followups):
1. Operator does NOT translate `spec.config` env keys to lqd CLI
   flags. Rendered StatefulSet sets ZOO_BOOTSTRAP_IPS etc., but
   luxd reads LUXD_*-prefixed env. Operator controller.rs needs to
   render as CLI args. BLOCKS validators joining Lux primary.
2. hanzo.ai/v1alpha1 IngressRoute CRDs not registered on
   do-sfo3-zoo-k8s — current ingress is traefik:v3.3 with
   traefik.io/v1alpha1 native. Either install hanzoai/ingress CRDs
   OR migrate IngressRoutes to traefik.io group.
3. ZooNetwork operator doesn't emit per-pod LoadBalancer Services
   needed for validators to be reachable as external bootstrap peers.
4. Validator staking keys: operator only takes secret_prefix; doesn't
   derive from a KMS mnemonic. Need 5 Secrets per env OR operator
   extension.
2026-06-10 09:13:57 -07:00
2026-05-07 10:58:42 -07:00
2026-02-14 05:27:03 -08:00
2026-03-26 22:45:36 -07:00
2026-03-26 22:45:36 -07:00

Zoo Universe

Infrastructure orchestration for Zoo Labs Foundation.

Architecture

zoo.ngo           — Marketing site (Vite SPA)
zoo.exchange      — DEX (Vite + Tamagui)
zoo.network       — Zoo Network validators
zoo.wallet        — Browser extension + mobile + web wallet
docs.zoo.ngo      — Documentation (fumadocs)
zips.zoo.ngo      — Zoo Improvement Proposals

Local Development

docker compose up        # All services
docker compose up ngo    # Just the website

Production (DOKS)

Three clusters:

  • do-sfo3-zoo-k8s — mainnet
  • do-sfo3-zoo-test-k8s — testnet
  • do-sfo3-zoo-dev-k8s — devnet

Deploy:

./deploy.sh mainnet
./deploy.sh testnet
./deploy.sh devnet

Repos

Repo Package Purpose
zoo/ngo @zooai/ngo-web Marketing site
zoo/exchange @zooai/exchange DEX frontend
zoo/wallet @zooai/wallet Wallet (ext + mobile + web)
zoo/ui @zooai/ui + @zooai/gui Design system
zoo/node — Rust blockchain node
zoo/docs @zoo/docs Documentation
zoo/ZIPs — Improvement Proposals
zoo/papers — Research papers (47)
zoo/formal — Formal proofs (20)
S
Description
Declared state for the zoo fleet: one values file per service, one ApplicationSet
Readme
1.2 MiB
Languages
TypeScript 70.1%
Shell 21.5%
Makefile 8.4%