Files
zeekay 51460827d4 Merge the forge's lux/universe into GitHub's, the one main from here
The two mains shared no history, so this is a per-file three-way merge:
for each file the 65 forge-only commits touched (by patch-id), the base is
the newest version both histories held. 105 files merged or took one side
cleanly, 48 were already identical, and the 45 true conflicts and 31
modify/delete pairs were resolved by what runs on the cluster:

- The forge wins where it is live: explorer 1.5.56 (digest 45db11ff) and
  its archive readers, explore-fe-hanzo's ConfigMap env (AI coin,
  /v1/indexer/hanzo, /v1/chain/hanzo/rpc), exchange-api reading
  luxd-archive, and explore-fe-{lux,zoo}-testnet, pinned to what they run
  (v2.8.5-lux / v2.8.4-lux).
- GitHub wins where it is live: explore-fe-lux v2.8.5-lux, explore-fe-zoo
  v2.8.4-lux, bankd v1.0.18, lux-build's routes.
- The forge's retirement of workloads that run nowhere stands: lux-mainnet
  dex, lux-hb2, lux-market, traffic, wallet-web; the lux-testnet frontends,
  indexer, exchange and gateways; lux-operator. deploy/lux-testnet/luxd.yaml
  stays, since roll_luxd.sh reads it.
- GitHub's deletions stand: lux-finance and lux-financial (static sites
  now), the k8s/ operator manifests, .hanzo/workflows/cicd.yml.
- Paths are /v1/chain/C/rpc where the forge had written /v1/chain/c. All
  four spellings answer; this one is the documented form. The forge's
  /{network}/v1 doc lines are dropped: a network is a host, and the prefix
  404s.

Dry-run against the running objects (server-side, as CD applies), the
merged explorer shows no change where GitHub's showed 152 lines, and no
other live workload moves further from what runs. Every deploy/*/*.yaml
renders with charts/app; price.yaml, which failed on GitHub, now renders.

Claude-Session: https://claude.ai/code/session_01TzirYkGmD88w4GipqivUtV
2026-09-23 20:20:03 -07:00
..
2026-05-25 15:12:58 -07:00
2026-09-08 15:23:20 -07:00
2026-09-08 15:23:20 -07:00
2026-09-01 12:44:37 -07:00
2026-09-08 15:23:20 -07:00

k8s — reference, not deployment

deploy/ is authoritative. Nothing in this directory is applied by anything.

The lux-fleet ApplicationSet generates one Application per deploy/<namespace>/<app>.yaml and reads no other path in this repository, so a manifest here reaches a cluster only if a person types kubectl apply. For a service that also has a values file, that apply is a second, competing description of one workload — and the values files were generated from what is RUNNING while these were hand-applied over a long period, so when the two disagree it is this tree that is stale.

Twelve services were declared in both. Each carried something the values file did not — an IngressRoute, a ConfigMap, a claim, a Role — so deleting them outright would have dropped the half of a service users reach. Those objects moved into the values files first, verified by rendering the chart and diffing it against the manifest, and only then were the manifests removed.

Two objects stayed, because the chart cannot express either:

  • lux-mainnet/luxd-rpc.yaml — a Service selecting on lux.network/rpc: fresh, one key more than luxd's own labels. rpc-tip-gate patches that key on and off.
  • lux-testnet/exchange-api-ingress.yaml — moving it renames it, and an Ingress name is a cert-manager Certificate name.

lux-testnet/explorer.yaml also stayed, deliberately: this directory's own kustomization records it as "a mix of aspirational + stale" that "would clobber the live explorer pod", so its ConfigMap is not content to promote into the tree CD reconciles from.

What legitimately lives here: chain CRs (LuxChain, LuxNetwork, LuxIndexer, LuxGateway, LuxMPC), which are not services and have their own controllers; NetworkPolicies; DNS zone files; and the historical record. Some aggregate roots do not build — lux-k8s/kustomization.yaml lists a kms directory that does not exist — and are kept for that history rather than for use.

Clusters

Cluster Environment Domain Nodes
lux-k8s mainnet + testnet + devnet + storm (namespaces) *.lux.network lux-nodes, lux-runners-amd64
hanzo-k8s prod cloud.hanzo.network worker-pool, runner-pool-32g

lux-dev-k8s and lux-test-k8s no longer exist. Devnet and testnet are the lux-devnet / lux-testnet namespaces on do-sfo3-lux-k8s. Node workloads are not defined under k8s/: the only luxd source is the three CD values files under deploy/, preventing stale manifests from downgrading a network.

Tracked Chains

The runtime automation in Makefile + scripts/ensure-tracked-chains.sh enforces:

  • lux (C-Chain)
  • zoo
  • hanzo
  • spc
  • pars

Testnet aliases are used automatically: zootest, hanzotest, spctest, parstest.

Apply

A supporting resource here — a NetworkPolicy, a chain CR — is still applied by hand, and diffed first:

kubectl --context do-sfo3-hanzo-k8s diff  -k k8s/hanzo-k8s
kubectl --context do-sfo3-hanzo-k8s apply -k k8s/hanzo-k8s

Never apply a workload from here. If a service has a values file, the values file is what runs it; if it does not, give it one. Never add a luxd StatefulSet or Network resource back to these roots — the only luxd source is the three values files under deploy/.