Decided and not yet
What the language has decided, what it has deferred, and what it will not do.
A language’s edges are as much a part of it as its middle. Everything below was decided rather than forgotten, and each row says where the decision is written down. Nothing here is a bug, and nothing here is a promise.
Draft 1 ended with ten open questions; change set 04 answered most, the implementation settled several more, and the platform measured two. Each row below is either decided, with the section that now states it, or open, with what is missing.
| # | Question | Status |
|---|---|---|
| 1 | as of on every layer |
decided: the engine reads cold storage for every layer (ADR-018); §11 |
| 2 | Instrument identity | decided: an instrument is a market code, BTC-PERP; §8.1 |
| 3 | Capability registry history | decided: not versioned; a historical answer uses the registry as it stands. Open in part: the decision said a response would state that moment as capabilities_as_of, and nothing writes it (§26) |
| 4 | Units of oi, volume_24h, depth |
decided: requested per query, every value states its own; §8.5 |
| 5 | Funding on oracle venues | deferred: no oracle venue is collected |
| 6 | Derived candle rule | decided: a derived candle exists only when every base minute exists; §7.2 |
| 7 | Freshness defaults | decided: measured cadences sit well inside them; §8.4 |
| 8 | Settle window | decided: measured, 120 s; §11.5 |
| 9 | Spot selection in DQL and trade-tape functions | DQL remains perpetual-only; market endpoints support spot and trade events have separate V2 endpoints; §17.1 below |
| 10 | Public tags | moot: alerts left the API; §12.3 |
| 11 | Mark and index candles | decided: Kraken publishes them, Hyperliquid does not; §8.6 |
| 12 | Cross-instrument references | decided in the bounded form ref(INSTRUMENT, expr [, VENUE]) (C34-01, task 317); §7.4c. The join form stays out, §17.1 |
| 13 | Book levels under as of |
decided: metrics only, never the raw book; §7.4a |
| 14 | Contract rules per listing | decided: in the reference layer where the venue publishes them; §8.2 |
| 15 | ADR-016 supersession | decided: yes (ADR-018) |
| 17 | Funding normalisation | decided: identity on both venues |
| 18 | v1 aliasing | decided: no |
| 19 | Batch and rate numbers | decided: §13.1 |
| 21 | Band reference price | decided: the mid; §7.4a |
| 22 | Band sets per group | decided: platform-wide; §7.4a |
| 23 | Book cadence | decided: live |
| 25 | Kraken’s funding interval | decided 2026-10-09 (owner): the documented constant 1h in the registry, provenance venue_documentation (C29-02) |
| 26 | capabilities_as_of |
open: decided in C4-03, absent from the code. Either every /v2 answer carries the registry instant it was resolved against, or the decision is withdrawn and §11.2 says the registry is always current |
| 27 | Which venues /v2 shows |
open: /v2 shows a venue only once its public code is published. Bybit and OKX are collected and invisible there. Either publishing is part of bringing a venue online, or the language shows collected venues and marks them unpublished |
17.1 Not yet
Section titled “17.1 Not yet”Deliberately absent from DQL, with the reason. None of these is a gap to be filled quietly: each would change what a query means, so each needs a change set of its own.
| Feature | Why not yet |
|---|---|
Boolean series and count_if(condition, n) |
A boolean series would need a second type of series with its own null rules; the useful cases (crossover, gaps) are already functions |
Cross-instrument references as a join (BTC-PERP.mark inside an ETH-PERP row, anywhere, over any number of instruments) |
Evaluation is per instrument by construction (§5); a free reference makes the universe a join and the cost unbounded. Since change set 34 the bounded form exists: ref(INSTRUMENT, expr [, VENUE]) reads one listing, at most four targets a query (§7.4c) |
| Sub-minute sampling | The stored granularity is one second for snapshot layers, but a series at a sub-minute period would imply candles nobody published; snapshots/history with an interval answers the same question honestly |
mark_sampled and other synthetic series |
A series built by DEBYKO from its own samples is not what a venue published, and the language’s rule is that a value is what a venue published |
| Spot instruments, trade-tape functions (VWAP, trade counts) | DQL has room for future market filters (market = spot, trades_1m), but these are not part of the language. Since change set 37, market-data endpoints list and read spot alongside perpetuals with kind=spot or kind=all; the default remains perpetual. Spot venues, instruments and selected measurements carry their actual market kind. DQL parsing and screening, and Agent, remain perpetual-only and reject a market-kind selector. Stored trade events are available through the separate V2 trade-history and trade-stream endpoints; they do not add trade-tape functions to DQL. See change set 37. Liquidations are not tape functions: a venue publishes them as events of their own, and their totals are §7.4b (C8-01) |
User-defined functions, variables, let |
A query is one expression on purpose: it can be printed, canonicalised, hashed and replayed |