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
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 onlux.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)zoohanzospcpars
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/.