Skip to main content

doc/ccxt-pro-lifecycle-coverage.md

# Binance Pro Lifecycle Coverage

This matrix tracks runtime lifecycle semantics required by the Binance-first
Elixir CCXT Pro target. It is derived from `lib/ccxt/pro_manifest.json`
through `Ccxt.ProLifecycleCoverage`.

## Summary

- required lifecycle features: 18
- covered required features: 18
- missing required features: none
- total feature rows: 21
- total evidence entries: 130

## Required Feature Matrix

Feature | Evidence | Owner Modules | Owner Functions | TS/Runtime Methods | Contract Kinds | Signals
--- | --- | --- | --- | --- | --- | ---
`otp-registry-dynamic-supervisor` | 1 | `Ccxt.Pro` | `connection/1` | - | - | `connection-process`<br>`dynamic-supervisor`<br>`registry`
`websocket-process-reconnect` | 1 | `Ccxt.Pro.Connection` | `handle_disconnect/2` | - | - | `reject-pending-waiters`<br>`websockex-reconnect`
`message-hash-routing` | 16 | `Ccxt.Pro.Connection` | `dispatch/3`<br>`dispatch_private/2`<br>`handle_frame/2` | `handleAcountUpdate`<br>`handleBalance`<br>`handleBidsAsks`<br>`handleFetchOHLCV`<br>`handleLiquidation`<br>`handleMarkPrices`<br>`handleMessage`<br>`handleMyLiquidation`<br>`handleMyTrade`<br>`handleOHLCV`<br>`handleOrder`<br>`handleOrderUpdate`<br>`handlePositions`<br>`handleTickers`<br>`handleTickersAndBidsAsks`<br>`handleTrade` | `event-dispatch-handler`<br>`private-stream-handler`<br>`public-stream-handler` | `channel`<br>`channel-message-hash`<br>`error`<br>`generated-parser`<br>`order-cache`<br>`order-trade-merge`<br>`private-cache`<br>`private-event`<br>`public-cache`<br>`request-id`<br>`symbol-id-index`<br>`waiter-resolution`
`subscription-lifecycle` | 19 | `Ccxt.Pro.Connection` | `dispatch/3`<br>`dispatch_private/2`<br>`watch_private/3` | `handleAcountUpdate`<br>`handleBalance`<br>`handleBidsAsks`<br>`handleFetchOHLCV`<br>`handleLiquidation`<br>`handleMarkPrices`<br>`handleMyLiquidation`<br>`handleMyTrade`<br>`handleOHLCV`<br>`handleOrder`<br>`handleOrderUpdate`<br>`handlePositions`<br>`handleTickers`<br>`handleTickersAndBidsAsks`<br>`handleTrade`<br>`loadBalanceSnapshot`<br>`loadPositionsSnapshot`<br>`setBalanceCache`<br>`setPositionsCache` | `cache-helper`<br>`private-stream-handler`<br>`public-stream-handler` | `array-cache`<br>`balance-delta`<br>`channel-message-hash`<br>`generated-parser`<br>`order-cache`<br>`order-trade-merge`<br>`position-cache`<br>`position-timestamp`<br>`private-cache`<br>`private-event`<br>`private-update`<br>`public-cache`<br>`snapshot-preload`<br>`symbol-id-index`<br>`waiter-resolution`
`unwatch-lifecycle` | 2 | `Ccxt.Pro.Connection` | `resolve_request_message/3` | `handleSubscriptionStatus`<br>`handleUnSubscription` | `unsubscribe-handler` | `request-id`<br>`unsubscribe-ack`<br>`waiter-resolution`
`request-id-routing` | 11 | `Ccxt.Pro.Connection` | `handle_frame/2`<br>`request_message_hash/1`<br>`resolve_or_reject_request_message/3` | `handleAccountStatusWs`<br>`handleBalanceWs`<br>`handleEditOrderWs`<br>`handleMessage`<br>`handleOrderWs`<br>`handleOrdersWs`<br>`handlePositionsWs`<br>`handleTickerWs`<br>`handleTradesWs`<br>`handleUserDataStreamSubscribe`<br>`requestId` | `auth-subscription-handler`<br>`event-dispatch-handler`<br>`request-id-helper`<br>`ws-api-response-handler` | `channel`<br>`error`<br>`generated-parser`<br>`listen-key`<br>`private-event`<br>`request-id`<br>`status-error`<br>`subscription-id`<br>`waiter-routing`
`ws-api-response-routing` | 8 | `Ccxt.Pro.Connection` | `resolve_or_reject_request_message/3` | `handleAccountStatusWs`<br>`handleBalanceWs`<br>`handleEditOrderWs`<br>`handleOrderWs`<br>`handleOrdersWs`<br>`handlePositionsWs`<br>`handleTickerWs`<br>`handleTradesWs` | `ws-api-response-handler` | `generated-parser`<br>`request-id`<br>`status-error`
`listen-key-auth` | 1 | `Ccxt.Pro.Connection` | `resolve_or_reject_request_message/3` | `handleUserDataStreamSubscribe` | `auth-subscription-handler` | `listen-key`<br>`request-id`<br>`subscription-id`
`listen-key-keepalive` | 1 | `Ccxt.Pro.Binance` | `keep_alive_listen_key/3` | - | - | `keepalive-endpoint`<br>`listen-key`<br>`raw-endpoint-routing`
`array-cache` | 5 | `Ccxt.Pro.ArrayCache`<br>`Ccxt.Pro.Connection` | `append/3`<br>`watch_private/3` | `loadBalanceSnapshot`<br>`loadPositionsSnapshot`<br>`setBalanceCache`<br>`setPositionsCache` | `cache-helper` | `array-cache`<br>`balance-delta`<br>`bounded-newest-first`<br>`limit`<br>`position-cache`<br>`position-timestamp`<br>`private-cache`<br>`private-update`<br>`snapshot-preload`
`orderbook-cache` | 7 | `Ccxt.Pro.Connection` | `handle_orderbook_delta/3`<br>`watch_order_book/4` | `fetchOrderBookSnapshot`<br>`handleDelta`<br>`handleDeltas`<br>`handleFetchOrderBook`<br>`handleOrderBook`<br>`handleOrderBookMessage`<br>`handleOrderBookSubscription` | `orderbook-cache` | `delta-cache`<br>`orderbook`<br>`sequence-check`<br>`snapshot`
`balance-cache` | 4 | `Ccxt.Pro.Connection` | `watch_private/3` | `loadBalanceSnapshot`<br>`loadPositionsSnapshot`<br>`setBalanceCache`<br>`setPositionsCache` | `cache-helper` | `array-cache`<br>`balance-delta`<br>`position-cache`<br>`position-timestamp`<br>`private-cache`<br>`private-update`<br>`snapshot-preload`
`positions-cache` | 5 | `Ccxt.Pro.Connection`<br>`Ccxt.Pro.PositionCache` | `put_all/3`<br>`watch_private/3` | `loadBalanceSnapshot`<br>`loadPositionsSnapshot`<br>`setBalanceCache`<br>`setPositionsCache` | `cache-helper` | `array-cache`<br>`balance-delta`<br>`event-timestamp`<br>`hashmap`<br>`position-cache`<br>`position-timestamp`<br>`private-cache`<br>`private-update`<br>`side-index`<br>`snapshot-preload`<br>`symbol-index`<br>`values`
`order-trade-cache` | 1 | `Ccxt.Pro.OrderCache` | `put/3` | - | - | `id-index`<br>`indexed-array-cache`<br>`order-update`<br>`trade-merge`
`private-event-routing` | 8 | `Ccxt.Pro.Connection` | `dispatch_private/2`<br>`handle_frame/2` | `handleAcountUpdate`<br>`handleBalance`<br>`handleMessage`<br>`handleMyLiquidation`<br>`handleMyTrade`<br>`handleOrder`<br>`handleOrderUpdate`<br>`handlePositions` | `event-dispatch-handler`<br>`private-stream-handler` | `channel`<br>`error`<br>`generated-parser`<br>`order-cache`<br>`order-trade-merge`<br>`private-cache`<br>`private-event`<br>`request-id`<br>`symbol-id-index`<br>`waiter-resolution`
`public-event-routing` | 9 | `Ccxt.Pro.Connection` | `dispatch/3`<br>`handle_frame/2` | `handleBidsAsks`<br>`handleFetchOHLCV`<br>`handleLiquidation`<br>`handleMarkPrices`<br>`handleMessage`<br>`handleOHLCV`<br>`handleTickers`<br>`handleTickersAndBidsAsks`<br>`handleTrade` | `event-dispatch-handler`<br>`public-stream-handler` | `channel`<br>`channel-message-hash`<br>`error`<br>`generated-parser`<br>`private-event`<br>`public-cache`<br>`request-id`<br>`waiter-resolution`
`parser-output` | 23 | `Ccxt.Pro.Connection` | `dispatch/3`<br>`dispatch_private/2`<br>`resolve_or_reject_request_message/3` | `handleAccountStatusWs`<br>`handleAcountUpdate`<br>`handleBalance`<br>`handleBalanceWs`<br>`handleBidsAsks`<br>`handleEditOrderWs`<br>`handleFetchOHLCV`<br>`handleLiquidation`<br>`handleMarkPrices`<br>`handleMyLiquidation`<br>`handleMyTrade`<br>`handleOHLCV`<br>`handleOrder`<br>`handleOrderUpdate`<br>`handleOrderWs`<br>`handleOrdersWs`<br>`handlePositions`<br>`handlePositionsWs`<br>`handleTickerWs`<br>`handleTickers`<br>`handleTickersAndBidsAsks`<br>`handleTrade`<br>`handleTradesWs` | `private-stream-handler`<br>`public-stream-handler`<br>`ws-api-response-handler` | `channel-message-hash`<br>`generated-parser`<br>`order-cache`<br>`order-trade-merge`<br>`private-cache`<br>`private-event`<br>`public-cache`<br>`request-id`<br>`status-error`<br>`symbol-id-index`<br>`waiter-resolution`
`error-rejection` | 3 | `Ccxt.Pro.Connection` | `handle_frame/2`<br>`maybe_reject/2`<br>`private_message_hashes/1` | `handleEventStreamTerminated`<br>`handleMessage`<br>`handleWsError` | `event-dispatch-handler` | `channel`<br>`error`<br>`eventStreamTerminated`<br>`private-event`<br>`private-waiter-reject`<br>`reject-all`<br>`request-id`
`cache-new-updates` | 3 | `Ccxt.Pro.CacheUpdates`<br>`Ccxt.Pro.Connection` | `append_symbol/3`<br>`private_new_updates_payload/4`<br>`public_new_updates_payload/4` | - | - | `all-new-updates`<br>`cached-payload-window`<br>`clear-updates`<br>`get-limit`<br>`nested-new-updates-by-symbol`<br>`new-updates-by-symbol`<br>`private-cache-updates`<br>`public-cache-updates`<br>`timestamp-new-updates`<br>`watch-any-new-updates`<br>`watch-private-new-updates`
`indexed-array-cache` | 1 | `Ccxt.Pro.IndexedArrayCache` | `put/3` | - | - | `hashmap`<br>`id-index`<br>`limit`<br>`move-to-newest`<br>`side-index`<br>`symbol-key-index`
`timestamp-array-cache` | 1 | `Ccxt.Pro.TimestampArrayCache` | `put/3` | - | - | `hashmap`<br>`limit`<br>`move-to-newest`<br>`replace-by-timestamp`<br>`timestamp-index`

## Method Categories

Category | Methods
--- | ---
`auth` | 8
`handler` | 26
`helper` | 14
`parser` | 5
`privateStream` | 6
`publicStream` | 14
`unsubscribe` | 10
`wsApi` | 24

## Drift Rule

`test/ccxt_pro_binance_test.exs` asserts that every required lifecycle
feature has manifest evidence and that key runtime owners remain wired to
the expected modules/functions. If upstream Binance Pro adds a new lifecycle
shape, the generator/runtime contract must add evidence here instead of
leaving it as implicit behavior.