MLI consumer (mylittleindicators) needs to subscribe to 18 stream types
that exist in `digdigdig3::core::types::StreamEvent` but were not yet
exposed through `digdigdig3-station::Stream`. Previously the station
only handled 9 streams (Ticker, Trade, Orderbook, Kline, MarkPrice,
FundingRate, OpenInterest, Liquidation, AggTrade). ~45 MLI indicators
silently failed because validator could not subscribe to the rest.
This release adds the remaining 18:
Numeric (11): IndexPrice, CompositeIndex, OptionGreeks, VolatilityIndex,
HistoricalVolatility, Basis, InsuranceFund, SettlementEvent,
PredictedFunding, FundingSettlement, RiskLimit.
Kline-family (3): MarkPriceKline(KlineInterval), IndexPriceKline(KlineInterval),
PremiumIndexKline(KlineInterval).
String-bearing (4): BlockTrade, AuctionEvent, MarketWarning, OrderbookL3.
For each variant 11 integration points wired:
- `Stream` enum + `to_kind()`
- `Kind` enum + `slug()` (filesystem path)
- `Event` enum + exchange/symbol/timestamp_ms/set_symbol arms
- `data/<name>.rs` with DataPoint impl + from_stream_event
- `data/mod.rs` re-exports
- `station::acquire_or_spawn` Kind::* spawn_forwarder arm
- `station::ws_request_for` StreamType mapping
- `station::EventFrom<T> for Event` impl
Binary record layout:
- Numeric types: fixed-size LE encode (ts + payload f64s).
- OptionGreeks: 72 B (8 ts + 8 Option<f64> as NaN-encoded f64).
- RiskLimit: 48 B (ts + u32 tier + 5 f64).
- Kline-family: 64 B (mirrors BarPoint).
- String-bearing (BlockTrade/AuctionEvent/MarketWarning/OrderbookL3):
RECORD_SIZE=8 stub with persistence disabled in `is_enabled_for`.
Events still flow in-memory to consumers; disk write skipped.
Kline upsert logic extended to cover the 3 mark/index/premium kline variants
in the forwarder.
Validation:
- RUSTFLAGS="-D warnings" cargo check --workspace --all-targets --all-features → clean
- cargo test -p digdigdig3 --lib --all-features → 830/0
- cargo test -p digdigdig3-station --tests → 75/0 + 4 ignored
- Live smoke: dig3 watch trades binance BTC-USDT → flowing