Kraken WS v2 book channel does not send deletes for levels evicted from
its top-N window; without client-side truncation those levels lingered
forever as phantom quotes, eventually crossing the local book (bid >= ask)
and feeding the engine a fake permanent arbitrage (~$62.9M bogus P&L).
- BookSide.truncate() removes levels beyond the best depth prices from
the internal map (not just the emitted array)
- KrakenConnector uses depth 10 consistently (subscription + LocalBook)
and truncates both sides after every update
- ExchangeConnector.emit() drops internally crossed books, logs and
forces a resync (book reset + reconnect for a fresh snapshot)
- Unit tests for truncation and the crossed-book guard
- OpenSpec: order-book-integrity spec; change archived (2026-07-19)
Refs: Linear WAY-77
Co-authored-by: Cursor <cursoragent@cursor.com>