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
DEX boot/reset/upgrade e2e harness
Deterministic proof that a Lux net boots to a known-good, taggable spec:
C-Chain up → 0x9999 DEX precompile active → a DEXFill settles → all validators
converge. This is the GATE that replaces operator drift — a green run pins a node
version + config that is reproducible, not hand-tuned live state.
The harness is two halves, kept separate:
| Half | What | Where |
|---|---|---|
| Read gate (assertions) | dex_e2e_test.go — stdlib-only eth JSON-RPC. Never writes. |
this dir |
| Write leg (a real fill) | the proven trader binary (trader prove) |
~/work/lux/trader |
boot.sh / reset.sh / upgrade.sh orchestrate a disposable localnet, drive a
real fill with trader, then run the gate.
The gate — dex_e2e_test.go
Given LUX_RPC (one or more comma-separated C-Chain endpoints, one per
validator) it asserts:
eth_chainId==LUX_CHAIN_ID(if set),- C-Chain booted past genesis (height > 0, building blocks),
eth_getCode(0x9999)==0x01— DEX precompile active and has settled (the one-byte vault marker is written only by a fill),- a
DEXFilllog was emitted (the DEX actually traded), - every endpoint reports an identical block hash at a common height — the convergence / determinism proof.
Skipped (not failed) when LUX_RPC is unset, so it is CI-safe.
# spec verification against any reachable v1.31.2 net (non-destructive, read-only)
LUX_RPC=https://api.lux-test.network/v1/chain/C/rpc LUX_CHAIN_ID=96368 ./verify.sh
# multi-validator convergence (e.g. 3 port-forwarded devnet pods)
LUX_RPC=http://127.0.0.1:19651/v1/chain/C/rpc,http://127.0.0.1:19652/v1/chain/C/rpc,http://127.0.0.1:19653/v1/chain/C/rpc \
LUX_CHAIN_ID=96367 LUX_REQUIRE_FILL=1 ./verify.sh
Env: LUX_RPC (required), LUX_CHAIN_ID, LUX_FROM_BLOCK (DEXFill scan start,
default 0), LUX_REQUIRE_FILL=1 (fail if no fill log; default: the 0x01 marker
is sufficient settlement proof).
Boot / Reset / Upgrade on a disposable localnet
These need a v1.31.2 luxd binary (LUXD=) and the lux CLI. They wipe and
write — never point them at a live net.
# BOOT: fresh genesis → 5 validators → real fill → gate
LUXD=~/work/lux/node/build/luxd N=5 ./boot.sh
# RESET: wipe + re-boot → same green result (determinism)
LUXD=~/work/lux/node/build/luxd ./reset.sh
# UPGRADE: boot on FROM, roll to TO, re-prove the fill survives the version roll
FROM_LUXD=~/.lux/bin/luxd/old/luxd TO_LUXD=~/work/lux/node/build/luxd ./upgrade.sh
Proven green (2026-06-28)
The read gate is green against the live v1.31.2 spec on all three nets:
| Net | chainId | height | 0x9999 |
DEXFill | convergence |
|---|---|---|---|---|---|
| devnet | 96367 | 36 | 0x01 ✓ |
6 ✓ | 3 validators agree @ block 15 ✓ |
| testnet | 96368 | 11 | 0x01 ✓ |
1 ✓ | (single ingress) |
| mainnet | 96369 | 1,082,812 | 0x01 ✓ |
marker ✓ | (single ingress) |
chainId = 96367 ✓
C-Chain height = 36 (booted past genesis) ✓
0x9999 = 0x01 (DEX precompile active + has settled) ✓
DEXFill logs over [0,latest] = 6 (DEX has traded) ✓
all 3 validators converge on block 15 hash 0x211cde…71ef ✓
DEX is trading ✓
Full local BOOT/RESET/UPGRADE from genesis requires a v1.31.2 luxd binary for the
host arch (the published image is linux/amd64); on a host without it the gate
above is the spec proof and the scripts run green the moment a binary is present
(e.g. an amd64 CI runner). See ../../RUNBOOK.md.