This checklist is the final pre-release gate for the Binance-first Elixir CCXT preview package. Run commands from the repository root unless a command starts with cd elixir.

Required Local Gate

Run the aggregate gate on the exact commit that will be released:

npm run releaseElixirPreviewCheck

This command runs:

  • npm run checkElixir
  • npm run docsElixir
  • npm run testElixirPackageConsumer

The gate must prove:

  • TypeScript AST/IR selected methods are complete and contain no fallback markers.
  • Generated REST and Pro outputs are stable.
  • Structure schema artifacts are stable.
  • mix format --check-formatted, mix compile --warnings-as-errors, and ordinary ExUnit tests pass.
  • ExDoc builds.
  • A local Hex tarball can be built, unpacked, compiled by a temporary consumer app, and used by that consumer's public Pro smoke test.

Optional Focused Gates

Use these when iterating on a narrower area:

npm run assertElixirPro
npm run assertElixirStructureSchemas
cd elixir && mix test test/ccxt_pro_binance_test.exs
npm run buildElixirPackage
npm run testElixirConsumer
npm run testElixirPackageConsumer

Do not replace the required local gate with focused gates before release.

Live Commands

The standard live refresh command is:

cd elixir
mix test --include live --exclude prod_order_live \
  test/ccxt_pro_binance_live_test.exs --timeout 180000

This exercises public market streams and signed read-only websocket API or user-data-stream paths when matching credentials and Binance permissions are available. Missing credentials or permission-denied responses should be recorded as evidence, not silently treated as coverage.

For demo private read-only smoke:

cd elixir
BINANCE_PRO_ENV=demo mix test --include live --only demo_private_live \
  test/ccxt_pro_binance_live_test.exs --timeout 180000

Production Order Live Risk Gate

Production order tests send real Binance production requests. They are designed to place non-marketable spot limit orders and clean them up immediately, but they still require explicit operator intent.

Run only after confirming the production account has enough small spot balance and the symbol/amount are acceptable:

cd elixir
CCXT_PRO_ENABLE_PROD_ORDER_LIVE=true \
BINANCE_PROD_ORDER_SYMBOL=BTC/USDT \
BINANCE_PROD_ORDER_AMOUNT=0.0002 \
mix test --only prod_order_live test/ccxt_pro_binance_live_test.exs \
  --timeout 180000

For manual example verification, start the private order event worker in one shell and run the safe lifecycle example in another:

cd elixir
BINANCE_PRO_ENV=prod CCXT_PRO_ORDER_EVENT_WORKER_SECONDS=90 \
  mix run examples/pro_order_event_worker.exs
cd elixir
CCXT_PRO_ENABLE_PROD_ORDER_LIVE=true \
  mix run examples/pro_safe_order_lifecycle.exs

The worker should receive order-event updates and the lifecycle example should create, edit, cancel, and clean up a non-marketable order.

Package Dry-Run

Build the local Hex package:

npm run buildElixirPackage

The release package should include lib, priv, doc, mix.exs, and README.md, and should exclude test, examples, _build, deps, and smoke.

Verify the unpacked package from a clean temporary consumer:

npm run testElixirPackageConsumer

This is also part of npm run releaseElixirPreviewCheck.

Soak Gates

Short soak sanity run:

CCXT_PRO_LONG_SOAK_SECONDS=5 CCXT_PRO_LONG_SOAK_MIN_UPDATES=1 \
  npm run testElixirProLongSoak

Default long soak:

npm run testElixirProLongSoak

The default long soak runs for about 15 minutes and should record update count, first update latency, maximum update gap, connection starts, disconnects, terminations, telemetry message count, and explicit websocket cleanup.

Tests Excluded By Default

test/test_helper.exs excludes these tags from ordinary mix test and npm run checkElixir:

TagWhy excluded by defaultHow to run
:liveRequires network, Binance availability, and sometimes credentialsmix test --include live ...
:privateRequires private credentials and account permissionsRun only with appropriate credentials
:soakSlower websocket stability checknpm run testElixirProSoak
:soak_longLong-running stability checknpm run testElixirProLongSoak

prod_order_live is an included tag inside the live test file, but the tests only send orders when CCXT_PRO_ENABLE_PROD_ORDER_LIVE=true is set.

Evidence Update

After running live or soak commands, update doc/release-0.1.0-binance-pro-preview.md and doc/ccxt-pro-elixir-target.md with:

  • command
  • date
  • test count and failure count
  • environment (prod, demo, or testnet)
  • skipped credential or permission reasons
  • order lifecycle outcome for production order tests
  • soak metrics for long-running websocket tests