The CI Docker build failed reading hanzoai/vfs@v0.4.1's go.mod via the public
sum.golang.org (404 — it's a cross-org module not registered there), same class
as luxfi/*. Added github.com/hanzoai/* to GONOSUMCHECK/GONOSUMDB/GONOPROXY.
Verified: clean 'go mod download hanzoai/vfs@v0.4.1' 404s without the exclusion,
succeeds with it. Unblocks ghcr.io/luxfi/node image builds (v1.30.30/31 failed).
Harden the cross-compile target re-export against `set -e`: the prior
`[ -n "$x" ] && export ...` form returns non-zero when the var is empty
(the common native-build case). Empirically bash exempts it from
errexit, but the explicit `if` form is unambiguous across shells. Both
native (Mach-O arm64) and cross (ELF linux/amd64) builds verified via
./scripts/run_task.sh build.
Co-authored-by: Hanzo Dev <dev@hanzo.ai>
The zap_native package was relocated out of this repo to
github.com/luxfi/proto/zap_native (commit 9ba108d4b "relocate zap_native
import paths to proto/zap_native"; node now imports it as a dependency,
pinned luxfi/proto v1.3.4). zap-audit.yml still grepped/cd'd into
vms/platformvm/txs/zap_native/, a directory that no longer exists here —
so the workflow could never run its gates against real code, and a YAML
block-scalar bug (a column-1 line inside `run: |`) made it fail to parse
at 0s on every push.
The four invariants it enforced (AddressList.At non-production,
ChainsList/ValidatorsList MustVerify, Owner-bearing SyntacticVerify) are
preserved at the source: luxfi/proto/zap_native/audit_test.go contains
the Go-test mirrors (TestAuditGate_*) that run in luxfi/proto's CI, next
to the code they guard. The audit belongs in the repo that owns the code,
not here pointing at a phantom path. Not a weakened gate — a dead
workflow removed; coverage unchanged.
Co-authored-by: Hanzo Dev <dev@hanzo.ai>
luxfi/genesis@v1.13.8 read its embedded genesis shards with
embeddedGenesis.ReadFile(filepath.Join(network, "<shard>.json")). On
Windows filepath.Join uses backslashes, but embed.FS paths are always
forward-slash; every read returned fs.ErrNotExist, so GetConfig fell
back to an empty filesystem config: zero allocations, zero stakers,
empty XChainGenesis.
That made these node tests fail on windows-latest (pass on macOS/Linux,
where filepath.Join already yields "/"):
- config.TestResolveUTXOAssetID_FromSovereignGenesis
- genesis/builder.TestUTXOAssetIDFromGenesisBytes_Sovereign
- genesis/builder.TestGetConfigAllocations (all 4 networks: 0 allocs)
v1.13.14 switches the embed.FS reads to path.Join (forward-slash, all
platforms). No behavior change on linux/darwin. Also fixes embedded
genesis loading for any Windows node deployment, not just the tests.
(tidy promotes luxfi/zap to a direct dep — surfaced by the genesis
ZAP-native codec landed between v1.13.8 and v1.13.14.)
Co-authored-by: Hanzo Dev <dev@hanzo.ai>
build-macos-release cross-compiles on a Linux runner with
`CGO_ENABLED=0 GOOS=darwin GOARCH=<arch> ./scripts/run_task.sh build`.
run_task.sh bootstrapped the task runner via `go run task@vX`, which
inherited GOOS/GOARCH and cross-compiled the *task launcher itself* for
darwin — then failed to exec it on the Linux host:
fork/exec /tmp/go-build.../task: exec format error
(reproduced locally on darwin/arm64 by cross-compiling task to linux/amd64.)
task is a build orchestrator that must run on the host. Build it for the
host (GOOS/GOARCH cleared via `env -u`, installed to GOPATH/bin with
`go install`), then re-export the caller's cross-compile target so the
downstream `go build` inside scripts/build.sh still produces the
requested darwin artifact. Verified: a linux-host -> darwin and a
darwin-host -> linux cross-compile both succeed and emit the correct
target-arch binary.
Co-authored-by: Hanzo Dev <dev@hanzo.ai>
The asset-id var was already unified to UTXOAssetID; this finishes the
job by renaming resolveXAssetID -> resolveUTXOAssetID and
XAssetIDFromGenesisBytes -> UTXOAssetIDFromGenesisBytes (+ their tests).
X-Chain references (XChainID, XChainGenesis) are unchanged. UTXOAssetID
is the canonical name.
Co-authored-by: Hanzo Dev <dev@hanzo.ai>
The fallback if/else had identical branches (dead code); collapse to a single assignment. Rename stale LUXAssetID comment + utxosByLUXAssetID local var to the canonical UTXOAssetID.
Co-authored-by: Hanzo Dev <dev@hanzo.ai>
- vms/xvm TestFundingAddresses: use a real secp256k1fx.TransferOutput
(wire-serializable) instead of the lux.TestAddressable mock, which the
utxo v0.3.7 ZAP marshal path rejects (UTXO.Out must be a registered fx
primitive). Query the funding-address index by the owner address.
- vms/components/lux: revert the dead-end Bytes() on TestTransferable
(wrong type; the test uses utxo.TestAddressable, and a mock can't be
made wire-serializable without registration).
- deps: keys v1.1.0 -> v1.2.0 (kms v1.11.3) — keyutil.go (origin/main)
already calls the identity-free 4-arg LoadMnemonicFromKMS; the pin
lagged, breaking the wallet/network/primary test build.
Full suite: 153/153 green.
Co-authored-by: Hanzo Dev <dev@hanzo.ai>
origin/main did not build against released deps: service/info used
apiinfo.PeerInfo (absent from api v1.0.12) and zap client used the old
InitializeRequest.LuxAssetID field. Bump api -> v1.0.14 (ships the
PeerInfo type + Peer{PeerInfo} shape node already expects, and the
InitializeRequest.UTXOAssetID rename) and accel -> v1.2.2 (bundled
c_api.h; native HQC opt-in, so CGO builds need no luxcpp install).
- vms/rpcchainvm/zap: InitializeRequest.LuxAssetID -> UTXOAssetID
(client.go + cevm_e2e_test.go), local var luxAssetID -> utxoAssetID.
- vms/components/lux: TestTransferable implements Bytes() for the utxo
v0.3.7 wire-serializable contract.
Builds clean; 152/153 packages green. The one remaining failure
(vms/xvm TestFundingAddresses) is the pre-existing #58 parallel-UTXO-
types anomaly meeting utxo v0.3.7's wire contract via the node lux.UTXO
-> utxo.UTXO state bridge — a separate follow-up, not a dep-version issue.
Co-authored-by: Hanzo Dev <dev@hanzo.ai>