depth
The depth store kind: its columns, partitioning, what venue and symbol mean for it, and the producers that write it.
depth is one of the shapes the historical store holds. A stored series lives under a
kind= path segment, and that segment is the layout contract its producers and its consumers
have to agree on: the columns, how the leaf is partitioned, and what venue and symbol mean
for this particular kind. All of it is below, rendered from the same table the runtime dispatches
on.
One decoded row becomes a BookRow (exploded from vike_model::BookUpdate — ONE ROW PER LEVEL). The codec that owns the schema is BookCodec; the
store writes through append_depth and reads through scan_depth, and parts carry the Parquet metadata key vike.schema.book.
Identity
venue = the bridge venue id; symbol = the instrument. The CONFLATING L2 lane — a periodic full snapshot with every intermediate book state discarded. Same rows and same codec as book, a DIFFERENT series on purpose: the path IS the disclosure, so a consumer asking for book never receives conflated data
This is the field most often assumed and most often wrong, which is why it is stated per kind rather than once for the store.
Columns
Every Arrow column today's writer emits, in schema order, with the codec flavor that picks its Arrow type and nullability.
| Column | Flavor | Note |
|---|---|---|
ts | i64 | — |
local_ts | i64 | — |
seq | i64 | — |
kind | i8 | — |
is_bid | bool | — |
price | f64 | — |
size | f64 | — |
tick_size | f64 | — |
symbol_col | str_add | may be ABSENT ENTIRELY from a part sealed before the column was added |
Layout
| Property | Value |
|---|---|
| Partitioning | symbol |
| Grouped form | no — one series per part |
| In the cross-kind tick report | yes |
Traps
⚠ CONTRADICTION, pinned: crates/vike-backfill/src/regroup.rs's GROUPABLE_KINDS lists depth as having a grouped form, and the store does not have one. There is no append_depth_grouped; crates/vike-data/src/live_rec.rs's DEPTH carries append_grouped: None; and crates/vike-data/src/datafusion_hist.rs's migrate_series_to_group has no depth arm, so a planned fold reaches its catch-all and fails with has no grouped form. The consequence is a migrate_to_group dry run printing a depth plan that a real run cannot execute (it reports FAILED and leaves the source in place — no data loss). ⚠ Both halves of this kind's seam REFUSE by default: append_depth always has, and scan_depth joined it once its empty Ok was read as the fabricated "no data" it was. ⚠ And no backfill source serves this kind at all — crates/vike-backfill/src/caps.rs's PLANNABLE_KINDS deliberately omits it, so a depth gap can only ever be re-recorded live. ⚠ The §B stream-health markers (GapStart/Stale/LiveResume) ride THIS lane too since 2026-09-10, as the same zero-level seq: 0 placeholder rows the book row describes. They did not until then, and their absence is why a forty-day binance perp reconnect loop left a series that reads 40/40 days complete — this lane needs them MORE than book does, not less: book is a lossless chain a reader can audit for itself, while a hole in a conflating snapshot lane is invisible by construction.
Pinned rather than fixed: the contradiction is recorded with both sides named, so a reader meets it here instead of in production.
Known producers
Idempotency in this store is batch-level and keyed on a commit-key string, never on per-row value dedup. Two producers that collide on one template silently no-op each other's appends, and a producer that changes its template re-admits history it already wrote — both invisible unless the shapes are written side by side.
| Producer | Commit-key template |
|---|---|
crates/vike-data/src/live_rec.rs | live-{venue}-{symbol}-{}-{first_ts}-{last_ts}-{seq} |
⚠ That list is observed, not exhaustive, and no gate can make it so: a commit key is an ordinary string argument, so proving the list complete would mean following every call in the workspace. What is gated per listed entry is that the producer exists and spells the template verbatim. Read it as "these producers write this kind", never as "only these do".
Where this comes from
vike_data::store_kind::STORE_KINDS, exported as rosters.json at every release. The store's
own gate derives the live kind set from the code — the series directory literals, the compaction
dispatch and the write verbs — and fails until a new kind has a row, so this page cannot describe
a shape the store does not write.