20 Commits
Author SHA1 Message Date
zooqueenandHanzo Dev b2d8266d90 lux.build's route presents the edge certificate
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-23 02:26:35 -07:00
zooqueenandHanzo Dev edb2b42263 explore-fe-pars declares the env its pod reads
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-23 02:24:32 -07:00
zooqueenandzeekay 85f7a5c318 explorer 1.5.39 -> 1.5.40 (warm one chain at a time)
The chains this pod serves share one disk, so warming their counts together
made each finish late and made a caller arriving during startup wait on the
contention.
2026-08-28 12:40:22 -07:00
Antje WorringandHanzo AI 193cf3ee9f explorer 1.5.39 -> 1.5.40 (warm one chain at a time)
The chains this pod serves share one disk, so warming their counts together
made each finish late and made a caller arriving during startup wait on the
contention.
2026-08-28 12:40:22 -07:00
zooqueenandzeekay 74636253eb explorer 1.5.38 -> 1.5.39 (a chain's tables are counted once)
The homepage's four headline cards are lifetime totals, and none of them can
use an index, so each one scanned a table. With every caller computing its own
copy over a shared pair of connections, concurrent loads queued behind each
other for longer than a browser waits, and the cards stayed empty.
2026-08-28 12:40:17 -07:00
Antje WorringandHanzo AI d0f575ee1c explorer 1.5.38 -> 1.5.39 (a chain's tables are counted once)
The homepage's four headline cards are lifetime totals, and none of them can
use an index, so each one scanned a table. With every caller computing its own
copy over a shared pair of connections, concurrent loads queued behind each
other for longer than a browser waits, and the cards stayed empty.
2026-08-28 12:40:17 -07:00
zooqueenandzeekay 2a99cd11fb e2e: fail the gate when any job it guards fails
The gate enforced only health. explorer, apps and branded each printed a
warning and fell through to an unconditional 'gate passed', so run 62877
went green with three red jobs. One rule now covers every guarded job:
green or the gate is red.

The apps matrix named itself App E2E (${{ matrix.app }}), which
stringifies the leg mapping to 'Object' — five identically named jobs,
none identifying which leg failed. Use matrix.app.name.

Explorer E2E was one of the hidden failures: it asserted SPC serves
stats, but no SPC chain exists and the explorer config disables the slug,
so api-explore-spc answers a plain-text 404. Four specs each carried
their own copy of the chain list; EXPLORERS in env.ts is now the one
list, and SPC is absent from it with the reason recorded.

httpGetJson fed error-page bodies to JSON.parse, reporting a complaint
about byte 4 of '404 page not found' instead of the endpoint and status.
It now reports both.
2026-08-28 12:39:52 -07:00
Antje WorringandHanzo AI da50d29940 e2e: fail the gate when any job it guards fails
The gate enforced only health. explorer, apps and branded each printed a
warning and fell through to an unconditional 'gate passed', so run 62877
went green with three red jobs. One rule now covers every guarded job:
green or the gate is red.

The apps matrix named itself App E2E (${{ matrix.app }}), which
stringifies the leg mapping to 'Object' — five identically named jobs,
none identifying which leg failed. Use matrix.app.name.

Explorer E2E was one of the hidden failures: it asserted SPC serves
stats, but no SPC chain exists and the explorer config disables the slug,
so api-explore-spc answers a plain-text 404. Four specs each carried
their own copy of the chain list; EXPLORERS in env.ts is now the one
list, and SPC is absent from it with the reason recorded.

httpGetJson fed error-page bodies to JSON.parse, reporting a complaint
about byte 4 of '404 page not found' instead of the endpoint and status.
It now reports both.
2026-08-28 12:39:52 -07:00
zooqueen c4b09ecbcf explorer 1.5.39 -> 1.5.40 (warm one chain at a time)
The chains this pod serves share one disk, so warming their counts together
made each finish late and made a caller arriving during startup wait on the
contention.
2026-08-13 21:47:53 -07:00
zooqueen eabebf59fb explorer 1.5.38 -> 1.5.39 (a chain's tables are counted once)
The homepage's four headline cards are lifetime totals, and none of them can
use an index, so each one scanned a table. With every caller computing its own
copy over a shared pair of connections, concurrent loads queued behind each
other for longer than a browser waits, and the cards stayed empty.
2026-08-13 21:29:48 -07:00
zooqueen b3da8551c1 e2e: fail the gate when any job it guards fails
The gate enforced only health. explorer, apps and branded each printed a
warning and fell through to an unconditional 'gate passed', so run 62877
went green with three red jobs. One rule now covers every guarded job:
green or the gate is red.

The apps matrix named itself App E2E (${{ matrix.app }}), which
stringifies the leg mapping to 'Object' — five identically named jobs,
none identifying which leg failed. Use matrix.app.name.

Explorer E2E was one of the hidden failures: it asserted SPC serves
stats, but no SPC chain exists and the explorer config disables the slug,
so api-explore-spc answers a plain-text 404. Four specs each carried
their own copy of the chain list; EXPLORERS in env.ts is now the one
list, and SPC is absent from it with the reason recorded.

httpGetJson fed error-page bodies to JSON.parse, reporting a complaint
about byte 4 of '404 page not found' instead of the endpoint and status.
It now reports both.
2026-08-13 18:05:17 -07:00
zooqueenandzeekay 229e2a1b0f k8s(lux-mainnet): declare explore-fe per-brand frontends @ explore v1.0.10
Capture the live lux-mainnet per-brand block-explorer frontends as declared
state (mirrors k8s/lux-devnet/explore-fe.yaml). ONE luxfi/explore source
white-labeled by hostname (chainRegistry.ts -> branding.logoContent); per-org
GHCR image overlay (luxfi/zooai/hanzoai/parsdao).

Pins lux/zoo/hanzo to v1.0.10 (luxfi/explore@4369780): real per-brand
hostname-driven header logo + single header per breakpoint, killing the stale
inline triangle that mislabeled the Lux mark as 'Hanzo icon'. explore.hanzo.network
now renders the real Hanzo blocky-H (@hanzo/logo, viewBox 0 0 67 67, 5 paths).
pars stays v1.0.4 (parsdao not yet in the kaniko fan-out).

dry-run/diff vs live = no image drift; apply only reconciles labels.
2026-07-26 15:46:01 -07:00
zooqueenandzeekay f606abf291 deploy(mainnet): stateUpgrade — correct L* token (LETH/LBTC/LUSD) owner to 0x9011 treasury
The pre-existing mainnet L* tokens (real, with live V3 liquidity — LETH/WLUX pool
0xfAfBF1A0 liq 5.519e19) are owned by 0xbe7A89F4 (key lost, from RLP history). A
forward-dated stateUpgrade (fork 1782235245) overwrites owner storage slot 5 ->
0x9011 for all three, preserving balances+liquidity. Next: 0x9011 -> multisig Safe.
2026-07-26 15:46:01 -07:00
zooqueenandzeekay 0d58d9eb8c exchange/bridge: per-env app layer across lux+zoo, reproducible
Exchange (Uniswap fork, ghcr.io/luxfi/exchange):
- base: drop obsolete init-container sed-patch (image >=5.149.x is a
  shell-less hanzoai/static SPA with a runtime config loader; the old
  'sh /scripts/patch.sh' CrashLooped 'exec: sh: not found'). Matches the
  live lux-ns pod (no init, envFrom config).
- pin 5.149.2 (bare semver; v5.147.4 did not exist -> ImagePullBackOff).
- fix RPC: env-zone gateways serve C-Chain at /ext/bc/C/rpc with NO
  /mainnet|/testnet|/devnet infix (the infixed paths 404). Verified live:
  mainnet 96369, testnet 96368, devnet 96370.
- align IngressRoute hosts to the explorer scheme:
  exchange.lux-test.network / exchange.lux-dev.network (+ -test/-dev infix).
- deployed: lux-testnet, lux-devnet (lux-mainnet served by lux-ns).
- zoo-testnet overlay: exchange.zoo-test.network on chain 200201, in the
  zoo ns reusing ghcr-secret+ghcr-zoo + zoo-exchange-secrets.

lux-ns/lux-exchange: declared Ingress now also covers markets.lux.network.

Bridge (ghcr.io/luxfi/bridge-ui):
- per-env UIs bridge.lux-test.network / bridge.lux-dev.network.
  Frontend layer only; cross-chain needs a per-env bridge-server+MPC
  backend (mainnet-only today) -- documented inline.

DNS source-of-truth manifests updated (lux.exchange trade; lux.network
exchange-test/-dev, bridge-test/-dev).
2026-07-26 15:46:01 -07:00
zooqueenandzeekay 8a5ff8a5d6 k8s/lux-devnet: brand explorer frontends + IngressRoutes (lux/zoo/hanzo/pars)
Make the per-brand block explorers live on devnet, matching the
mainnet/testnet explore-fe-* stack.

- explore-fe.yaml: clone explore-fe-{lux,zoo,hanzo,pars} Deployments +
  Services + explore-env-* ConfigMaps from lux-testnet into lux-devnet.
  Per-brand image ghcr.io/{luxfi,zooai,hanzoai,parsdao}/explore:v1.0.4,
  svc 80 -> containerPort 3000. RPC -> devnet C-chain (96370,
  api.lux-dev.network/ext/bc/C/rpc) since the per-brand devnet L1 EVMs
  (hanzo/zoo/pars aliases) currently 404; only C is live on devnet.

- explore-ingressroute.yaml: rewrite the 4 devnet lux-explorer-*
  IngressRoutes (hanzo.ai/v1alpha1) so the brand frontend hosts route to
  explore-fe-<brand>:80 (were pointing at the unified explorer:80, which
  404s). Modeled byte-for-byte on lux-testnet/lux-explorer-zoo-testnet:
  SPA data paths (/v1/*, /health, /envs.js, icons) -> explorer:8090;
  frontend host -> explore-fe-<brand>:80; api-explore.* -> explorer:8090
  with blockscout-prefix-<brand> + mainpage-rewrite + cors-allow-all.

Host scheme (proven by the mainnet explore-env-* configmaps):
  mainnet explore.<brand>.network / testnet explore.<brand>-test.network
  / devnet explore.<brand>-dev.network.

CF DNS (separate, applied live): explore.{hanzo-test,hanzo-dev}.network
A -> 134.199.138.27 created; explore.{zoo-test,zoo-dev}.network repointed
209.38.118.103 -> 134.199.138.27; stale explorer.lux-dev.network ->
130.211.52.166 removed.
2026-07-26 15:46:01 -07:00
zooqueenandzeekay f95794ffb2 docs: reproducible v1.30.40 + DEX-precompile upgrade process
Document the declared-state source of truth (network.yaml + luxd-startup.yaml),
the dexConfig->granular migration (0x9996-9999 @ 1766708400, ascending-sorted),
the coordinated-cutover requirement for incompatible binary/config, and the
CF-served explorer frontend model (explore.lux-dev.network needs CF Pages, not
a k8s ingress).
2026-07-26 15:46:01 -07:00
zooqueenandzeekay 761d2a6119 deploy(lux): capture v1.30.40 + migrated DEX precompiles across mainnet/testnet/devnet
Reproducible declared-state for the deployed networks:
- network.yaml: LuxNetwork tag -> v1.30.40 (latest PQ crypto: consensus v1.25.19,
  pulsar v1.1.5, magnetar v1.2.3, corona v0.7.9, threshold v1.9.9)
- luxd-startup.yaml: cchain/brand upgrade.json migrated dexConfig -> the 4 granular
  Uniswap-v4 precompiles (dexPositionManager/StateView/Quoter/Settle, 0x9996-9999),
  activated 1766708400 (4:20pm PST Dec 25 2025), array stable-sorted ascending.
  Captured from the live configmaps so a cluster rebuild / operator reconcile
  reproduces the exact deployed state.
2026-07-26 15:46:01 -07:00
zooqueenandzeekay 1c7b7eccd0 deploy: node → v1.30.33 (chains v1.3.17 + hanzoai fix; the buildable image) 2026-07-26 15:46:00 -07:00
zooqueenandzeekay bf81ce6afb deploy: node v1.30.31 -> v1.30.32 (hanzoai sumdb fix; the buildable image) 2026-07-26 15:46:00 -07:00
zooqueenandzeekay 62d221228d deploy: roll mainnet/testnet/devnet to node v1.30.31 (latest PQ crypto)
LuxNetwork tag v1.28.20 -> v1.30.31 across all three networks. v1.30.31 carries
the finalized PQ threshold stack: consensus v1.25.19 (ConsensusCert envelope),
pulsar v1.1.5, magnetar v1.2.3, corona v0.7.9, threshold v1.9.9. luxd build
verified (57MB). Image building in CI (ghcr.io/luxfi/node:v1.30.31, multi-arch).
2026-07-26 15:46:00 -07:00