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 checkElixirnpm run docsElixirnpm 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:
| Tag | Why excluded by default | How to run |
|---|---|---|
:live | Requires network, Binance availability, and sometimes credentials | mix test --include live ... |
:private | Requires private credentials and account permissions | Run only with appropriate credentials |
:soak | Slower websocket stability check | npm run testElixirProSoak |
:soak_long | Long-running stability check | npm 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, ortestnet) - skipped credential or permission reasons
- order lifecycle outcome for production order tests
- soak metrics for long-running websocket tests