# Seven-venue BTC volume share and realised volatility, one week -- mcp side ## Question Venue share and realised vol. For BTC perpetuals on Hyperliquid, edgeX, ApeX, Pacifica, dYdX, Paradex and Nado over 2026-09-21 00:00 to 2026-09-28 00:00 UTC: each venue's total traded notional in USD and its share of the seven-venue total; and each venue's realised volatility of 1-minute log returns, annualised. Is realised vol consistent across venues? If not, explain the outliers. ## System prompt You are an agent assisting a quantitative researcher. Work the question end to end: find the data, compute, check your own numbers, and make the judgement calls a careful quant would make. You have a Bash tool; Python 3 with duckdb, pandas, pyarrow and numpy is at /tmp/peerfeed-a21/venv/bin/python. Work inside your current directory. When you are done, end with a section headed FINAL ANSWER that gives every number asked for and states each judgement call you made. Your only source of market data is PeerFeed's market-data MCP server (the tools named mcp__peerfeed__*). There is no market data on local disk. ## [tool call 1] mcp__peerfeed__describe_environment {} ## [tool result] { "call_id": "a96a3e45e40b4967", "datasets": [ "aevo/orderbook", "aevo/ticker", "apex/orderbook", "apex/trades", "aster/usdm/trades", "bybit/liquidations", "derive/auctions", "derive/margin", "derive/trades", "dydx/orderbook", "dydx/trades", "edgex/depth", "edgex/ticker", "edgex/trades", "extended/funding", "extended/mark_price", "extended/orderbook", "gains/registerTrade", "gains/unregisterTrade", "gains/updatePositionSize", "gmx/deposits", "gmx/orders", "gmx/withdrawals", "grvt/book", "grvt/ticker", "grvt/trades", "hyperliquid/activeAssetCtx", "hyperliquid/liquidation_events", "hyperliquid/liquidation_map", "hyperliquid/liquidation_map_accuracy", "hyperliquid/risk_positions", "hyperliquid/risk_scan_log", "hyperliquid/risk_state_census", "hyperliquid/risk_traders", "hyperliquid/scan_audits", "hyperliquid/trades", "kalshi/orderbook_delta", "kalshi/ticker", "kalshi/trade", "lighter/market_stats", "lighter/trades", "mexc/funding_rate", "nado/best_bid_offer", "nado/book_depth", "nado/funding_payment", "nado/funding_rate", "nado/liquidation", "nado/trades", "pacifica/book", "pacifica/prices", "pacifica/trades", "paradex/bbo", "paradex/trades", "polymarket/book", "polymarket/last_trade_price", "polymarket_catalog/metadata", "polymarket_chain/redemptions", "polymarket_chain/resolutions", "polymarket_chain/trades", "rho/orderbook", "rho/ticker", "rho/trades" ], "feed_defaults": { "kind": "trades", "serves_bars": true, "clock": "exchange (the venue's own timestamp)", "direction_measured": true, "note": "Everything not listed in feed_exceptions follows these. Call describe_dataset('') for one dataset's full declaration — it takes a bare name, no symbol needed." }, "feed_exceptions": { "state_no_bars": [ "aevo/orderbook", "aevo/ticker", "apex/orderbook", "derive/auctions", "derive/margin", "dydx/orderbook", "edgex/depth", "edgex/ticker", "extended/funding", "extended/mark_price", "extended/orderbook", "gains/registerTrade", "gains/unregisterTrade", "gains/updatePositionSize", "gmx/deposits", "gmx/orders", "gmx/withdrawals", "grvt/book", "grvt/ticker", "hyperliquid/activeAssetCtx", "hyperliquid/liquidation_map", "hyperliquid/liquidation_map_accuracy", "hyperliquid/risk_scan_log", "hyperliquid/risk_state_census", "hyperliquid/risk_traders", "hyperliquid/scan_audits", "kalshi/orderbook_delta", "kalshi/ticker", "lighter/market_stats", "mexc/funding_rate", "nado/best_bid_offer", "nado/book_depth", "nado/funding_payment", "nado/funding_rate", "pacifica/book", "pacifica/prices", "paradex/bbo", "polymarket/book", "polymarket_catalog/metadata", "polymarket_chain/redemptions", "polymarket_chain/resolutions", "polymarket_chain/trades", "rho/orderbook", "rho/ticker" ], "observation_clock": [ "aevo/orderbook", "apex/orderbook", "dydx/orderbook", "edgex/depth", "gains/registerTrade", "gains/unregisterTrade", "gains/updatePositionSize", "hyperliquid/activeAssetCtx", "kalshi/ticker", "lighter/market_stats", "mexc/funding_rate", "nado/book_depth", "nado/trades", "paradex/bbo", "polymarket/book", "polymarket_chain/redemptions", "polymarket_chain/resolutions", "polymarket_chain/trades", "rho/orderbook", "rho/ticker" ], "direction_unmeasured": [ "aevo/orderbook", "aevo/ticker", "apex/orderbook", "bybit/liquidations", "derive/auctions", "derive/margin", "dydx/orderbook", "edgex/depth", "edgex/ticker", "edgex/trades", "extended/funding", "extended/mark_price", "extended/orderbook", "gains/registerTrade", "gains/unregisterTrade", "gains/updatePositionSize", "gmx/deposits", "gmx/orders", "gmx/withdrawals", "grvt/book", "grvt/ticker", "grvt/trades", "hyperliquid/activeAssetCtx", "hyperliquid/liquidation_map", "hyperliquid/liquidation_map_accuracy", "hyperliquid/risk_positions", "hyperliquid/risk_scan_log", "hyperliquid/risk_state_census", "hyperliquid/risk_traders", "hyperliquid/scan_audits", "kalshi/orderbook_delta", "kalshi/ticker", "lighter/market_stats", "lighter/trades", "mexc/funding_rate", "nado/best_bid_offer", "nado/book_depth", "nado/funding_payment", "nado/funding_rate", "nado/liquidation", "pacifica/book", "pacifica/prices", "pacifica/trades", "paradex/bbo", "polymarket/book", "polymarket_catalog/metadata", "polymarket_chain/redemptions", "polymarket_chain/resolutions", "polymarket_chain/trades", "rho/orderbook", "rho/ticker" ], "what_these_mean": "state_no_bars: snapshots, not events — no price/size column, get_ohlcv and get_activity_bars refuse them, use run_query. observation_clock: served on our recorded_at because the venue timestamp is a state epoch that does not advance while the state is unchanged. direction_unmeasured: canonical `side` reads 'unknown'; do NOT infer direction from the raw column — coinbase reports the MAKER's side, so the obvious reading is backwards there." }, "access_mode": "public", "catalog_ready": true, "data_quality": { "catalog_built": true, "mean_shard_coverage": 0.442, "dataset_days_measured": 9405, "dataset_days_below_threshold": 7603, "unreadable_days": 0, "warning": "PARTIAL DATA: shards in this range hold only ~44% of their 2-hour windows on average (known upstream issue: shards built from only their first ~31 minutes of data). Bars at 1h and coarser are computed from a fraction of the trades, so their high, low, volume and close are not representative. Gaps are real missing data, not quiet markets.", "what_this_means": "Shards exist for every window, but each holds only part of it, and the missing part is systematically the later portion of each 2-hour window — not a random sample. Bars at 1h and coarser are computed from a fraction of the trades. Treat volume, VWAP and any time-of-day analysis as unreliable until this is resolved upstream." }, "excluded_datasets": [ { "dataset": "binance/coinm/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "binance/spot/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "bingx/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "bitget/ticker", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "bitget/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "bybit/tickers", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "bybit/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "coinbase/ticker", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "coinbase/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "deribit/option_ticker", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "deribit/option_trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "deribit/perpetual", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "deribit/ticker", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "deribit/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "htx/ticker", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "htx/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "kraken/ticker", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "kraken/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "kucoin/instrument", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "kucoin/ticker", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "kucoin/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "mexc/tickers", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "mexc/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "okx/spot/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "okx/swap/trades", "category": "cex", "reason": "cex venue: raw trade data is not served publicly. Only derived types (liquidations, funding_rate, funding, open_interest) are, and the licensing review for computed series over CEX data is still open." }, { "dataset": "weather_asos/asos_metar", "category": "other", "reason": "other venue: not cleared for public access." }, { "dataset": "weather_ecmwf/forecast", "category": "other", "reason": "other venue: not cleared for public access." }, { "dataset": "weather_gefs/forecast", "category": "other", "reason": "other venue: not cleared for public access." }, { "dataset": "weather_gfs/forecast", "category": "other", "reason": "other venue: not cleared for public access." }, { "dataset": "weather_hrrr/forecast", "category": "other", "reason": "other venue: not cleared for public access." } ], "instrument_id_format": "dataset:symbol", "observation_timed_datasets": [ "aevo/orderbook", "apex/orderbook", "dydx/orderbook", "edgex/depth", "gains/registerTrade", "gains/unregisterTrade", "gains/updatePositionSize", "hyperliquid/activeAssetCtx", "kalshi/ticker", "lighter/market_stats", "mexc/funding_rate", "nado/book_depth", "nado/trades", "paradex/bbo", "polymarket/book", "polymarket_chain/redemptions", "polymarket_chain/resolutions", "polymarket_chain/trades", "rho/orderbook", "rho/ticker" ], "run_query_table_t": { "contents": "1-minute OHLCV bars (raw trades are not reachable)", "columns": { "instrument": "VARCHAR", "ts": "TIMESTAMPTZ (UTC), bar start", "open": "DOUBLE", "high": "DOUBLE", "low": "DOUBLE", "close": "DOUBLE", "volume": "DOUBLE", "trades": "BIGINT", "vwap": "DOUBLE" }, "min_trades_per_bar": 3 }, "granularities": [ "1m", "5m", "15m", "1h", "4h", "1d" ], "funding": { "tool": "get_funding", "datasets": { "edgex/ticker": { "interval_hours": 4 }, "extended/funding": { "interval_hours": 1 }, "hyperliquid/activeAssetCtx": { "interval_hours": 1 }, "nado/funding_rate": { "interval_hours": 24 }, "pacifica/prices": { "interval_hours": 1 } }, "note": "Rates are served with their interval and normalised to per-hour, per-8h and APR; never compare raw rates across venues." }, "limits": { "max_bars_per_call": 5000, "max_query_rows": 5000, "max_shards_per_call": 400, "shard_hours": 2, "calls_per_minute": 60 }, "sql_dialect": "DuckDB (read-only, single SELECT/WITH statement, must read from `t`)", "coverage_scope": "this host only — reflects what this machine aggregated" } ## [agent thinking] ## [tool call 2] mcp__peerfeed__list_instruments { "contains": "BTC", "limit": 200 } ## [tool call 3] mcp__peerfeed__data_quality {} ## [tool result] Error: result (65,143 characters across 2,208 lines) exceeds maximum allowed tokens. Output has been saved to ~/.claude/projects/-tmp-peerfeed-a21-work-t3-mcp/cdc88b4c-5171-46e8-b792-fc6d2e293f63/tool-results/mcp-peerfeed-list_instruments-1790712749988.txt. Format: Plain text Use offset and limit parameters to read specific portions of the file, search within it for specific content, and jq to make structured queries. REQUIREMENTS FOR SUMMARIZATION/ANALYSIS/REVIEW: - You MUST read the content from the file at ~/.claude/projects/-tmp-peerfeed-a21-work-t3-mcp/cdc88b4c-5171-46e8-b792-fc6d2e293f63/tool-results/mcp-peerfeed-list_instruments-1790712749988.txt in sequential chunks until 100% of the content has been read. - If you receive truncation warnings when reading the file, reduce the chunk size until you have read 100% of the content without truncation. - Before producing ANY summary or analysis, you MUST explicitly describe what portion of the content you have read. ***If you did not read the entire content, you MUST explicitly state this.*** - If after a few attempts you cannot read the file (file not found, lines too long for Read's offset/limit, no shell access), STOP retrying. Summarize what you were able to read, explicitly state which portion you could not read and why, and proceed. ## [tool result] { "call_id": "f7a3cbdfd5954795", "findings": [ { "check": "window_coverage", "dataset": "binance/coinm/trades", "severity": "critical", "days_affected": 251, "worst_value": 0.0013, "healthy_value": 0.9915143344907408, "first_day": "2025-12-19", "last_day": "2026-09-17", "message": "holds ~0% of its window, 0% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 336, "files": 12, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "window_coverage", "dataset": "binance/spot/trades", "severity": "critical", "days_affected": 251, "worst_value": 0.0758, "healthy_value": 0.9916491203703703, "first_day": "2025-12-19", "last_day": "2026-09-17", "message": "holds ~8% of its window, 8% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 5289, "files": 12, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "window_coverage", "dataset": "hyperliquid/trades", "severity": "critical", "days_affected": 224, "worst_value": 0.0916, "healthy_value": 0.9916116666666666, "first_day": "2025-11-18", "last_day": "2026-09-16", "message": "holds ~9% of its window, 9% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 12222, "files": 1, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "window_coverage", "dataset": "derive/trades", "severity": "critical", "days_affected": 223, "worst_value": 0.0664, "healthy_value": 0.9878483217592593, "first_day": "2025-11-18", "last_day": "2026-09-16", "message": "holds ~7% of its window, 7% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 1, "files": 1, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "window_coverage", "dataset": "okx/spot/trades", "severity": "critical", "days_affected": 223, "worst_value": 0.0915, "healthy_value": 0.9916431655092592, "first_day": "2025-12-20", "last_day": "2026-09-16", "message": "holds ~9% of its window, 9% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 306, "files": 1, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "window_coverage", "dataset": "bybit/trades", "severity": "critical", "days_affected": 222, "worst_value": 0.0917, "healthy_value": 0.9916549884259258, "first_day": "2025-12-20", "last_day": "2026-09-16", "message": "holds ~9% of its window, 9% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 56405, "files": 1, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "window_coverage", "dataset": "okx/swap/trades", "severity": "critical", "days_affected": 221, "worst_value": 0.0917, "healthy_value": 0.9916497569444445, "first_day": "2025-12-20", "last_day": "2026-09-16", "message": "holds ~9% of its window, 9% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 41841, "files": 1, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "window_coverage", "dataset": "deribit/trades", "severity": "critical", "days_affected": 218, "worst_value": 0.0, "healthy_value": 0.9915194270833334, "first_day": "2025-12-23", "last_day": "2026-09-16", "message": "holds ~0% of its window, 0% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 3, "files": 1, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "window_coverage", "dataset": "aster/usdm/trades", "severity": "critical", "days_affected": 217, "worst_value": 0.0666, "healthy_value": 0.9916085069444445, "first_day": "2025-12-19", "last_day": "2026-09-17", "message": "holds ~7% of its window, 7% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 507, "files": 1, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "window_coverage", "dataset": "coinbase/trades", "severity": "critical", "days_affected": 215, "worst_value": 0.0916, "healthy_value": 0.991646617037037, "first_day": "2026-01-01", "last_day": "2026-09-16", "message": "holds ~9% of its window, 9% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 15515, "files": 1, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "window_coverage", "dataset": "dydx/trades", "severity": "critical", "days_affected": 215, "worst_value": 0.0906, "healthy_value": 0.9845356423611111, "first_day": "2026-01-01", "last_day": "2026-09-16", "message": "holds ~9% of its window, 9% of normal (this feed's healthy shards span ~98% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 32015, "files": 1, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "window_coverage", "dataset": "pacifica/trades", "severity": "critical", "days_affected": 215, "worst_value": 0.0, "healthy_value": 0.991618900462963, "first_day": "2025-12-21", "last_day": "2026-09-16", "message": "holds ~0% of its window, 0% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 3, "files": 1, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "window_coverage", "dataset": "edgex/trades", "severity": "critical", "days_affected": 214, "worst_value": 0.0916, "healthy_value": 0.9916170023148148, "first_day": "2025-12-19", "last_day": "2026-09-16", "message": "holds ~9% of its window, 9% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 251, "files": 1, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "window_coverage", "dataset": "nado/trades", "severity": "critical", "days_affected": 214, "worst_value": 0.0916, "healthy_value": 0.9914561689814815, "first_day": "2026-01-01", "last_day": "2026-09-16", "message": "holds ~9% of its window, 9% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 50, "files": 1, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "window_coverage", "dataset": "polymarket/last_trade_price", "severity": "critical", "days_affected": 213, "worst_value": 0.2307, "healthy_value": 0.9913654224537036, "first_day": "2025-11-18", "last_day": "2026-09-16", "message": "holds ~23% of its window, 23% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 3988, "files": 24, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "window_coverage", "dataset": "rho/trades", "severity": "critical", "days_affected": 213, "worst_value": 0.0912, "healthy_value": 0.990761244212963, "first_day": "2026-01-01", "last_day": "2026-09-16", "message": "holds ~9% of its window, 9% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 5716, "files": 1, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "window_coverage", "dataset": "apex/trades", "severity": "critical", "days_affected": 211, "worst_value": 0.0804, "healthy_value": 0.9916140277777777, "first_day": "2025-12-21", "last_day": "2026-09-16", "message": "holds ~8% of its window, 8% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 1158, "files": 1, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "timestamp_plausibility", "dataset": "dydx/trades", "severity": "critical", "days_affected": 208, "worst_value": 746.9446, "healthy_value": 0.0, "first_day": "2025-12-31", "last_day": "2026-09-19", "message": "timestamps reach 746.9 day(s) outside the day they are filed under — stale replay or a unit error", "detail": { "earliest": "2024-09-02 03:19:49.251000+02:00", "latest": "2026-09-20 01:58:57.215000+02:00", "days_before_window": 746.945, "days_after_window": 0.0 } }, { "check": "window_coverage", "dataset": "kraken/trades", "severity": "critical", "days_affected": 205, "worst_value": 0.0916, "healthy_value": 0.9916537716956019, "first_day": "2025-12-30", "last_day": "2026-09-16", "message": "holds ~9% of its window, 9% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 712, "files": 1, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "window_coverage", "dataset": "kalshi/trade", "severity": "critical", "days_affected": 199, "worst_value": 0.1864, "healthy_value": 0.9908238049768519, "first_day": "2025-12-29", "last_day": "2026-09-16", "message": "holds ~19% of its window, 19% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 93, "files": 12, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "timestamp_plausibility", "dataset": "edgex/trades", "severity": "critical", "days_affected": 169, "worst_value": 654.6448, "healthy_value": 0.0, "first_day": "2025-12-15", "last_day": "2026-09-19", "message": "timestamps reach 654.6 day(s) outside the day they are filed under — stale replay or a unit error", "detail": { "earliest": "2024-11-11 09:31:32.564000+01:00", "latest": "2026-08-14 10:02:33.189000+02:00", "days_before_window": 654.645, "days_after_window": 0.0 } }, { "check": "window_coverage", "dataset": "paradex/trades", "severity": "critical", "days_affected": 159, "worst_value": 0.2143, "healthy_value": 0.9809444212962962, "first_day": "2026-01-04", "last_day": "2026-09-16", "message": "holds ~21% of its window, 22% of normal (this feed's healthy shards span ~98% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 4, "files": 1, "reference": "feed's own post-fix median", "reference_days": 7 } }, { "check": "timestamp_plausibility", "dataset": "apex/trades", "severity": "critical", "days_affected": 103, "worst_value": 95.3787, "healthy_value": 0.0, "first_day": "2025-12-23", "last_day": "2026-06-12", "message": "timestamps reach 95.4 day(s) outside the day they are filed under — stale replay or a unit error", "detail": { "earliest": "2025-10-26 15:54:36.818000+01:00", "latest": "2026-01-31 00:58:59.911000+01:00", "days_before_window": 95.379, "days_after_window": 0.0 } }, { "check": "shard_completeness", "dataset": "hyperliquid/risk_positions", "severity": "critical", "days_affected": 88, "worst_value": 0.1667, "healthy_value": 1.0, "first_day": "2026-06-14", "last_day": "2026-09-28", "message": "2 of 12 2h shards exist for this day on this host", "detail": { "shards_present": 2, "shards_expected": 12, "rows": 18587 } }, { "check": "shard_completeness", "dataset": "hyperliquid/risk_traders", "severity": "critical", "days_affected": 88, "worst_value": 0.1667, "healthy_value": 1.0, "first_day": "2026-06-14", "last_day": "2026-09-28", "message": "2 of 12 2h shards exist for this day on this host", "detail": { "shards_present": 2, "shards_expected": 12, "rows": 215741 } }, { "check": "shard_completeness", "dataset": "mexc/funding_rate", "severity": "critical", "days_affected": 82, "worst_value": 0.1667, "healthy_value": 1.0, "first_day": "2026-01-02", "last_day": "2026-09-28", "message": "2 of 12 2h shards exist for this day on this host", "detail": { "shards_present": 2, "shards_expected": 12, "rows": 1974 } }, { "check": "timestamp_plausibility", "dataset": "mexc/trades", "severity": "critical", "days_affected": 82, "worst_value": 20725.0, "healthy_value": 0.0, "first_day": "2026-07-01", "last_day": "2026-09-29", "message": "timestamps reach 20725.0 day(s) outside the day they are filed under — stale replay or a unit error", "detail": { "earliest": "1970-01-01 01:00:01+01:00", "latest": "1970-01-01 01:00:02+01:00", "days_before_window": 20725.0, "days_after_window": 0.0 } }, { "check": "timestamp_plausibility", "dataset": "extended/mark_price", "severity": "critical", "days_affected": 72, "worst_value": 20715.0, "healthy_value": 0.0, "first_day": "2026-07-01", "last_day": "2026-09-19", "message": "timestamps reach 20715.0 day(s) outside the day they are filed under — stale replay or a unit error", "detail": { "earliest": "1970-01-01 01:00:00+01:00", "latest": "2026-09-20 01:58:59.885000+02:00", "days_before_window": 20715.0, "days_after_window": 0.0 } }, { "check": "shard_completeness", "dataset": "weather_ecmwf/forecast", "severity": "critical", "days_affected": 69, "worst_value": 0.1667, "healthy_value": 1.0, "first_day": "2026-07-01", "last_day": "2026-09-28", "message": "2 of 12 2h shards exist for this day on this host", "detail": { "shards_present": 2, "shards_expected": 12, "rows": 4032 } }, { "check": "timestamp_plausibility", "dataset": "grvt/trades", "severity": "critical", "days_affected": 68, "worst_value": 315.2379, "healthy_value": 0.0, "first_day": "2026-07-01", "last_day": "2026-09-17", "message": "timestamps reach 315.2 day(s) outside the day they are filed under — stale replay or a unit error", "detail": { "earliest": "2025-11-05 19:17:25.740000+01:00", "latest": "2026-09-18 01:39:46.148926+02:00", "days_before_window": 315.238, "days_after_window": 0.0 } }, { "check": "shard_completeness", "dataset": "weather_gefs/forecast", "severity": "critical", "days_affected": 68, "worst_value": 0.1667, "healthy_value": 1.0, "first_day": "2026-07-01", "last_day": "2026-09-28", "message": "2 of 12 2h shards exist for this day on this host", "detail": { "shards_present": 2, "shards_expected": 12, "rows": 124992 } }, { "check": "shard_completeness", "dataset": "weather_gfs/forecast", "severity": "critical", "days_affected": 68, "worst_value": 0.1667, "healthy_value": 1.0, "first_day": "2026-07-01", "last_day": "2026-09-28", "message": "2 of 12 2h shards exist for this day on this host", "detail": { "shards_present": 2, "shards_expected": 12, "rows": 4032 } }, { "check": "timestamp_plausibility", "dataset": "lighter/trades", "severity": "critical", "days_affected": 62, "worst_value": 106.3805, "healthy_value": 0.0, "first_day": "2026-07-01", "last_day": "2026-09-19", "message": "timestamps reach 106.4 day(s) outside the day they are filed under — stale replay or a unit error", "detail": { "earliest": "2026-06-02 16:52:07.829000+02:00", "latest": "2026-09-18 01:58:59.212000+02:00", "days_before_window": 106.38, "days_after_window": 0.0 } }, { "check": "window_coverage", "dataset": "polymarket/book", "severity": "critical", "days_affected": 60, "worst_value": 0.1379, "healthy_value": 0.991547667824074, "first_day": "2026-06-01", "last_day": "2026-09-16", "message": "holds ~14% of its window, 14% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 526815, "files": 25193, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "timestamp_plausibility", "dataset": "hyperliquid/trades", "severity": "critical", "days_affected": 57, "worst_value": 655.973, "healthy_value": 0.0, "first_day": "2025-10-25", "last_day": "2025-12-31", "message": "timestamps reach 656.0 day(s) outside the day they are filed under — stale replay or a unit error", "detail": { "earliest": "2024-03-15 01:38:51.897000+01:00", "latest": "2025-12-31 23:29:59.680000+01:00", "days_before_window": 655.973, "days_after_window": 0.0 } }, { "check": "timestamp_plausibility", "dataset": "rho/trades", "severity": "critical", "days_affected": 54, "worst_value": 26.0133, "healthy_value": 0.0, "first_day": "2026-06-09", "last_day": "2026-09-19", "message": "timestamps reach 26.0 day(s) outside the day they are filed under — stale replay or a unit error", "detail": { "earliest": "2026-08-02 01:40:47.552000+02:00", "latest": "2026-08-29 00:30:58.630000+02:00", "days_before_window": 26.013, "days_after_window": 0.0 } }, { "check": "window_coverage", "dataset": "bitget/ticker", "severity": "critical", "days_affected": 52, "worst_value": 0.05, "healthy_value": 0.9591036211069024, "first_day": "2026-07-01", "last_day": "2026-09-22", "message": "holds ~5% of its window, 5% of normal (this feed's healthy shards span ~96% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 6610, "files": 1, "reference": "feed's own post-fix median", "reference_days": 6 } }, { "check": "window_coverage", "dataset": "mexc/funding_rate", "severity": "critical", "days_affected": 47, "worst_value": 0.0001, "healthy_value": 0.7068188888888888, "first_day": "2026-01-01", "last_day": "2026-09-20", "message": "holds ~0% of its window, 0% of normal (this feed's healthy shards span ~71% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 1, "files": 1, "reference": "feed's own post-fix median", "reference_days": 5 } }, { "check": "window_coverage", "dataset": "coinbase/ticker", "severity": "critical", "days_affected": 45, "worst_value": 0.0917, "healthy_value": 0.9916657523148148, "first_day": "2026-07-01", "last_day": "2026-09-16", "message": "holds ~9% of its window, 9% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 2295, "files": 1, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "window_coverage", "dataset": "htx/ticker", "severity": "critical", "days_affected": 45, "worst_value": 0.0917, "healthy_value": 0.9916605150462963, "first_day": "2026-07-01", "last_day": "2026-09-16", "message": "holds ~9% of its window, 9% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 6308, "files": 1, "reference": "feed's own post-fix median", "reference_days": 12 } } ], "counts_by_severity": { "critical": 441, "warn": 301 }, "checks_run": [ "catalog_staleness", "day_continuity", "instrument_scope", "shard_completeness", "staleness", "timestamp_plausibility", "volume_anomaly", "window_coverage" ], "checks_not_run": null, "scope_note": "Every check ran.", "note": "Magnitudes are measured, not asserted: each finding reports the value and the value it would take if healthy.", "findings_omitted": "702 further finding(s) not returned; showing the 40 worst by severity of 742. counts_by_severity above is COMPLETE and counts them all. Narrow with dataset= or severity= to see the rest -- a whole-estate listing is a 78k-token response." } ## [agent thinking] ## [tool call 4] Bash { "command": "cd ~/.claude/projects/-tmp-peerfeed-a21-work-t3-mcp/cdc88b4c-5171-46e8-b792-fc6d2e293f63/tool-results/; head -c 1500 mcp-peerfeed-list_instruments-1790712749988.txt; echo; grep -oE '\"(hyperliquid/trades|edgex/trades|apex/trades|pacifica/trades|dydx/trades|paradex/trades|nado/trades):[^\"]*BTC[^\"]*\"' mcp-peerfeed-list_instruments-1790712749988.txt | sort -u", "description": "Inspect instruments list for BTC symbols" } ## [tool result] { "call_id": "e4fd68a6cbd14989", "instruments": [ { "instrument": "dydx/orderbook:BTC-USD", "dataset": "dydx/orderbook", "symbol": "BTC-USD", "first_day": "2026-09-03", "last_day": "2026-09-29", "days": 25, "rows": 146425161, "granularity": "snapshot (state)", "timestamp_semantics": "observation" }, { "instrument": "hyperliquid/trades:BTC", "dataset": "hyperliquid/trades", "symbol": "BTC", "first_day": "2025-10-25", "last_day": "2026-09-29", "days": 321, "rows": 50731192, "granularity": "tick (trades)", "timestamp_semantics": "exchange" }, { "instrument": "hyperliquid/risk_positions:BTC", "dataset": "hyperliquid/risk_positions", "symbol": "BTC", "first_day": "2026-06-14", "last_day": "2026-09-29", "days": 56, "rows": 24828349, "granularity": "tick (trades)", "timestamp_semantics": "exchange" }, { "instrument": "paradex/trades:BTC-USD-PERP", "dataset": "paradex/trades", "symbol": "BTC-USD-PERP", "first_day": "2026-01-04", "last_day": "2026-09-29", "days": 175, "rows": 11693901, "granularity": "tick (trades)", "timestamp_semantics": "exchange" }, { "instrument": "apex/trades:BTCUSDT", "dataset": "apex/trades", "symbol": "BTCUSDT", "first_day": "2025-12-21", "last_day": "2026-09-29", "days": "apex/trades:BTCUSDT" "edgex/trades:BTCUSD" "hyperliquid/trades:BTC" "pacifica/trades:BTC" "paradex/trades:BTC-USD-PERP" Shell cwd was reset to /tmp/peerfeed-a21/work-t3-mcp ## [agent thinking] ## [tool call 5] Bash { "command": "cd ~/.claude/projects/-tmp-peerfeed-a21-work-t3-mcp/cdc88b4c-5171-46e8-b792-fc6d2e293f63/tool-results/; grep -oE '\"instrument\": \"(dydx|nado|edgex|apex|pacifica|paradex|hyperliquid)/trades:[^\"]*\"' mcp-peerfeed-list_instruments-1790712749988.txt | sort -u; grep -c instrument mcp-peerfeed-list_instruments-1790712749988.txt; tail -c 600 mcp-peerfeed-list_instruments-1790712749988.txt", "description": "List trade instruments from relevant venues" } ## [tool result] "instrument": "apex/trades:BTCUSDT" "instrument": "edgex/trades:BTCUSD" "instrument": "hyperliquid/trades:BTC" "instrument": "pacifica/trades:BTC" "instrument": "paradex/trades:BTC-USD-PERP" 201 "BTC-26MAR27-74000-C", "first_day": "2026-07-28", "last_day": "2026-09-29", "days": 56, "rows": 2583647, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "aevo/ticker:BTC-25JUN27-66000-C", "dataset": "aevo/ticker", "symbol": "BTC-25JUN27-66000-C", "first_day": "2026-07-28", "last_day": "2026-09-29", "days": 56, "rows": 2583646, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" } ], "total": 350145, "offset": 0, "returned": 200 } Shell cwd was reset to /tmp/peerfeed-a21/work-t3-mcp ## [tool call 6] mcp__peerfeed__list_instruments { "venue": "dydx", "contains": "BTC", "limit": 20 } ## [tool call 7] mcp__peerfeed__list_instruments { "venue": "nado", "limit": 60 } ## [tool call 8] mcp__peerfeed__describe_dataset { "instrument": "nado/trades" } ## [tool result] { "call_id": "2d0ed5c18ba84765", "instruments": [ { "instrument": "dydx/orderbook:BTC-USD", "dataset": "dydx/orderbook", "symbol": "BTC-USD", "first_day": "2026-09-03", "last_day": "2026-09-29", "days": 25, "rows": 146425161, "granularity": "snapshot (state)", "timestamp_semantics": "observation" }, { "instrument": "dydx/trades:BTC-USD", "dataset": "dydx/trades", "symbol": "BTC-USD", "first_day": "2025-12-31", "last_day": "2026-09-29", "days": 260, "rows": 2484597, "granularity": "tick (trades)", "timestamp_semantics": "exchange" } ], "total": 2, "offset": 0, "returned": 2 } ## [tool result] { "call_id": "1d754df2ca4b4628", "instruments": [ { "instrument": "nado/best_bid_offer:4", "dataset": "nado/best_bid_offer", "symbol": "4", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 99989823, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:2", "dataset": "nado/best_bid_offer", "symbol": "2", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 99871978, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:8", "dataset": "nado/best_bid_offer", "symbol": "8", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 58262123, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:18", "dataset": "nado/best_bid_offer", "symbol": "18", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 48793207, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:16", "dataset": "nado/best_bid_offer", "symbol": "16", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 37422015, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:46", "dataset": "nado/best_bid_offer", "symbol": "46", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 34750778, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:36", "dataset": "nado/best_bid_offer", "symbol": "36", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 30133516, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:142", "dataset": "nado/best_bid_offer", "symbol": "142", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 25111410, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:78", "dataset": "nado/best_bid_offer", "symbol": "78", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 23625965, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:10", "dataset": "nado/best_bid_offer", "symbol": "10", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 23292464, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:138", "dataset": "nado/best_bid_offer", "symbol": "138", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 23080813, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:72", "dataset": "nado/best_bid_offer", "symbol": "72", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 21735791, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:80", "dataset": "nado/best_bid_offer", "symbol": "80", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 21188634, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:136", "dataset": "nado/best_bid_offer", "symbol": "136", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 20760368, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:32", "dataset": "nado/best_bid_offer", "symbol": "32", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 20622517, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:76", "dataset": "nado/best_bid_offer", "symbol": "76", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 18862350, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:26", "dataset": "nado/best_bid_offer", "symbol": "26", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 17811420, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:20", "dataset": "nado/best_bid_offer", "symbol": "20", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 17732696, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:50", "dataset": "nado/best_bid_offer", "symbol": "50", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 17624173, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:30", "dataset": "nado/best_bid_offer", "symbol": "30", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 17396960, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:24", "dataset": "nado/best_bid_offer", "symbol": "24", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 16199739, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/book_depth:18", "dataset": "nado/book_depth", "symbol": "18", "first_day": "2026-09-03", "last_day": "2026-09-29", "days": 25, "rows": 15731292, "granularity": "snapshot (state)", "timestamp_semantics": "observation" }, { "instrument": "nado/best_bid_offer:14", "dataset": "nado/best_bid_offer", "symbol": "14", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 15367863, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:82", "dataset": "nado/best_bid_offer", "symbol": "82", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 15157483, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/book_depth:4", "dataset": "nado/book_depth", "symbol": "4", "first_day": "2026-09-03", "last_day": "2026-09-29", "days": 25, "rows": 15016091, "granularity": "snapshot (state)", "timestamp_semantics": "observation" }, { "instrument": "nado/book_depth:2", "dataset": "nado/book_depth", "symbol": "2", "first_day": "2026-09-03", "last_day": "2026-09-29", "days": 25, "rows": 14940275, "granularity": "snapshot (state)", "timestamp_semantics": "observation" }, { "instrument": "nado/best_bid_offer:124", "dataset": "nado/best_bid_offer", "symbol": "124", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 81, "rows": 14591829, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:126", "dataset": "nado/best_bid_offer", "symbol": "126", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 13966733, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:132", "dataset": "nado/best_bid_offer", "symbol": "132", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 13688783, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:68", "dataset": "nado/best_bid_offer", "symbol": "68", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 13648631, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:64", "dataset": "nado/best_bid_offer", "symbol": "64", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 13528356, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:130", "dataset": "nado/best_bid_offer", "symbol": "130", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 81, "rows": 13062040, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:48", "dataset": "nado/best_bid_offer", "symbol": "48", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 12963307, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/book_depth:16", "dataset": "nado/book_depth", "symbol": "16", "first_day": "2026-09-03", "last_day": "2026-09-29", "days": 25, "rows": 12839074, "granularity": "snapshot (state)", "timestamp_semantics": "observation" }, { "instrument": "nado/best_bid_offer:34", "dataset": "nado/best_bid_offer", "symbol": "34", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 12665918, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:58", "dataset": "nado/best_bid_offer", "symbol": "58", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 12660041, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/book_depth:8", "dataset": "nado/book_depth", "symbol": "8", "first_day": "2026-09-03", "last_day": "2026-09-29", "days": 25, "rows": 12104906, "granularity": "snapshot (state)", "timestamp_semantics": "observation" }, { "instrument": "nado/best_bid_offer:40", "dataset": "nado/best_bid_offer", "symbol": "40", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 11233758, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:74", "dataset": "nado/best_bid_offer", "symbol": "74", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 11193983, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:114", "dataset": "nado/best_bid_offer", "symbol": "114", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 79, "rows": 11087794, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:52", "dataset": "nado/best_bid_offer", "symbol": "52", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 10969457, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:158", "dataset": "nado/best_bid_offer", "symbol": "158", "first_day": "2026-07-09", "last_day": "2026-09-29", "days": 73, "rows": 10660473, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:128", "dataset": "nado/best_bid_offer", "symbol": "128", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 9934757, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:110", "dataset": "nado/best_bid_offer", "symbol": "110", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 9901479, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/book_depth:36", "dataset": "nado/book_depth", "symbol": "36", "first_day": "2026-09-03", "last_day": "2026-09-29", "days": 25, "rows": 9583133, "granularity": "snapshot (state)", "timestamp_semantics": "observation" }, { "instrument": "nado/best_bid_offer:134", "dataset": "nado/best_bid_offer", "symbol": "134", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 9531496, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:106", "dataset": "nado/best_bid_offer", "symbol": "106", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 9250618, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/book_depth:78", "dataset": "nado/book_depth", "symbol": "78", "first_day": "2026-09-03", "last_day": "2026-09-29", "days": 25, "rows": 9211850, "granularity": "snapshot (state)", "timestamp_semantics": "observation" }, { "instrument": "nado/best_bid_offer:86", "dataset": "nado/best_bid_offer", "symbol": "86", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 9154312, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:166", "dataset": "nado/best_bid_offer", "symbol": "166", "first_day": "2026-07-12", "last_day": "2026-09-29", "days": 70, "rows": 9065957, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/book_depth:46", "dataset": "nado/book_depth", "symbol": "46", "first_day": "2026-09-03", "last_day": "2026-09-29", "days": 25, "rows": 9046218, "granularity": "snapshot (state)", "timestamp_semantics": "observation" }, { "instrument": "nado/best_bid_offer:98", "dataset": "nado/best_bid_offer", "symbol": "98", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 8621190, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:104", "dataset": "nado/best_bid_offer", "symbol": "104", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 8559060, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:90", "dataset": "nado/best_bid_offer", "symbol": "90", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 8499479, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:108", "dataset": "nado/best_bid_offer", "symbol": "108", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 8499331, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/book_depth:10", "dataset": "nado/book_depth", "symbol": "10", "first_day": "2026-09-03", "last_day": "2026-09-29", "days": 25, "rows": 8489147, "granularity": "snapshot (state)", "timestamp_semantics": "observation" }, { "instrument": "nado/book_depth:72", "dataset": "nado/book_depth", "symbol": "72", "first_day": "2026-09-03", "last_day": "2026-09-29", "days": 25, "rows": 8444101, "granularity": "snapshot (state)", "timestamp_semantics": "observation" }, { "instrument": "nado/book_depth:32", "dataset": "nado/book_depth", "symbol": "32", "first_day": "2026-09-03", "last_day": "2026-09-29", "days": 25, "rows": 7808000, "granularity": "snapshot (state)", "timestamp_semantics": "observation" }, { "instrument": "nado/best_bid_offer:112", "dataset": "nado/best_bid_offer", "symbol": "112", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 7747549, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "nado/best_bid_offer:38", "dataset": "nado/best_bid_offer", "symbol": "38", "first_day": "2026-07-01", "last_day": "2026-09-29", "days": 82, "rows": 7614439, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" } ], "total": 1305, "offset": 0, "returned": 60 } ## [tool result] { "call_id": "6d37812b165845e2", "dataset": "nado/trades", "kind": "trades", "entity_column": "instrument", "entity_column_raw": "product_id", "timestamp_column": "ts", "timestamp_column_raw": "recorded_at", "timestamp_semantics": "observation", "serves_bars": true, "identity_columns": [ "product_id", "timestamp", "price", "taker_qty", "is_taker_buyer" ], "direction_measured": true, "how_to_query": "run_query with dataset='nado/trades'; instrument ids are 'nado/trades:' — see list_instruments.", "clock_note": "Served on our observation clock, not the venue's. This feed's own timestamp is the state epoch and does not advance while the state is unchanged, so filtering a window on it would miss most rows.", "query_columns": { "always": [ "instrument", "ts", "price", "size", "side", "side_raw" ], "plus_raw_columns": "every column of the underlying files, under its own name", "note": "These are the columns of the bound table `t`. `instrument` is the entity (raw name 'product_id') and `ts` is the served clock. Filter and group on these; the raw columns are there too but `instrument` and `ts` are the corrected ones.", "shadowed_raw_columns": { "price": "price_1" }, "shadowed_warning": "This dataset has raw column(s) 'price' whose name the served view already uses, so the FILE's version is `price_1`. Querying `price` gives you the SERVED column, not this dataset's own." }, "raw_columns": { "as_of_day": "2026-09-29", "from_file": "00-02.parquet", "note": "The schema of this day's files. Columns in this archive were added, renamed and case-collided over time, so an older window may carry different ones — and the served view adds `instrument`, `ts` and, for trades, `price`, `size`, `side` and `side_raw` on top of these.", "columns": { "type": "large_string", "timestamp": "timestamp[ns, tz=UTC]", "product_id": "int64", "price": "large_string", "taker_qty": "large_string", "maker_qty": "large_string", "is_taker_buyer": "bool", "recorded_at": "timestamp[ns, tz=UTC]" } }, "known_data_labels": { "count": 37, "kinds": { "absent": 6, "partial_window": 31 }, "permanent": 37, "lowest_coverage_fraction": 0.26, "lowest_coverage_fraction_lower_bound": null, "coverage_note": "lowest_coverage_fraction is the worst SINGLE SHARD in this window, not the fraction of the window that is present, and it is not a measure of how much data there is. A day whose shards are labelled 0.26 can hold more trade-minutes than an unlabelled day if the market was quieter. Compare density directly before rejecting a window on this number.", "labelled_days": { "from": "2026-08-08", "to": "2026-09-17", "count": 9 }, "labels_omitted": "37 per-day record(s) not inlined; query a window with run_query to get the ones that apply to it, or read the files named in label_source" }, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/nado/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes_omitted": "Scope notes for biased_subset, census_incomplete, not_archived, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null, "scope_notes_available_for": [ "absent", "partial_window" ], "scope_notes_omitted_here": "2 per-kind scope note(s) omitted to keep this response small; run_query returns them in full for the kinds your window matches. They say how far each kind's claim extends -- no kind is exhaustive, so absence of a label never means a defect did not happen." }, "indexed": { "first_day": "2025-12-31", "last_day": "2026-09-29", "rows": 14815149, "days_indexed": 262 } } ## [agent thinking] ## [agent] I've found the BTC perp instrument on each venue. Next I'll confirm that Nado product 2 is BTC and pull the 1-minute bars. ## [tool call 9] mcp__peerfeed__run_query { "dataset": "nado/trades", "start": "2026-09-21T00:00:00Z", "end": "2026-09-21T02:00:00Z", "sql": "SELECT instrument, count(*) n, avg(close) px, sum(volume*vwap) notional FROM t GROUP BY 1 ORDER BY notional DESC LIMIT 10" } ## [tool result] { "call_id": "2717fa8bc4b74c34", "shard_presence": { "shards_present": 12, "shards_expected": 12, "days_indexed": 1, "days_requested": 1, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 1, "days_blind": 0, "catalog_covers": { "from": "2025-12-31", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.991, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/nado/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null, "slices": null, "columns": [ "instrument", "n", "px", "notional" ], "rows": [ [ "2", 120, 81556.1, 23966940.21425 ], [ "4", 120, 2679.5783333333334, 15218682.0526 ], [ "8", 119, 112.2509243697479, 3698319.874 ], [ "16", 120, 93.87409166666664, 3113225.026599999 ], [ "78", 113, 4.236453982300885, 611636.9074000001 ], [ "18", 79, 1531.0768354430377, 496539.3489 ], [ "64", 23, 11.530521739130435, 367043.6889 ], [ "98", 84, 725.352261904762, 343194.89896 ], [ "10", 56, 1.4235535714285719, 342322.327 ], [ "14", 77, 780.0432467532469, 335452.56494999997 ] ], "row_count": 10, "truncated": false, "shards_bound": 2, "rows_estimated": 254470, "zero_rows_note": null, "table_t": "1-minute bars", "table_t_note": "Bars built from fewer than 3 trades are ABSENT from t, not zero-valued. See withheld_by_floor for HOW MUCH this window lost - a gap in t is a withheld bar or a minute with no trades, and the counts there are the only way to tell.", "withheld_by_floor": { "bars": 1045, "trades": 1420, "volume": 11496462.808500003, "min_trades": 3, "note": "1045 minute bar(s) holding 1420 trade(s) were withheld because each was built from fewer than 3 trades. Those trades are NOT in any sum, count or volume you compute from t. Add them back from these totals before quoting a notional, or state the shortfall." }, "extremum_warning": "YOUR EXTREMUM MAY BE WRONG IN ITS ARGUMENT, NOT JUST ITS VALUE. This query selects a maximum, minimum or ordering, and 1045 bar(s) were withheld from `t` because each held fewer than 3 trades. A true extreme minute is often a THIN one, so the row you want is disproportionately likely to be among those withheld: a measured case had the largest dislocation in a 2-trade minute, and the reported answer named the wrong minute with a plausible value. withheld_by_floor totals CANNOT repair this the way they repair a sum. Either state that the extremum is over bars of at least 3 trades only, or obtain the data in a mode without the floor.", "timestamp_semantics": "observation", "timestamp_note": "ts is when this recorder OBSERVED the trade, not the venue's event time; do not compare it against exchange-timed venues at sub-second resolution.", "note": null } ## [agent thinking] ## [agent] Nado product 2 is BTC (price about $81.5k). Now I'll compute weekly aggregates per venue. ## [tool call 10] Bash { "command": "cat > /tmp/peerfeed-a21/work-t3-mcp/q.sql <<'EOF'\nWITH b AS (SELECT ts, close, volume, vwap, trades,\n ln(close/lag(close) OVER (ORDER BY ts)) r,\n epoch(ts - lag(ts) OVER (ORDER BY ts))/60 gap FROM t)\nSELECT count(*) bars, sum(trades) trades, sum(volume) vol_base, sum(volume*vwap) notional,\n min(close) minpx, max(close) maxpx, avg(close) avgpx,\n count(r) FILTER (WHERE gap=1) n1,\n sqrt(avg(r*r) FILTER (WHERE gap=1)*525600) rv_consec,\n stddev_samp(r) FILTER (WHERE gap=1)*sqrt(525600) sd_consec,\n sqrt(sum(r*r)/sum(gap)*525600) rv_allgaps,\n max(abs(r)) maxabs, count(*) FILTER (WHERE abs(r)>0.005) n_gt50bp,\n sqrt(sum(r*r) FILTER (WHERE gap=1 AND abs(r)<=0.005)/count(r) FILTER (WHERE gap=1 AND abs(r)<=0.005)*525600) rv_trim\nFROM b\nEOF\ncat /tmp/peerfeed-a21/work-t3-mcp/q.sql | tr '\\n' ' '", "description": "Write aggregate SQL query" } ## [tool result] WITH b AS (SELECT ts, close, volume, vwap, trades, ln(close/lag(close) OVER (ORDER BY ts)) r, epoch(ts - lag(ts) OVER (ORDER BY ts))/60 gap FROM t) SELECT count(*) bars, sum(trades) trades, sum(volume) vol_base, sum(volume*vwap) notional, min(close) minpx, max(close) maxpx, avg(close) avgpx, count(r) FILTER (WHERE gap=1) n1, sqrt(avg(r*r) FILTER (WHERE gap=1)*525600) rv_consec, stddev_samp(r) FILTER (WHERE gap=1)*sqrt(525600) sd_consec, sqrt(sum(r*r)/sum(gap)*525600) rv_allgaps, max(abs(r)) maxabs, count(*) FILTER (WHERE abs(r)>0.005) n_gt50bp, sqrt(sum(r*r) FILTER (WHERE gap=1 AND abs(r)<=0.005)/count(r) FILTER (WHERE gap=1 AND abs(r)<=0.005)*525600) rv_trim FROM b ## [tool call 11] mcp__peerfeed__run_query { "dataset": "hyperliquid/trades", "instrument": "BTC", "start": "2026-09-21T00:00:00Z", "end": "2026-09-28T00:00:00Z", "sql": "WITH b AS (SELECT ts, close, volume, vwap, trades, ln(close/lag(close) OVER (ORDER BY ts)) r, epoch(ts - lag(ts) OVER (ORDER BY ts))/60 gap FROM t) SELECT count(*) bars, sum(trades) trades, sum(volume) vol_base, sum(volume*vwap) notional, min(close) minpx, max(close) maxpx, avg(close) avgpx, count(r) FILTER (WHERE gap=1) n1, sqrt(avg(r*r) FILTER (WHERE gap=1)*525600) rv_consec, stddev_samp(r) FILTER (WHERE gap=1)*sqrt(525600) sd_consec, sqrt(sum(r*r)/sum(gap)*525600) rv_allgaps, max(abs(r)) maxabs, count(*) FILTER (WHERE abs(r)>0.005) n_gt50bp, sqrt(sum(r*r) FILTER (WHERE gap=1 AND abs(r)<=0.005)/count(r) FILTER (WHERE gap=1 AND abs(r)<=0.005)*525600) rv_trim FROM b" } ## [tool result] { "call_id": "5b9e0199c4994093", "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-10-25", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/hyperliquid/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null, "slices": null, "columns": [ "bars", "trades", "vol_base", "notional", "minpx", "maxpx", "avgpx", "n1", "rv_consec", "sd_consec", "rv_allgaps", "maxabs", "n_gt50bp", "rv_trim" ], "rows": [ [ 10077, 2406078, 246523.02896000037, 20871979754.304276, 80971.0, 87425.0, 84659.24957824749, 10073, 0.3666655868221504, 0.3666718908838614, 0.3672842986152817, 0.008836829025778403, 2, 0.35902330514756553 ] ], "row_count": 1, "truncated": false, "shards_bound": 85, "rows_estimated": 2738363, "zero_rows_note": null, "table_t": "1-minute bars", "table_t_note": "Bars built from fewer than 3 trades are ABSENT from t, not zero-valued. See withheld_by_floor for HOW MUCH this window lost - a gap in t is a withheld bar or a minute with no trades, and the counts there are the only way to tell.", "withheld_by_floor": { "bars": 0, "trades": 0, "volume": null, "min_trades": 3, "note": "Nothing was withheld: every bar in this window met the floor." }, "extremum_warning": null, "timestamp_semantics": "exchange", "timestamp_note": "ts is the venue's own event time.", "note": null } ## [tool call 12] mcp__peerfeed__run_query { "dataset": "edgex/trades", "instrument": "BTCUSD", "start": "2026-09-21T00:00:00Z", "end": "2026-09-28T00:00:00Z", "sql": "WITH b AS (SELECT ts, close, volume, vwap, trades, ln(close/lag(close) OVER (ORDER BY ts)) r, epoch(ts - lag(ts) OVER (ORDER BY ts))/60 gap FROM t) SELECT count(*) bars, sum(trades) trades, sum(volume) vol_base, sum(volume*vwap) notional, min(close) minpx, max(close) maxpx, avg(close) avgpx, count(r) FILTER (WHERE gap=1) n1, sqrt(avg(r*r) FILTER (WHERE gap=1)*525600) rv_consec, stddev_samp(r) FILTER (WHERE gap=1)*sqrt(525600) sd_consec, sqrt(sum(r*r)/sum(gap)*525600) rv_allgaps, max(abs(r)) maxabs, count(*) FILTER (WHERE abs(r)>0.005) n_gt50bp, sqrt(sum(r*r) FILTER (WHERE gap=1 AND abs(r)<=0.005)/count(r) FILTER (WHERE gap=1 AND abs(r)<=0.005)*525600) rv_trim FROM b" } ## [tool result] { "call_id": "1568d3f1a4a64985", "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-12-15", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/edgex/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null, "slices": null, "columns": [ "bars", "trades", "vol_base", "notional", "minpx", "maxpx", "avgpx", "n1", "rv_consec", "sd_consec", "rv_allgaps", "maxabs", "n_gt50bp", "rv_trim" ], "rows": [ [ 0, null, null, null, null, null, null, 0, null, null, null, null, 0, null ] ], "row_count": 1, "truncated": false, "shards_bound": 85, "rows_estimated": 0, "zero_rows_note": null, "table_t": "1-minute bars", "table_t_note": "Bars built from fewer than 3 trades are ABSENT from t, not zero-valued. See withheld_by_floor for HOW MUCH this window lost - a gap in t is a withheld bar or a minute with no trades, and the counts there are the only way to tell.", "withheld_by_floor": { "bars": 0, "trades": 0, "volume": null, "min_trades": 3, "note": "Nothing was withheld: every bar in this window met the floor." }, "extremum_warning": null, "timestamp_semantics": "exchange", "timestamp_note": "ts is the venue's own event time.", "note": null } ## [tool call 13] mcp__peerfeed__run_query { "dataset": "apex/trades", "instrument": "BTCUSDT", "start": "2026-09-21T00:00:00Z", "end": "2026-09-28T00:00:00Z", "sql": "WITH b AS (SELECT ts, close, volume, vwap, trades, ln(close/lag(close) OVER (ORDER BY ts)) r, epoch(ts - lag(ts) OVER (ORDER BY ts))/60 gap FROM t) SELECT count(*) bars, sum(trades) trades, sum(volume) vol_base, sum(volume*vwap) notional, min(close) minpx, max(close) maxpx, avg(close) avgpx, count(r) FILTER (WHERE gap=1) n1, sqrt(avg(r*r) FILTER (WHERE gap=1)*525600) rv_consec, stddev_samp(r) FILTER (WHERE gap=1)*sqrt(525600) sd_consec, sqrt(sum(r*r)/sum(gap)*525600) rv_allgaps, max(abs(r)) maxabs, count(*) FILTER (WHERE abs(r)>0.005) n_gt50bp, sqrt(sum(r*r) FILTER (WHERE gap=1 AND abs(r)<=0.005)/count(r) FILTER (WHERE gap=1 AND abs(r)<=0.005)*525600) rv_trim FROM b" } ## [tool result] { "call_id": "313cd29d51324748", "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-12-21", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/apex/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null, "slices": null, "columns": [ "bars", "trades", "vol_base", "notional", "minpx", "maxpx", "avgpx", "n1", "rv_consec", "sd_consec", "rv_allgaps", "maxabs", "n_gt50bp", "rv_trim" ], "rows": [ [ 10080, 165722, 24895.71100000001, 2105623114.3700995, 80911.3, 87301.4, 84618.4468948425, 10079, 0.37254977443560267, 0.372557620107414, 0.37254977443560267, 0.00903010588715606, 1, 0.36681655815484987 ] ], "row_count": 1, "truncated": false, "shards_bound": 85, "rows_estimated": 200186, "zero_rows_note": null, "table_t": "1-minute bars", "table_t_note": "Bars built from fewer than 3 trades are ABSENT from t, not zero-valued. See withheld_by_floor for HOW MUCH this window lost - a gap in t is a withheld bar or a minute with no trades, and the counts there are the only way to tell.", "withheld_by_floor": { "bars": 0, "trades": 0, "volume": null, "min_trades": 3, "note": "Nothing was withheld: every bar in this window met the floor." }, "extremum_warning": null, "timestamp_semantics": "exchange", "timestamp_note": "ts is the venue's own event time.", "note": null } ## [tool call 14] mcp__peerfeed__run_query { "dataset": "pacifica/trades", "instrument": "BTC", "start": "2026-09-21T00:00:00Z", "end": "2026-09-28T00:00:00Z", "sql": "WITH b AS (SELECT ts, close, volume, vwap, trades, ln(close/lag(close) OVER (ORDER BY ts)) r, epoch(ts - lag(ts) OVER (ORDER BY ts))/60 gap FROM t) SELECT count(*) bars, sum(trades) trades, sum(volume) vol_base, sum(volume*vwap) notional, min(close) minpx, max(close) maxpx, avg(close) avgpx, count(r) FILTER (WHERE gap=1) n1, sqrt(avg(r*r) FILTER (WHERE gap=1)*525600) rv_consec, stddev_samp(r) FILTER (WHERE gap=1)*sqrt(525600) sd_consec, sqrt(sum(r*r)/sum(gap)*525600) rv_allgaps, max(abs(r)) maxabs, count(*) FILTER (WHERE abs(r)>0.005) n_gt50bp, sqrt(sum(r*r) FILTER (WHERE gap=1 AND abs(r)<=0.005)/count(r) FILTER (WHERE gap=1 AND abs(r)<=0.005)*525600) rv_trim FROM b" } ## [tool result] { "call_id": "ad08a876b12b4bcd", "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-12-21", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/pacifica/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null, "slices": null, "columns": [ "bars", "trades", "vol_base", "notional", "minpx", "maxpx", "avgpx", "n1", "rv_consec", "sd_consec", "rv_allgaps", "maxabs", "n_gt50bp", "rv_trim" ], "rows": [ [ 6955, 80611, 16155.34616000002, 1370198888.6064618, 80929.0, 87326.0, 84672.80905823149, 5217, 0.4380834416093107, 0.43810186826901687, 0.36107425330173315, 0.008929273701699712, 1, 0.4288584367060495 ] ], "row_count": 1, "truncated": false, "shards_bound": 85, "rows_estimated": 98755, "zero_rows_note": null, "table_t": "1-minute bars", "table_t_note": "Bars built from fewer than 3 trades are ABSENT from t, not zero-valued. See withheld_by_floor for HOW MUCH this window lost - a gap in t is a withheld bar or a minute with no trades, and the counts there are the only way to tell.", "withheld_by_floor": { "bars": 2942, "trades": 5240, "volume": 163.6535800000016, "min_trades": 3, "note": "2942 minute bar(s) holding 5240 trade(s) were withheld because each was built from fewer than 3 trades. Those trades are NOT in any sum, count or volume you compute from t. Add them back from these totals before quoting a notional, or state the shortfall." }, "extremum_warning": "YOUR EXTREMUM MAY BE WRONG IN ITS ARGUMENT, NOT JUST ITS VALUE. This query selects a maximum, minimum or ordering, and 2942 bar(s) were withheld from `t` because each held fewer than 3 trades. A true extreme minute is often a THIN one, so the row you want is disproportionately likely to be among those withheld: a measured case had the largest dislocation in a 2-trade minute, and the reported answer named the wrong minute with a plausible value. withheld_by_floor totals CANNOT repair this the way they repair a sum. Either state that the extremum is over bars of at least 3 trades only, or obtain the data in a mode without the floor.", "timestamp_semantics": "exchange", "timestamp_note": "ts is the venue's own event time.", "note": null } ## [tool call 15] mcp__peerfeed__run_query { "dataset": "dydx/trades", "instrument": "BTC-USD", "start": "2026-09-21T00:00:00Z", "end": "2026-09-28T00:00:00Z", "sql": "WITH b AS (SELECT ts, close, volume, vwap, trades, ln(close/lag(close) OVER (ORDER BY ts)) r, epoch(ts - lag(ts) OVER (ORDER BY ts))/60 gap FROM t) SELECT count(*) bars, sum(trades) trades, sum(volume) vol_base, sum(volume*vwap) notional, min(close) minpx, max(close) maxpx, avg(close) avgpx, count(r) FILTER (WHERE gap=1) n1, sqrt(avg(r*r) FILTER (WHERE gap=1)*525600) rv_consec, stddev_samp(r) FILTER (WHERE gap=1)*sqrt(525600) sd_consec, sqrt(sum(r*r)/sum(gap)*525600) rv_allgaps, max(abs(r)) maxabs, count(*) FILTER (WHERE abs(r)>0.005) n_gt50bp, sqrt(sum(r*r) FILTER (WHERE gap=1 AND abs(r)<=0.005)/count(r) FILTER (WHERE gap=1 AND abs(r)<=0.005)*525600) rv_trim FROM b" } ## [tool result] { "call_id": "c95bc8817c5f418d", "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-12-31", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.984, "healthy_shard_coverage": 0.985, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/dydx/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null, "slices": null, "columns": [ "bars", "trades", "vol_base", "notional", "minpx", "maxpx", "avgpx", "n1", "rv_consec", "sd_consec", "rv_allgaps", "maxabs", "n_gt50bp", "rv_trim" ], "rows": [ [ 1885, 15247, 662.8080000000018, 56226399.57759986, 80900.0, 87343.0, 84817.11140583555, 774, 0.8852146695388567, 0.8852895111418203, 0.42066229539761385, 0.009465893541257922, 6, 0.8374688072899753 ] ], "row_count": 1, "truncated": false, "shards_bound": 85, "rows_estimated": 62983, "zero_rows_note": null, "table_t": "1-minute bars", "table_t_note": "Bars built from fewer than 3 trades are ABSENT from t, not zero-valued. See withheld_by_floor for HOW MUCH this window lost - a gap in t is a withheld bar or a minute with no trades, and the counts there are the only way to tell.", "withheld_by_floor": { "bars": 2320, "trades": 3262, "volume": 27.464099999999906, "min_trades": 3, "note": "2320 minute bar(s) holding 3262 trade(s) were withheld because each was built from fewer than 3 trades. Those trades are NOT in any sum, count or volume you compute from t. Add them back from these totals before quoting a notional, or state the shortfall." }, "extremum_warning": "YOUR EXTREMUM MAY BE WRONG IN ITS ARGUMENT, NOT JUST ITS VALUE. This query selects a maximum, minimum or ordering, and 2320 bar(s) were withheld from `t` because each held fewer than 3 trades. A true extreme minute is often a THIN one, so the row you want is disproportionately likely to be among those withheld: a measured case had the largest dislocation in a 2-trade minute, and the reported answer named the wrong minute with a plausible value. withheld_by_floor totals CANNOT repair this the way they repair a sum. Either state that the extremum is over bars of at least 3 trades only, or obtain the data in a mode without the floor.", "timestamp_semantics": "exchange", "timestamp_note": "ts is the venue's own event time.", "note": null } ## [tool call 16] mcp__peerfeed__run_query { "dataset": "paradex/trades", "instrument": "BTC-USD-PERP", "start": "2026-09-21T00:00:00Z", "end": "2026-09-28T00:00:00Z", "sql": "WITH b AS (SELECT ts, close, volume, vwap, trades, ln(close/lag(close) OVER (ORDER BY ts)) r, epoch(ts - lag(ts) OVER (ORDER BY ts))/60 gap FROM t) SELECT count(*) bars, sum(trades) trades, sum(volume) vol_base, sum(volume*vwap) notional, min(close) minpx, max(close) maxpx, avg(close) avgpx, count(r) FILTER (WHERE gap=1) n1, sqrt(avg(r*r) FILTER (WHERE gap=1)*525600) rv_consec, stddev_samp(r) FILTER (WHERE gap=1)*sqrt(525600) sd_consec, sqrt(sum(r*r)/sum(gap)*525600) rv_allgaps, max(abs(r)) maxabs, count(*) FILTER (WHERE abs(r)>0.005) n_gt50bp, sqrt(sum(r*r) FILTER (WHERE gap=1 AND abs(r)<=0.005)/count(r) FILTER (WHERE gap=1 AND abs(r)<=0.005)*525600) rv_trim FROM b" } ## [tool result] { "call_id": "dc4f44cf4fa64c9f", "shard_presence": { "shards_present": 15, "shards_expected": 84, "days_indexed": 2, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2026-01-04", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 0.179 }, "presence_warning": "INCOMPLETE RANGE: this host holds 15 of 84 expected 2-hour shards for this range (18%). The missing shards are not in the bars and are not counted in shard_coverage, which is measured only on shards that are present. Absent shards are missing data, not quiet markets.", "shard_coverage": 0.861, "healthy_shard_coverage": 0.981, "coverage_warning": "PARTIAL DATA: shards in this range span ~86% of their 2-hour windows, against ~98% for healthy shards of this feed, i.e. 88% of normal. Bars at 1h and coarser are computed from a fraction of the trades. Gaps are real missing data, not quiet markets.", "known_data_labels": { "count": 15, "kinds": { "partial_window": 1, "absent": 14 }, "permanent": 15, "lowest_coverage_fraction": 0.224, "lowest_coverage_fraction_lower_bound": null, "coverage_note": "lowest_coverage_fraction is the worst SINGLE SHARD in this window, not the fraction of the window that is present, and it is not a measure of how much data there is. A day whose shards are labelled 0.26 can hold more trade-minutes than an unlabelled day if the market was quieter. Compare density directly before rejecting a window on this number.", "labels": [ { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "partial_window", "permanent": true, "shard": "04-06", "coverage_fraction": 0.224, "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "basis": "window_spanned", "as_of": "2026-09-28T14:54:55+00:00", "coverage_fraction_note": "MEASURED as the fraction of the shard's 7200s window that the data reaches into: last row 2026-09-22T04:26:53.116Z. A ROWS-based fraction is NOT measurable here and is deliberately absent: the same shard holds 185, 233, 318 and 553 rows on 09-22, 09-20, 09-21 and 09-18, a 2.4x spread between healthy days, so any rows ratio would report the day's trading rate as coverage. Healthy window_spanned for this shard is 0.9742-0.9852 on 09-18, 09-20 and 09-21.", "join_hazard": "trade `id` format changed across the gap: 28-digit string before 2026-09-19, str(int64 trade_id) from 2026-09-28. Cross-gap joins on `id` are INVALID. The two encodings cannot collide on length (int64 is at most 19 digits), so each era is internally sound.", "reason": "recorder_stopped_midshard" }, { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "absent", "permanent": true, "shard": "06-08", "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "absent", "permanent": true, "shard": "08-10", "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "absent", "permanent": true, "shard": "10-12", "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "absent", "permanent": true, "shard": "12-14", "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "absent", "permanent": true, "shard": "14-16", "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "absent", "permanent": true, "shard": "16-18", "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "absent", "permanent": true, "shard": "18-20", "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "absent", "permanent": true, "shard": "20-22", "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "absent", "permanent": true, "shard": "22-24", "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-23", "kind": "absent", "permanent": true, "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-24", "kind": "absent", "permanent": true, "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-25", "kind": "absent", "permanent": true, "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-26", "kind": "absent", "permanent": true, "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-27", "kind": "absent", "permanent": true, "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" } ], "truncated": false }, "label_source": { "roots_checked": 3, "label_files_found": 2, "files": [ "~/recorded_data/_labels/paradex/trades/labels.jsonl", "/mnt/nasrecorders/_labels/paradex/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": { "absent": "established for the six fleet-wide days found during the 2026-07-27..09-19 recovery sweep, not by a census over all days and datasets. Absence elsewhere means nothing was looked at. AMENDED 2026-09-28: `absent` now CARRIES TWO PROVENANCES; read the `reason` field, never the kind alone. reason absent/implicit = the 2026-07-27..09-19 sweep described above. reason='recorder_parse_failed' = the recorder could not parse the exchange's frames, so nothing was ever written to L0 either and the loss is permanent and unrebuildable -- established for paradex/trades and paradex/bbo 2026-09-19..09-27 (Paradex moved to SBE binary framing; the JSON parser failed every frame; unified-recorders #199, recording resumed 2026-09-28 14:07 UTC). The distinction is load-bearing: a sweep-absent day may still exist on a peer, a parse-failed day exists NOWHERE, so one says look elsewhere and the other says stop looking. ⛔ CORRECTED 2026-09-28: the paradex range stated above as 2026-09-19..09-27 IS WRONG and was never measured by its author (mission-2) -- it was relayed and accepted. Measured file-by-file on all three hosts and the NAS by market_data_mcp, confirmed independently: the fleet-wide stop is 2026-09-22 04:26:53.116 UTC (trades) / 04:31:32.090 UTC (bbo), NOT 09-19. 2026-09-19 is on both peers AND ON THE NAS -- it is missing only from nm's local tree, so labelling it absent would tell a consumer to stop looking for a day the archive holds. 2026-09-20 and 09-21 are FULL days present on all three hosts and absent only from the NAS: that is not_archived / reason='not_yet_processed', owed by mission-2, NOT absent. The emitted paradex labels (42, market_data_mcp, as_of 2026-09-28T14:54:55Z) correctly start at 09-22 and are the authority; this note previously contradicted them. THIRD PROVENANCE, added 2026-09-28: reason='recorder_filter_dropped' -- a day on which filter_unchanged discarded EVERY record because no recorder restart occurred, so the retained subset is empty. Nothing was ever written to L0 (the filter runs before the write), so `absent` is literally accurate and permanent. It is deliberately NOT `biased_subset`: that kind promises rows exist but are unrepresentative, and a consumer selecting datasets with usable rows would wrongly include a zero-row day. The two kinds are the same defect at different amplitudes -- mexc/funding_rate has 159 biased_subset days and ~106 zero-retention days in 2025-12-30..2026-09-20 -- so a zero day's `detail` must name biased_subset so the halves are joinable. ⚠ COUNTS ARE LABELS, NOT LOSS (flagged 2026-09-28 by market_data_mcp, whose labels they are). `emitted_counts_at_as_of.absent` = 293 includes 95 mexc/funding_rate zero-retention days, and those days NEVER HELD ROWS TO LOSE -- the loss they belong to is the 168 `biased_subset` days plus whatever the filter discarded on the 95, which is UNMEASURABLE because the discarded records were never written anywhere. So summing `absent` as a loss figure inflates it. This generalises to every kind: the counts measure how many labels have been WRITTEN, which is a fact about how much looking has been done, not about how much data is gone. The `reason` field prevents the misreading; a bare total invites it.", "partial_window": "per-shard coverage for 2026-09-15/09-16/09-17 00-02..12-14 at ~0.26. Other days were not measured for windowed loss. AMENDED 2026-09-28: also carries basis='recorder_resumed_midshard' for the shard in which a recorder resumed after a permanent gap -- paradex/trades and paradex/bbo 2026-09-28 14-16. The original basis is basis='window_built' (generator cutoff). Read `basis`, not the kind. A resumed-midshard coverage_fraction must be MEASURED; where it is not, write UNMEASURED rather than deriving it from the resume timestamp, because the feed's rate across the boundary is unknown. That record must also carry `join_hazard`: paradex trade `id` changed format across the gap -- 28-digit string before 2026-09-19, str(int64 trade_id) from 2026-09-28 -- so cross-gap joins on `id` are INVALID. That is a value-format discontinuity, not a `type_widened` promotion; it is a field rather than a kind because one instance does not earn vocabulary. If it recurs, it does. ALSO 2026-09-28: basis='recorder_stopped_midshard' for the shard in which a recorder STOPPED (the mirror of recorder_resumed_midshard) -- paradex/trades 2026-09-22 04-06 (feed died 04:26:53.116 UTC) and paradex/bbo 2026-09-22 04-06 (04:31:32.090 UTC). Same rule: MEASURE coverage_fraction against an adjacent healthy shard, or write UNMEASURED; the feed's rate across the boundary is exactly what must not be assumed from the stop timestamp. ⛔ ENCODING CORRECTED 2026-09-28, market_data_mcp's design accepted over mine: `basis` names WHAT THE FRACTION IS A FRACTION OF (e.g. 'window_spanned', 'window_built'), and the CAUSE goes in `reason` ('recorder_stopped_midshard', 'recorder_resumed_midshard'). I had registered the cause as `basis`, which overloads the one field a consumer needs to decode 0.224 and makes the number uninterpretable. Measured vindication of the measure-don't-derive rule: for paradex 09-22 04-06 the window axis gives trades 0.2240 / bbo 0.2628 against healthy baselines of 0.9742-0.9914, while a ROWS ratio would have said 0.53 for bbo -- twice the truth -- because the same shard holds 185, 233, 318 and 553 rows across four HEALTHY days, a 2.4x spread, so a rows ratio reports trading rate as coverage. paradex 09-28 14-16 is DEFERRED, not missing: L0 exists from 14:08 UTC but no parquet has been generated, and a label over bytes nobody has written would assert coverage of nothing." }, "scope_notes_omitted": "Scope notes for biased_subset, census_incomplete, not_archived, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null, "slices": null, "columns": [ "bars", "trades", "vol_base", "notional", "minpx", "maxpx", "avgpx", "n1", "rv_consec", "sd_consec", "rv_allgaps", "maxabs", "n_gt50bp", "rv_trim" ], "rows": [ [ 1221, 14130, 122.85006000000023, 10433654.796076024, 80972.3, 87711.6, 85077.36195197245, 1113, 1.237119599399503, 1.237591154062619, 1.0640511519692162, 0.019482550926725992, 16, 0.7136083675982462 ] ], "row_count": 1, "truncated": false, "shards_bound": 15, "rows_estimated": 15811, "zero_rows_note": null, "table_t": "1-minute bars", "table_t_note": "Bars built from fewer than 3 trades are ABSENT from t, not zero-valued. See withheld_by_floor for HOW MUCH this window lost - a gap in t is a withheld bar or a minute with no trades, and the counts there are the only way to tell.", "withheld_by_floor": { "bars": 194, "trades": 274, "volume": 5.0239899999999995, "min_trades": 3, "note": "194 minute bar(s) holding 274 trade(s) were withheld because each was built from fewer than 3 trades. Those trades are NOT in any sum, count or volume you compute from t. Add them back from these totals before quoting a notional, or state the shortfall." }, "extremum_warning": "YOUR EXTREMUM MAY BE WRONG IN ITS ARGUMENT, NOT JUST ITS VALUE. This query selects a maximum, minimum or ordering, and 194 bar(s) were withheld from `t` because each held fewer than 3 trades. A true extreme minute is often a THIN one, so the row you want is disproportionately likely to be among those withheld: a measured case had the largest dislocation in a 2-trade minute, and the reported answer named the wrong minute with a plausible value. withheld_by_floor totals CANNOT repair this the way they repair a sum. Either state that the extremum is over bars of at least 3 trades only, or obtain the data in a mode without the floor.", "timestamp_semantics": "exchange", "timestamp_note": "ts is the venue's own event time.", "note": null } ## [tool call 17] mcp__peerfeed__run_query { "dataset": "nado/trades", "instrument": "2", "start": "2026-09-21T00:00:00Z", "end": "2026-09-28T00:00:00Z", "sql": "WITH b AS (SELECT ts, close, volume, vwap, trades, ln(close/lag(close) OVER (ORDER BY ts)) r, epoch(ts - lag(ts) OVER (ORDER BY ts))/60 gap FROM t) SELECT count(*) bars, sum(trades) trades, sum(volume) vol_base, sum(volume*vwap) notional, min(close) minpx, max(close) maxpx, avg(close) avgpx, count(r) FILTER (WHERE gap=1) n1, sqrt(avg(r*r) FILTER (WHERE gap=1)*525600) rv_consec, stddev_samp(r) FILTER (WHERE gap=1)*sqrt(525600) sd_consec, sqrt(sum(r*r)/sum(gap)*525600) rv_allgaps, max(abs(r)) maxabs, count(*) FILTER (WHERE abs(r)>0.005) n_gt50bp, sqrt(sum(r*r) FILTER (WHERE gap=1 AND abs(r)<=0.005)/count(r) FILTER (WHERE gap=1 AND abs(r)<=0.005)*525600) rv_trim FROM b" } ## [tool result] { "call_id": "1337bd729d9c4aa3", "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-12-31", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.991, "healthy_shard_coverage": 0.991, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/nado/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null, "slices": null, "columns": [ "bars", "trades", "vol_base", "notional", "minpx", "maxpx", "avgpx", "n1", "rv_consec", "sd_consec", "rv_allgaps", "maxabs", "n_gt50bp", "rv_trim" ], "rows": [ [ 9299, 261162, 9984.112299999986, 846276792.3802989, 80914.0, 87342.0, 84648.79341864717, 8766, 0.38153516298278417, 0.3815404233178284, 0.3588331676081463, 0.007005850817597185, 3, 0.37326490321929057 ] ], "row_count": 1, "truncated": false, "shards_bound": 85, "rows_estimated": 310984, "zero_rows_note": null, "table_t": "1-minute bars", "table_t_note": "Bars built from fewer than 3 trades are ABSENT from t, not zero-valued. See withheld_by_floor for HOW MUCH this window lost - a gap in t is a withheld bar or a minute with no trades, and the counts there are the only way to tell.", "withheld_by_floor": { "bars": 464, "trades": 695, "volume": 13.014900000000006, "min_trades": 3, "note": "464 minute bar(s) holding 695 trade(s) were withheld because each was built from fewer than 3 trades. Those trades are NOT in any sum, count or volume you compute from t. Add them back from these totals before quoting a notional, or state the shortfall." }, "extremum_warning": "YOUR EXTREMUM MAY BE WRONG IN ITS ARGUMENT, NOT JUST ITS VALUE. This query selects a maximum, minimum or ordering, and 464 bar(s) were withheld from `t` because each held fewer than 3 trades. A true extreme minute is often a THIN one, so the row you want is disproportionately likely to be among those withheld: a measured case had the largest dislocation in a 2-trade minute, and the reported answer named the wrong minute with a plausible value. withheld_by_floor totals CANNOT repair this the way they repair a sum. Either state that the extremum is over bars of at least 3 trades only, or obtain the data in a mode without the floor.", "timestamp_semantics": "observation", "timestamp_note": "ts is when this recorder OBSERVED the trade, not the venue's event time; do not compare it against exchange-timed venues at sub-second resolution.", "note": null } ## [agent thinking] ## [agent] Most venues look clean. There are two problems: edgeX returned no bars for the window, and Paradex has lost most of its data. I'll look into edgeX first. ## [tool call 18] mcp__peerfeed__describe_dataset { "instrument": "edgex/trades:BTCUSD" } ## [tool result] { "call_id": "e6e0d69fea244993", "instrument": "edgex/trades:BTCUSD", "dataset": "edgex/trades", "kind": "trades", "columns": { "instrument": "contractName", "timestamp": "time", "price": "price", "size": "size", "side": null }, "canonical_columns": [ "instrument", "ts", "price", "size", "side" ], "side_encoding": { "canonical": "buy | sell | unknown — the AGGRESSOR's direction", "venue_value_kept_as": "side_raw", "measured": false, "note": "No measured mapping for this venue, so side is always 'unknown'. Do not infer direction from side_raw here — this venue's column was measured and carries no direction signal." }, "timestamp_semantics": "exchange", "timestamp_note": "ts is the venue's own event time.", "first_ts": "2025-12-15T22:57:07.520000+00:00", "last_ts": "2026-08-14T08:02:32.450000+00:00", "days_covered": 244, "total_rows": 7801366, "avg_rows_per_day": 31973, "native_granularity": "tick (individual trades)", "derived_granularities": [ "1m", "5m", "15m", "1h", "4h", "1d" ], "days_with_missing_shards": [ { "day": "2025-12-15", "shards_present": 1, "shards_expected": 12 }, { "day": "2026-04-03", "shards_present": 7, "shards_expected": 12 }, { "day": "2026-04-06", "shards_present": 5, "shards_expected": 12 }, { "day": "2026-07-27", "shards_present": 11, "shards_expected": 12 }, { "day": "2026-07-28", "shards_present": 9, "shards_expected": 12 }, { "day": "2026-07-31", "shards_present": 11, "shards_expected": 12 }, { "day": "2026-08-05", "shards_present": 6, "shards_expected": 12 }, { "day": "2026-08-06", "shards_present": 1, "shards_expected": 12 }, { "day": "2026-08-07", "shards_present": 1, "shards_expected": 12 }, { "day": "2026-08-09", "shards_present": 1, "shards_expected": 12 }, { "day": "2026-08-10", "shards_present": 1, "shards_expected": 12 }, { "day": "2026-08-13", "shards_present": 1, "shards_expected": 12 }, { "day": "2026-08-14", "shards_present": 1, "shards_expected": 12 }, { "day": "2026-08-15", "shards_present": 2, "shards_expected": 12 }, { "day": "2026-08-17", "shards_present": 2, "shards_expected": 12 }, { "day": "2026-08-20", "shards_present": 1, "shards_expected": 12 }, { "day": "2026-08-21", "shards_present": 2, "shards_expected": 12 }, { "day": "2026-08-24", "shards_present": 1, "shards_expected": 12 }, { "day": "2026-08-27", "shards_present": 1, "shards_expected": 12 }, { "day": "2026-08-28", "shards_present": 4, "shards_expected": 12 } ], "days_with_no_data_for_instrument": [], "mean_shard_coverage": 0.364, "low_coverage_days": [ { "day": "2025-12-18", "shard_coverage": 0.869 }, { "day": "2025-12-19", "shard_coverage": 0.255 }, { "day": "2025-12-20", "shard_coverage": 0.256 }, { "day": "2025-12-21", "shard_coverage": 0.254 }, { "day": "2025-12-22", "shard_coverage": 0.258 }, { "day": "2025-12-23", "shard_coverage": 0.258 }, { "day": "2025-12-24", "shard_coverage": 0.257 }, { "day": "2025-12-25", "shard_coverage": 0.294 }, { "day": "2025-12-28", "shard_coverage": 0.869 }, { "day": "2025-12-29", "shard_coverage": 0.258 }, { "day": "2025-12-30", "shard_coverage": 0.259 }, { "day": "2025-12-31", "shard_coverage": 0.56 }, { "day": "2026-01-01", "shard_coverage": 0.256 }, { "day": "2026-01-02", "shard_coverage": 0.26 }, { "day": "2026-01-03", "shard_coverage": 0.26 }, { "day": "2026-01-04", "shard_coverage": 0.259 }, { "day": "2026-01-05", "shard_coverage": 0.257 }, { "day": "2026-01-06", "shard_coverage": 0.258 }, { "day": "2026-01-07", "shard_coverage": 0.261 }, { "day": "2026-01-08", "shard_coverage": 0.26 }, { "day": "2026-01-09", "shard_coverage": 0.26 }, { "day": "2026-01-10", "shard_coverage": 0.261 }, { "day": "2026-01-11", "shard_coverage": 0.258 }, { "day": "2026-01-12", "shard_coverage": 0.314 }, { "day": "2026-01-13", "shard_coverage": 0.365 }, { "day": "2026-01-14", "shard_coverage": 0.26 }, { "day": "2026-01-15", "shard_coverage": 0.259 }, { "day": "2026-01-16", "shard_coverage": 0.258 }, { "day": "2026-01-17", "shard_coverage": 0.258 }, { "day": "2026-01-18", "shard_coverage": 0.255 }, { "day": "2026-01-19", "shard_coverage": 0.256 }, { "day": "2026-01-20", "shard_coverage": 0.255 }, { "day": "2026-01-21", "shard_coverage": 0.257 }, { "day": "2026-01-22", "shard_coverage": 0.258 }, { "day": "2026-01-23", "shard_coverage": 0.256 }, { "day": "2026-01-24", "shard_coverage": 0.257 }, { "day": "2026-01-25", "shard_coverage": 0.253 }, { "day": "2026-01-26", "shard_coverage": 0.256 }, { "day": "2026-01-27", "shard_coverage": 0.376 }, { "day": "2026-01-28", "shard_coverage": 0.315 }, { "day": "2026-01-29", "shard_coverage": 0.315 }, { "day": "2026-01-30", "shard_coverage": 0.553 }, { "day": "2026-02-01", "shard_coverage": 0.833 }, { "day": "2026-02-02", "shard_coverage": 0.44 }, { "day": "2026-02-03", "shard_coverage": 0.318 }, { "day": "2026-02-04", "shard_coverage": 0.253 }, { "day": "2026-02-05", "shard_coverage": 0.256 }, { "day": "2026-02-06", "shard_coverage": 0.256 }, { "day": "2026-02-07", "shard_coverage": 0.256 }, { "day": "2026-02-08", "shard_coverage": 0.258 } ], "coverage_warning": "PARTIAL DATA: shards in this range span ~36% of their 2-hour windows, against ~99% for healthy shards of this feed, i.e. 37% of normal. Bars at 1h and coarser are computed from a fraction of the trades. Gaps are real missing data, not quiet markets.", "known_data_labels": { "count": 37, "kinds": { "absent": 6, "partial_window": 31 }, "permanent": 37, "lowest_coverage_fraction": 0.26, "lowest_coverage_fraction_lower_bound": null, "coverage_note": "lowest_coverage_fraction is the worst SINGLE SHARD in this window, not the fraction of the window that is present, and it is not a measure of how much data there is. A day whose shards are labelled 0.26 can hold more trade-minutes than an unlabelled day if the market was quieter. Compare density directly before rejecting a window on this number.", "labelled_days": { "from": "2026-08-08", "to": "2026-09-17", "count": 9 }, "labels_omitted": "37 per-day record(s) not inlined; query a window with run_query to get the ones that apply to it, or read the files named in label_source" }, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/edgex/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes_omitted": "Scope notes for biased_subset, census_incomplete, not_archived, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null, "scope_notes_available_for": [ "absent", "partial_window" ], "scope_notes_omitted_here": "2 per-kind scope note(s) omitted to keep this response small; run_query returns them in full for the kinds your window matches. They say how far each kind's claim extends -- no kind is exhaustive, so absence of a label never means a defect did not happen." }, "coverage_method": "fraction of each 2h shard's window its data actually spans; shard presence alone does not detect a partially written shard" } ## [tool call 19] mcp__peerfeed__data_quality { "dataset": "edgex/trades" } ## [tool result] { "call_id": "f4eec34ed103461c", "findings": [ { "check": "window_coverage", "dataset": "edgex/trades", "severity": "critical", "days_affected": 214, "worst_value": 0.0916, "healthy_value": 0.9916170023148148, "first_day": "2025-12-19", "last_day": "2026-09-16", "message": "holds ~9% of its window, 9% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 251, "files": 1, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "timestamp_plausibility", "dataset": "edgex/trades", "severity": "critical", "days_affected": 169, "worst_value": 654.6448, "healthy_value": 0.0, "first_day": "2025-12-15", "last_day": "2026-09-19", "message": "timestamps reach 654.6 day(s) outside the day they are filed under — stale replay or a unit error", "detail": { "earliest": "2024-11-11 09:31:32.564000+01:00", "latest": "2026-08-14 10:02:33.189000+02:00", "days_before_window": 654.645, "days_after_window": 0.0 } }, { "check": "shard_completeness", "dataset": "edgex/trades", "severity": "critical", "days_affected": 7, "worst_value": 0.1667, "healthy_value": 1.0, "first_day": "2026-04-06", "last_day": "2026-09-17", "message": "2 of 12 2h shards exist for this day on this host", "detail": { "shards_present": 2, "shards_expected": 12, "rows": 11040 } }, { "check": "volume_anomaly", "dataset": "edgex/trades", "severity": "critical", "days_affected": 6, "worst_value": 0.0002, "healthy_value": 1.0, "first_day": "2025-12-19", "last_day": "2026-08-13", "message": "0% of the 156,042 row median for the preceding days", "detail": { "rows": 30, "baseline_median": 156042 } }, { "check": "instrument_scope", "dataset": "edgex/trades", "severity": "critical", "days_affected": 3, "worst_value": 0.0598, "healthy_value": 1.0, "first_day": "2026-08-09", "last_day": "2026-08-13", "message": "11 instruments recorded against a usual 184 — coverage narrowed, likely a subscription change rather than a quiet market", "detail": { "instruments": 11, "reference_p90": 184, "history_days": 90 } }, { "check": "day_continuity", "dataset": "edgex/trades", "severity": "critical", "days_affected": 1, "worst_value": 18.0, "healthy_value": 0.0, "first_day": null, "last_day": null, "message": "18 day(s) missing, longest run 5 day(s)", "detail": { "first_day": "2025-12-15", "last_day": "2026-09-29", "days_present": 271, "longest_gap_days": 5, "gaps": [ [ "2025-12-16", "2025-12-16" ], [ "2026-04-04", "2026-04-05" ], [ "2026-08-08", "2026-08-08" ], [ "2026-08-11", "2026-08-12" ], [ "2026-08-16", "2026-08-16" ] ] } }, { "check": "catalog_staleness", "dataset": "edgex/trades", "severity": "critical", "days_affected": 1, "worst_value": 1.0, "healthy_value": 0.0, "first_day": null, "last_day": null, "message": "1 of 9 indexed days have files that changed after they were measured (newest 2026-09-21); everything reported about them describes the previous version of those files. Re-index to re-measure.", "detail": { "days_measured": 9, "stale_days": 1, "recent_days_being_written": 0, "newest_stale_day": "2026-09-21", "note": "files changed after this day was indexed; re-index to re-measure", "days_examined_this_run": 800, "catalog_days_total": 10429, "coverage_note": "NEWEST 800 of 10,429 indexed dataset-days were examined; older days were not looked at, so a count of zero here is a lower bound rather than an all-clear" } }, { "check": "instrument_scope", "dataset": "edgex/trades", "severity": "warn", "days_affected": 51, "worst_value": 0.1685, "healthy_value": 1.0, "first_day": "2026-04-14", "last_day": "2026-08-07", "message": "31 instruments recorded against a usual 184 — coverage narrowed, likely a subscription change rather than a quiet market", "detail": { "instruments": 31, "reference_p90": 184, "history_days": 90 } }, { "check": "volume_anomaly", "dataset": "edgex/trades", "severity": "warn", "days_affected": 19, "worst_value": 158.9575, "healthy_value": 1.0, "first_day": "2025-12-17", "last_day": "2026-09-21", "message": "159.0x the recent median — possible duplication", "detail": { "rows": 823718, "baseline_median": 5182 } }, { "check": "window_coverage", "dataset": "edgex/trades", "severity": "warn", "days_affected": 14, "worst_value": 0.5, "healthy_value": 0.9916170023148148, "first_day": "2025-12-18", "last_day": "2026-08-10", "message": "holds ~50% of its window, 50% of normal (this feed's healthy shards span ~99% of a window); bars at 1h and coarser are computed from a fraction of the data", "detail": { "rows": 304121, "files": 12, "reference": "feed's own post-fix median", "reference_days": 12 } }, { "check": "shard_completeness", "dataset": "edgex/trades", "severity": "warn", "days_affected": 7, "worst_value": 0.5, "healthy_value": 1.0, "first_day": "2026-04-03", "last_day": "2026-09-08", "message": "6 of 12 2h shards exist for this day on this host", "detail": { "shards_present": 6, "shards_expected": 12, "rows": 76548 } }, { "check": "timestamp_plausibility", "dataset": "edgex/trades", "severity": "warn", "days_affected": 3, "worst_value": 6.6101, "healthy_value": 0.0, "first_day": "2026-09-03", "last_day": "2026-09-05", "message": "timestamps reach 6.6 day(s) outside the day they are filed under — stale replay or a unit error", "detail": { "earliest": "2026-08-29 11:21:31.536000+02:00", "latest": "2026-09-06 00:30:59.588000+02:00", "days_before_window": 6.61, "days_after_window": 0.0 } } ], "counts_by_severity": { "critical": 7, "warn": 5 }, "checks_run": [ "catalog_staleness", "day_continuity", "instrument_scope", "shard_completeness", "staleness", "timestamp_plausibility", "volume_anomaly", "window_coverage" ], "checks_not_run": null, "scope_note": "Every check ran.", "note": "Magnitudes are measured, not asserted: each finding reports the value and the value it would take if healthy." } ## [agent thinking] ## [agent] The edgeX `BTCUSD` series stops on 2026-08-14. The contract may have been renamed, so I'll check edgeX's instrument list. ## [tool call 20] mcp__peerfeed__list_instruments { "venue": "edgex", "contains": "BTC" } ## [tool call 21] mcp__peerfeed__run_query { "dataset": "edgex/trades", "start": "2026-09-21T00:00:00Z", "end": "2026-09-22T00:00:00Z", "sql": "SELECT instrument, count(*) bars, sum(trades) tr, avg(close) px, sum(volume*vwap) notional, min(ts), max(ts) FROM t GROUP BY 1 ORDER BY notional DESC LIMIT 15" } ## [tool result] { "call_id": "80264fa3b766405b", "instruments": [ { "instrument": "edgex/trades:BTCUSD", "dataset": "edgex/trades", "symbol": "BTCUSD", "first_day": "2025-12-15", "last_day": "2026-08-28", "days": 244, "rows": 7801366, "granularity": "tick (trades)", "timestamp_semantics": "exchange" }, { "instrument": "edgex/depth:BTCUSDC", "dataset": "edgex/depth", "symbol": "BTCUSDC", "first_day": "2026-09-06", "last_day": "2026-09-29", "days": 22, "rows": 2369549, "granularity": "snapshot (state)", "timestamp_semantics": "observation" }, { "instrument": "edgex/trades:BTCUSDC", "dataset": "edgex/trades", "symbol": "BTCUSDC", "first_day": "2026-09-03", "last_day": "2026-09-29", "days": 27, "rows": 1808671, "granularity": "tick (trades)", "timestamp_semantics": "exchange" }, { "instrument": "edgex/ticker:BTCUSDC", "dataset": "edgex/ticker", "symbol": "BTCUSDC", "first_day": "2026-09-03", "last_day": "2026-09-29", "days": 25, "rows": 547678, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" }, { "instrument": "edgex/ticker:BTCUSD", "dataset": "edgex/ticker", "symbol": "BTCUSD", "first_day": "2026-07-01", "last_day": "2026-08-28", "days": 50, "rows": 315056, "granularity": "snapshot (state)", "timestamp_semantics": "exchange" } ], "total": 5, "offset": 0, "returned": 5 } ## [tool result] { "call_id": "c189ae0272d84b29", "shard_presence": { "shards_present": 12, "shards_expected": 12, "days_indexed": 1, "days_requested": 1, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 1, "days_blind": 0, "catalog_covers": { "from": "2025-12-15", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/edgex/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null, "slices": null, "columns": [ "instrument", "bars", "tr", "px", "notional", "min(ts)", "max(ts)" ], "rows": [ [ "BTCUSDC", 1440, 181337, 84166.01291666672, 941296717.5870004, "2026-09-21T00:00:00Z", "2026-09-21T23:59:00Z" ], [ "ETHUSDC", 1440, 195522, 2717.0168402777786, 777243629.0915997, "2026-09-21T00:00:00Z", "2026-09-21T23:59:00Z" ], [ "SOLUSDC", 1440, 158922, 115.52044444444445, 397756491.1469998, "2026-09-21T00:00:00Z", "2026-09-21T23:59:00Z" ], [ "DOGEUSDC", 1440, 120508, 0.0935808263888889, 120591199.06897005, "2026-09-21T00:00:00Z", "2026-09-21T23:59:00Z" ], [ "XRPUSDC", 1440, 111041, 1.4754288888888887, 105367023.62002, "2026-09-21T00:00:00Z", "2026-09-21T23:59:00Z" ], [ "BNBUSDC", 1440, 72701, 788.948819444444, 75254511.84499997, "2026-09-21T00:00:00Z", "2026-09-21T23:59:00Z" ], [ "XAUUSDC", 1436, 86179, 4357.558077994427, 58725497.25719997, "2026-09-21T00:00:00Z", "2026-09-21T23:59:00Z" ], [ "HYPEUSDC", 1440, 48623, 93.93409583333333, 29400618.45602999, "2026-09-21T00:00:00Z", "2026-09-21T23:59:00Z" ], [ "ZECUSDC", 1436, 26991, 1504.7502298050133, 9041564.676499993, "2026-09-21T00:00:00Z", "2026-09-21T23:58:00Z" ], [ "ENAUSDC", 1435, 24161, 0.21598536585365863, 7416684.116499996, "2026-09-21T00:00:00Z", "2026-09-21T23:58:00Z" ], [ "MSTRUSDC", 1421, 19803, 162.98384236453202, 5420830.982900008, "2026-09-21T00:00:00Z", "2026-09-21T23:59:00Z" ], [ "SUIUSDC", 1392, 19382, 0.9915711925287365, 4430877.9365099985, "2026-09-21T00:00:00Z", "2026-09-21T23:59:00Z" ], [ "EDGEUSDC", 1440, 16179, 0.5786862499999995, 3485139.91162, "2026-09-21T00:00:00Z", "2026-09-21T23:59:00Z" ], [ "PUMPUSDC", 1398, 14499, 0.004360526466380543, 2947394.7559, "2026-09-21T00:00:00Z", "2026-09-21T23:58:00Z" ], [ "ASTERUSDC", 1236, 8489, 0.7464044498381872, 1870655.9301000007, "2026-09-21T00:00:00Z", "2026-09-21T23:59:00Z" ] ], "row_count": 15, "truncated": false, "shards_bound": 13, "rows_estimated": 3158228, "zero_rows_note": null, "table_t": "1-minute bars", "table_t_note": "Bars built from fewer than 3 trades are ABSENT from t, not zero-valued. See withheld_by_floor for HOW MUCH this window lost - a gap in t is a withheld bar or a minute with no trades, and the counts there are the only way to tell.", "withheld_by_floor": { "bars": 194800, "trades": 388121, "volume": 249829939.30900156, "min_trades": 3, "note": "194800 minute bar(s) holding 388121 trade(s) were withheld because each was built from fewer than 3 trades. Those trades are NOT in any sum, count or volume you compute from t. Add them back from these totals before quoting a notional, or state the shortfall." }, "extremum_warning": "YOUR EXTREMUM MAY BE WRONG IN ITS ARGUMENT, NOT JUST ITS VALUE. This query selects a maximum, minimum or ordering, and 194800 bar(s) were withheld from `t` because each held fewer than 3 trades. A true extreme minute is often a THIN one, so the row you want is disproportionately likely to be among those withheld: a measured case had the largest dislocation in a 2-trade minute, and the reported answer named the wrong minute with a plausible value. withheld_by_floor totals CANNOT repair this the way they repair a sum. Either state that the extremum is over bars of at least 3 trades only, or obtain the data in a mode without the floor.", "timestamp_semantics": "exchange", "timestamp_note": "ts is the venue's own event time.", "note": null } ## [agent thinking] ## [agent] edgeX's BTC perp is now `BTCUSDC`. The quality checks flag possible duplication on 2026-09-21, so I'll pull daily figures across venues to spot it. ## [tool call 22] mcp__peerfeed__run_query { "dataset": "edgex/trades", "instrument": "BTCUSDC", "start": "2026-09-21T00:00:00Z", "end": "2026-09-28T00:00:00Z", "sql": "WITH b AS (SELECT ts, close, volume, vwap, trades, ln(close/lag(close) OVER (ORDER BY ts)) r, epoch(ts - lag(ts) OVER (ORDER BY ts))/60 gap FROM t) SELECT count(*) bars, sum(trades) trades, sum(volume) vol_base, sum(volume*vwap) notional, min(close) minpx, max(close) maxpx, avg(close) avgpx, count(r) FILTER (WHERE gap=1) n1, sqrt(avg(r*r) FILTER (WHERE gap=1)*525600) rv_consec, stddev_samp(r) FILTER (WHERE gap=1)*sqrt(525600) sd_consec, sqrt(sum(r*r)/sum(gap)*525600) rv_allgaps, max(abs(r)) maxabs, count(*) FILTER (WHERE abs(r)>0.005) n_gt50bp, sqrt(sum(r*r) FILTER (WHERE gap=1 AND abs(r)<=0.005)/count(r) FILTER (WHERE gap=1 AND abs(r)<=0.005)*525600) rv_trim FROM b" } ## [tool result] { "call_id": "50ffe2f6bd534e2f", "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-12-15", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/edgex/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null, "slices": null, "columns": [ "bars", "trades", "vol_base", "notional", "minpx", "maxpx", "avgpx", "n1", "rv_consec", "sd_consec", "rv_allgaps", "maxabs", "n_gt50bp", "rv_trim" ], "rows": [ [ 10079, 826369, 35316.54799999994, 2992774694.4728003, 80890.5, 87321.7, 84608.7027978979, 10077, 0.36455110842281063, 0.36455815876491104, 0.3645149373569783, 0.008788602519869999, 2, 0.3568145687735789 ] ], "row_count": 1, "truncated": false, "shards_bound": 85, "rows_estimated": 948336, "zero_rows_note": null, "table_t": "1-minute bars", "table_t_note": "Bars built from fewer than 3 trades are ABSENT from t, not zero-valued. See withheld_by_floor for HOW MUCH this window lost - a gap in t is a withheld bar or a minute with no trades, and the counts there are the only way to tell.", "withheld_by_floor": { "bars": 1, "trades": 2, "volume": 0.01, "min_trades": 3, "note": "1 minute bar(s) holding 2 trade(s) were withheld because each was built from fewer than 3 trades. Those trades are NOT in any sum, count or volume you compute from t. Add them back from these totals before quoting a notional, or state the shortfall." }, "extremum_warning": "YOUR EXTREMUM MAY BE WRONG IN ITS ARGUMENT, NOT JUST ITS VALUE. This query selects a maximum, minimum or ordering, and 1 bar(s) were withheld from `t` because each held fewer than 3 trades. A true extreme minute is often a THIN one, so the row you want is disproportionately likely to be among those withheld: a measured case had the largest dislocation in a 2-trade minute, and the reported answer named the wrong minute with a plausible value. withheld_by_floor totals CANNOT repair this the way they repair a sum. Either state that the extremum is over bars of at least 3 trades only, or obtain the data in a mode without the floor.", "timestamp_semantics": "exchange", "timestamp_note": "ts is the venue's own event time.", "note": null } ## [tool call 23] mcp__peerfeed__run_query { "start": "2026-09-21T00:00:00Z", "end": "2026-09-28T00:00:00Z", "slices": [ { "dataset": "hyperliquid/trades", "instrument": "BTC", "as": "hl" }, { "dataset": "edgex/trades", "instrument": "BTCUSDC", "as": "ex" }, { "dataset": "apex/trades", "instrument": "BTCUSDT", "as": "ap" }, { "dataset": "nado/trades", "instrument": "2", "as": "na" } ], "sql": "WITH d AS (\nSELECT 'hl' v, date_trunc('day',ts) d, sum(volume*vwap) n, sum(trades) tr, count(*) bars FROM hl GROUP BY 2\nUNION ALL SELECT 'ex', date_trunc('day',ts), sum(volume*vwap), sum(trades), count(*) FROM ex GROUP BY 2\nUNION ALL SELECT 'ap', date_trunc('day',ts), sum(volume*vwap), sum(trades), count(*) FROM ap GROUP BY 2\nUNION ALL SELECT 'na', date_trunc('day',ts), sum(volume*vwap), sum(trades), count(*) FROM na GROUP BY 2)\nSELECT * FROM d ORDER BY v, d" } ## [tool result] { "call_id": "4bceadad26bc4a78", "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-10-25", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/hyperliquid/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null, "slices": [ { "table": "hl", "dataset": "hyperliquid/trades", "instrument": "BTC", "shards_bound": 85, "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-10-25", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/hyperliquid/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null }, { "table": "ex", "dataset": "edgex/trades", "instrument": "BTCUSDC", "shards_bound": 85, "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-12-15", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/edgex/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null }, { "table": "ap", "dataset": "apex/trades", "instrument": "BTCUSDT", "shards_bound": 85, "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-12-21", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/apex/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null }, { "table": "na", "dataset": "nado/trades", "instrument": "2", "shards_bound": 85, "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-12-31", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.991, "healthy_shard_coverage": 0.991, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/nado/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null } ], "columns": [ "v", "d", "n", "tr", "bars" ], "rows": [ [ "ap", "2026-09-21T00:00:00Z", 323665525.8409999, 36684, 1440 ], [ "ap", "2026-09-22T00:00:00Z", 272818287.70889986, 22906, 1440 ], [ "ap", "2026-09-23T00:00:00Z", 309357013.56490004, 25499, 1440 ], [ "ap", "2026-09-24T00:00:00Z", 312390166.46029985, 24701, 1440 ], [ "ap", "2026-09-25T00:00:00Z", 293310690.7746999, 22026, 1440 ], [ "ap", "2026-09-26T00:00:00Z", 298930741.08810014, 15416, 1440 ], [ "ap", "2026-09-27T00:00:00Z", 295150688.9322, 18490, 1440 ], [ "ex", "2026-09-21T00:00:00Z", 941296717.5870007, 181337, 1440 ], [ "ex", "2026-09-22T00:00:00Z", 541056503.8972999, 151746, 1440 ], [ "ex", "2026-09-23T00:00:00Z", 656056202.5888997, 147631, 1440 ], [ "ex", "2026-09-24T00:00:00Z", 437848581.7880994, 133508, 1440 ], [ "ex", "2026-09-25T00:00:00Z", 231275385.2311001, 104072, 1440 ], [ "ex", "2026-09-26T00:00:00Z", 71489583.25440007, 44338, 1439 ], [ "ex", "2026-09-27T00:00:00Z", 113751720.126, 63737, 1440 ], [ "hl", "2026-09-21T00:00:00Z", 5114521618.150503, 611837, 1440 ], [ "hl", "2026-09-22T00:00:00Z", 2762920290.9274006, 366327, 1440 ], [ "hl", "2026-09-23T00:00:00Z", 3908914648.6989017, 436231, 1439 ], [ "hl", "2026-09-24T00:00:00Z", 4083472456.6594334, 383149, 1440 ], [ "hl", "2026-09-25T00:00:00Z", 2878805241.728609, 305800, 1440 ], [ "hl", "2026-09-26T00:00:00Z", 894116633.3116595, 126934, 1438 ], [ "hl", "2026-09-27T00:00:00Z", 1229228864.8277907, 175800, 1440 ], [ "na", "2026-09-21T00:00:00Z", 192387812.8511498, 55705, 1440 ], [ "na", "2026-09-22T00:00:00Z", 185058301.35584995, 47734, 1419 ], [ "na", "2026-09-23T00:00:00Z", 141996537.02874997, 41919, 1408 ], [ "na", "2026-09-24T00:00:00Z", 125195091.48285007, 40498, 1406 ], [ "na", "2026-09-25T00:00:00Z", 97515504.81460004, 36263, 1356 ], [ "na", "2026-09-26T00:00:00Z", 49679574.02085002, 15911, 1045 ], [ "na", "2026-09-27T00:00:00Z", 54443970.82624994, 23132, 1225 ] ], "row_count": 28, "truncated": false, "shards_bound": 340, "rows_estimated": 4197869, "zero_rows_note": null, "table_t": "1-minute bars", "table_t_note": "Bars built from fewer than 3 trades are ABSENT from t, not zero-valued. See withheld_by_floor for HOW MUCH this window lost - a gap in t is a withheld bar or a minute with no trades, and the counts there are the only way to tell.", "withheld_by_floor": { "bars": 465, "trades": 697, "volume": 13.024900000000004, "min_trades": 3, "note": "465 minute bar(s) holding 697 trade(s) were withheld because each was built from fewer than 3 trades. Those trades are NOT in any sum, count or volume you compute from t. Add them back from these totals before quoting a notional, or state the shortfall." }, "extremum_warning": "YOUR EXTREMUM MAY BE WRONG IN ITS ARGUMENT, NOT JUST ITS VALUE. This query selects a maximum, minimum or ordering, and 465 bar(s) were withheld from `t` because each held fewer than 3 trades. A true extreme minute is often a THIN one, so the row you want is disproportionately likely to be among those withheld: a measured case had the largest dislocation in a 2-trade minute, and the reported answer named the wrong minute with a plausible value. withheld_by_floor totals CANNOT repair this the way they repair a sum. Either state that the extremum is over bars of at least 3 trades only, or obtain the data in a mode without the floor.", "timestamp_semantics": "exchange", "timestamp_note": "ts is the venue's own event time.", "note": null } ## [agent thinking] ## [agent thinking] EdgeX volume mirrors Hyperliquid's pattern with no signs of duplication, but ApEx's flat ~$300M daily volume, even on weekends, looks suspicious. Next I'll check Paradex and dYdX for volume outliers by comparing their minute closes against Hyperliquid's. ## [tool call 24] mcp__peerfeed__run_query { "start": "2026-09-21T00:00:00Z", "end": "2026-09-28T00:00:00Z", "slices": [ { "dataset": "hyperliquid/trades", "instrument": "BTC", "as": "hl" }, { "dataset": "edgex/trades", "instrument": "BTCUSDC", "as": "ex" }, { "dataset": "apex/trades", "instrument": "BTCUSDT", "as": "ap" }, { "dataset": "nado/trades", "instrument": "2", "as": "na" }, { "dataset": "pacifica/trades", "instrument": "BTC", "as": "pa" } ], "sql": "WITH u AS (\n SELECT 'ex' v, ts, close FROM ex UNION ALL SELECT 'ap', ts, close FROM ap UNION ALL SELECT 'na', ts, close FROM na UNION ALL SELECT 'pa', ts, close FROM pa UNION ALL SELECT 'hl', ts, close FROM hl),\nj AS (SELECT u.v, u.ts, ln(u.close/hl.close) dev FROM u JOIN hl USING (ts))\nSELECT v, count(*) n, avg(dev)*1e4 mean_bp, stddev_samp(dev)*1e4 sd_bp, quantile_cont(abs(dev),0.99)*1e4 p99_bp, max(abs(dev))*1e4 max_bp FROM j GROUP BY v ORDER BY v" } ## [tool result] { "error": "these 5 slices would open 425 shards together; the limit is 400 across the whole query. Narrow the window or name an instrument.", "refused": true, "tool": "run_query" } ## [tool call 25] mcp__peerfeed__run_query { "start": "2026-09-21T00:00:00Z", "end": "2026-09-22T06:00:00Z", "slices": [ { "dataset": "hyperliquid/trades", "instrument": "BTC", "as": "hl" }, { "dataset": "paradex/trades", "instrument": "BTC-USD-PERP", "as": "px" }, { "dataset": "dydx/trades", "instrument": "BTC-USD", "as": "dy" } ], "sql": "WITH h AS (SELECT ts, close, ln(close/lag(close) OVER (ORDER BY ts)) r FROM hl),\np AS (SELECT ts, close, trades, ln(close/lag(close) OVER (ORDER BY ts)) r, epoch(ts-lag(ts) OVER (ORDER BY ts))/60 gap FROM px),\nd AS (SELECT ts, close, trades, ln(close/lag(close) OVER (ORDER BY ts)) r, epoch(ts-lag(ts) OVER (ORDER BY ts))/60 gap FROM dy)\nSELECT 'hl_same_window' k, count(*) n, sqrt(avg(r*r)*525600) rv, NULL sd_dev_bp, NULL maxdev_bp FROM h WHERE ts < TIMESTAMPTZ '2026-09-22 04:27:00+00'\nUNION ALL SELECT 'px_consec', count(*), sqrt(avg(p.r*p.r)*525600), stddev_samp(ln(p.close/h.close))*1e4, max(abs(ln(p.close/h.close)))*1e4 FROM p JOIN h USING(ts) WHERE gap=1\nUNION ALL SELECT 'dy_consec_samewin', count(*), sqrt(avg(d.r*d.r)*525600), stddev_samp(ln(d.close/h.close))*1e4, max(abs(ln(d.close/h.close)))*1e4 FROM d JOIN h USING(ts) WHERE gap=1" } ## [tool result] { "call_id": "2fe9c87e1dde4fc6", "shard_presence": { "shards_present": 24, "shards_expected": 24, "days_indexed": 2, "days_requested": 2, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 2, "days_blind": 0, "catalog_covers": { "from": "2025-10-25", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/hyperliquid/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null, "slices": [ { "table": "hl", "dataset": "hyperliquid/trades", "instrument": "BTC", "shards_bound": 16, "shard_presence": { "shards_present": 24, "shards_expected": 24, "days_indexed": 2, "days_requested": 2, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 2, "days_blind": 0, "catalog_covers": { "from": "2025-10-25", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/hyperliquid/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null }, { "table": "px", "dataset": "paradex/trades", "instrument": "BTC-USD-PERP", "shards_bound": 15, "shard_presence": { "shards_present": 15, "shards_expected": 24, "days_indexed": 2, "days_requested": 2, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 2, "days_blind": 0, "catalog_covers": { "from": "2026-01-04", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 0.625 }, "presence_warning": "INCOMPLETE RANGE: this host holds 15 of 24 expected 2-hour shards for this range (62%). The missing shards are not in the bars and are not counted in shard_coverage, which is measured only on shards that are present. Absent shards are missing data, not quiet markets.", "shard_coverage": 0.861, "healthy_shard_coverage": 0.981, "coverage_warning": "PARTIAL DATA: shards in this range span ~86% of their 2-hour windows, against ~98% for healthy shards of this feed, i.e. 88% of normal. Bars at 1h and coarser are computed from a fraction of the trades. Gaps are real missing data, not quiet markets.", "known_data_labels": { "count": 1, "kinds": { "partial_window": 1 }, "permanent": 1, "lowest_coverage_fraction": 0.224, "lowest_coverage_fraction_lower_bound": null, "coverage_note": "lowest_coverage_fraction is the worst SINGLE SHARD in this window, not the fraction of the window that is present, and it is not a measure of how much data there is. A day whose shards are labelled 0.26 can hold more trade-minutes than an unlabelled day if the market was quieter. Compare density directly before rejecting a window on this number.", "labels": [ { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "partial_window", "permanent": true, "shard": "04-06", "coverage_fraction": 0.224, "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "basis": "window_spanned", "as_of": "2026-09-28T14:54:55+00:00", "coverage_fraction_note": "MEASURED as the fraction of the shard's 7200s window that the data reaches into: last row 2026-09-22T04:26:53.116Z. A ROWS-based fraction is NOT measurable here and is deliberately absent: the same shard holds 185, 233, 318 and 553 rows on 09-22, 09-20, 09-21 and 09-18, a 2.4x spread between healthy days, so any rows ratio would report the day's trading rate as coverage. Healthy window_spanned for this shard is 0.9742-0.9852 on 09-18, 09-20 and 09-21.", "join_hazard": "trade `id` format changed across the gap: 28-digit string before 2026-09-19, str(int64 trade_id) from 2026-09-28. Cross-gap joins on `id` are INVALID. The two encodings cannot collide on length (int64 is at most 19 digits), so each era is internally sound.", "reason": "recorder_stopped_midshard" } ], "truncated": false }, "label_source": { "roots_checked": 3, "label_files_found": 2, "files": [ "~/recorded_data/_labels/paradex/trades/labels.jsonl", "/mnt/nasrecorders/_labels/paradex/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": { "partial_window": "per-shard coverage for 2026-09-15/09-16/09-17 00-02..12-14 at ~0.26. Other days were not measured for windowed loss. AMENDED 2026-09-28: also carries basis='recorder_resumed_midshard' for the shard in which a recorder resumed after a permanent gap -- paradex/trades and paradex/bbo 2026-09-28 14-16. The original basis is basis='window_built' (generator cutoff). Read `basis`, not the kind. A resumed-midshard coverage_fraction must be MEASURED; where it is not, write UNMEASURED rather than deriving it from the resume timestamp, because the feed's rate across the boundary is unknown. That record must also carry `join_hazard`: paradex trade `id` changed format across the gap -- 28-digit string before 2026-09-19, str(int64 trade_id) from 2026-09-28 -- so cross-gap joins on `id` are INVALID. That is a value-format discontinuity, not a `type_widened` promotion; it is a field rather than a kind because one instance does not earn vocabulary. If it recurs, it does. ALSO 2026-09-28: basis='recorder_stopped_midshard' for the shard in which a recorder STOPPED (the mirror of recorder_resumed_midshard) -- paradex/trades 2026-09-22 04-06 (feed died 04:26:53.116 UTC) and paradex/bbo 2026-09-22 04-06 (04:31:32.090 UTC). Same rule: MEASURE coverage_fraction against an adjacent healthy shard, or write UNMEASURED; the feed's rate across the boundary is exactly what must not be assumed from the stop timestamp. ⛔ ENCODING CORRECTED 2026-09-28, market_data_mcp's design accepted over mine: `basis` names WHAT THE FRACTION IS A FRACTION OF (e.g. 'window_spanned', 'window_built'), and the CAUSE goes in `reason` ('recorder_stopped_midshard', 'recorder_resumed_midshard'). I had registered the cause as `basis`, which overloads the one field a consumer needs to decode 0.224 and makes the number uninterpretable. Measured vindication of the measure-don't-derive rule: for paradex 09-22 04-06 the window axis gives trades 0.2240 / bbo 0.2628 against healthy baselines of 0.9742-0.9914, while a ROWS ratio would have said 0.53 for bbo -- twice the truth -- because the same shard holds 185, 233, 318 and 553 rows across four HEALTHY days, a 2.4x spread, so a rows ratio reports trading rate as coverage. paradex 09-28 14-16 is DEFERRED, not missing: L0 exists from 14:08 UTC but no parquet has been generated, and a label over bytes nobody has written would assert coverage of nothing." }, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null }, { "table": "dy", "dataset": "dydx/trades", "instrument": "BTC-USD", "shards_bound": 16, "shard_presence": { "shards_present": 24, "shards_expected": 24, "days_indexed": 2, "days_requested": 2, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 2, "days_blind": 0, "catalog_covers": { "from": "2025-12-31", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.985, "healthy_shard_coverage": 0.985, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/dydx/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null } ], "columns": [ "k", "n", "rv", "sd_dev_bp", "maxdev_bp" ], "rows": [ [ "hl_same_window", 1707, 0.5188841508635295, null, null ], [ "px_consec", 1113, 1.2348163336430371, 13.005601884740045, 206.68681219181917 ], [ "dy_consec_samewin", 316, 0.9139661601833773, 6.162908198543423, 36.17407544397416 ] ], "row_count": 3, "truncated": false, "shards_bound": 47, "rows_estimated": 1015229, "zero_rows_note": null, "table_t": "1-minute bars", "table_t_note": "Bars built from fewer than 3 trades are ABSENT from t, not zero-valued. See withheld_by_floor for HOW MUCH this window lost - a gap in t is a withheld bar or a minute with no trades, and the counts there are the only way to tell.", "withheld_by_floor": { "bars": 684, "trades": 988, "volume": 12.637490000000014, "min_trades": 3, "note": "684 minute bar(s) holding 988 trade(s) were withheld because each was built from fewer than 3 trades. Those trades are NOT in any sum, count or volume you compute from t. Add them back from these totals before quoting a notional, or state the shortfall." }, "extremum_warning": "YOUR EXTREMUM MAY BE WRONG IN ITS ARGUMENT, NOT JUST ITS VALUE. This query selects a maximum, minimum or ordering, and 684 bar(s) were withheld from `t` because each held fewer than 3 trades. A true extreme minute is often a THIN one, so the row you want is disproportionately likely to be among those withheld: a measured case had the largest dislocation in a 2-trade minute, and the reported answer named the wrong minute with a plausible value. withheld_by_floor totals CANNOT repair this the way they repair a sum. Either state that the extremum is over bars of at least 3 trades only, or obtain the data in a mode without the floor.", "timestamp_semantics": "exchange", "timestamp_note": "ts is the venue's own event time.", "note": null } ## [agent thinking] ## [tool call 26] mcp__peerfeed__run_query { "start": "2026-09-21T00:00:00Z", "end": "2026-09-22T06:00:00Z", "slices": [ { "dataset": "hyperliquid/trades", "instrument": "BTC", "as": "hl" }, { "dataset": "paradex/trades", "instrument": "BTC-USD-PERP", "as": "px" } ], "sql": "SELECT px.ts, px.open, px.high, px.low, px.close, px.trades, px.volume, hl.close hl_close, round(ln(px.close/hl.close)*1e4,1) dev_bp FROM px JOIN hl USING(ts) WHERE abs(ln(px.close/hl.close))>0.003 OR abs(ln(px.high/hl.high))>0.005 OR abs(ln(px.low/hl.low))>0.005 ORDER BY ts" } ## [tool result] { "call_id": "ce14fd072fc44ab5", "shard_presence": { "shards_present": 24, "shards_expected": 24, "days_indexed": 2, "days_requested": 2, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 2, "days_blind": 0, "catalog_covers": { "from": "2025-10-25", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/hyperliquid/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null, "slices": [ { "table": "hl", "dataset": "hyperliquid/trades", "instrument": "BTC", "shards_bound": 16, "shard_presence": { "shards_present": 24, "shards_expected": 24, "days_indexed": 2, "days_requested": 2, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 2, "days_blind": 0, "catalog_covers": { "from": "2025-10-25", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/hyperliquid/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null }, { "table": "px", "dataset": "paradex/trades", "instrument": "BTC-USD-PERP", "shards_bound": 15, "shard_presence": { "shards_present": 15, "shards_expected": 24, "days_indexed": 2, "days_requested": 2, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 2, "days_blind": 0, "catalog_covers": { "from": "2026-01-04", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 0.625 }, "presence_warning": "INCOMPLETE RANGE: this host holds 15 of 24 expected 2-hour shards for this range (62%). The missing shards are not in the bars and are not counted in shard_coverage, which is measured only on shards that are present. Absent shards are missing data, not quiet markets.", "shard_coverage": 0.861, "healthy_shard_coverage": 0.981, "coverage_warning": "PARTIAL DATA: shards in this range span ~86% of their 2-hour windows, against ~98% for healthy shards of this feed, i.e. 88% of normal. Bars at 1h and coarser are computed from a fraction of the trades. Gaps are real missing data, not quiet markets.", "known_data_labels": { "count": 1, "kinds": { "partial_window": 1 }, "permanent": 1, "lowest_coverage_fraction": 0.224, "lowest_coverage_fraction_lower_bound": null, "coverage_note": "lowest_coverage_fraction is the worst SINGLE SHARD in this window, not the fraction of the window that is present, and it is not a measure of how much data there is. A day whose shards are labelled 0.26 can hold more trade-minutes than an unlabelled day if the market was quieter. Compare density directly before rejecting a window on this number.", "labels": [ { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "partial_window", "permanent": true, "shard": "04-06", "coverage_fraction": 0.224, "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "basis": "window_spanned", "as_of": "2026-09-28T14:54:55+00:00", "coverage_fraction_note": "MEASURED as the fraction of the shard's 7200s window that the data reaches into: last row 2026-09-22T04:26:53.116Z. A ROWS-based fraction is NOT measurable here and is deliberately absent: the same shard holds 185, 233, 318 and 553 rows on 09-22, 09-20, 09-21 and 09-18, a 2.4x spread between healthy days, so any rows ratio would report the day's trading rate as coverage. Healthy window_spanned for this shard is 0.9742-0.9852 on 09-18, 09-20 and 09-21.", "join_hazard": "trade `id` format changed across the gap: 28-digit string before 2026-09-19, str(int64 trade_id) from 2026-09-28. Cross-gap joins on `id` are INVALID. The two encodings cannot collide on length (int64 is at most 19 digits), so each era is internally sound.", "reason": "recorder_stopped_midshard" } ], "truncated": false }, "label_source": { "roots_checked": 3, "label_files_found": 2, "files": [ "~/recorded_data/_labels/paradex/trades/labels.jsonl", "/mnt/nasrecorders/_labels/paradex/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": { "partial_window": "per-shard coverage for 2026-09-15/09-16/09-17 00-02..12-14 at ~0.26. Other days were not measured for windowed loss. AMENDED 2026-09-28: also carries basis='recorder_resumed_midshard' for the shard in which a recorder resumed after a permanent gap -- paradex/trades and paradex/bbo 2026-09-28 14-16. The original basis is basis='window_built' (generator cutoff). Read `basis`, not the kind. A resumed-midshard coverage_fraction must be MEASURED; where it is not, write UNMEASURED rather than deriving it from the resume timestamp, because the feed's rate across the boundary is unknown. That record must also carry `join_hazard`: paradex trade `id` changed format across the gap -- 28-digit string before 2026-09-19, str(int64 trade_id) from 2026-09-28 -- so cross-gap joins on `id` are INVALID. That is a value-format discontinuity, not a `type_widened` promotion; it is a field rather than a kind because one instance does not earn vocabulary. If it recurs, it does. ALSO 2026-09-28: basis='recorder_stopped_midshard' for the shard in which a recorder STOPPED (the mirror of recorder_resumed_midshard) -- paradex/trades 2026-09-22 04-06 (feed died 04:26:53.116 UTC) and paradex/bbo 2026-09-22 04-06 (04:31:32.090 UTC). Same rule: MEASURE coverage_fraction against an adjacent healthy shard, or write UNMEASURED; the feed's rate across the boundary is exactly what must not be assumed from the stop timestamp. ⛔ ENCODING CORRECTED 2026-09-28, market_data_mcp's design accepted over mine: `basis` names WHAT THE FRACTION IS A FRACTION OF (e.g. 'window_spanned', 'window_built'), and the CAUSE goes in `reason` ('recorder_stopped_midshard', 'recorder_resumed_midshard'). I had registered the cause as `basis`, which overloads the one field a consumer needs to decode 0.224 and makes the number uninterpretable. Measured vindication of the measure-don't-derive rule: for paradex 09-22 04-06 the window axis gives trades 0.2240 / bbo 0.2628 against healthy baselines of 0.9742-0.9914, while a ROWS ratio would have said 0.53 for bbo -- twice the truth -- because the same shard holds 185, 233, 318 and 553 rows across four HEALTHY days, a 2.4x spread, so a rows ratio reports trading rate as coverage. paradex 09-28 14-16 is DEFERRED, not missing: L0 exists from 14:08 UTC but no parquet has been generated, and a label over bytes nobody has written would assert coverage of nothing." }, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null } ], "columns": [ "ts", "open", "high", "low", "close", "trades", "volume", "hl_close", "dev_bp" ], "rows": [ [ "2026-09-21T08:38:00Z", 82954.3, 84000.0, 82954.3, 83687.2, 179, 2.696570000000002, 83770.0, -9.9 ], [ "2026-09-21T13:31:00Z", 84973.8, 85045.2, 83548.4, 84961.1, 25, 0.1756, 85062.0, -11.9 ], [ "2026-09-21T13:32:00Z", 85001.6, 85083.5, 83375.8, 83375.8, 16, 0.004360000000000001, 85117.0, -206.7 ], [ "2026-09-21T13:34:00Z", 85013.7, 85285.2, 84500.0, 85285.2, 11, 0.0017999999999999997, 85221.0, 7.5 ], [ "2026-09-21T13:35:00Z", 85157.4, 85298.2, 84500.0, 85191.5, 14, 0.0265, 85250.0, -6.9 ], [ "2026-09-21T13:39:00Z", 84920.2, 85565.2, 84920.2, 85072.8, 15, 0.00298, 85108.0, -4.1 ], [ "2026-09-21T13:47:00Z", 85356.6, 86537.5, 85333.1, 85483.6, 14, 0.25064000000000003, 85513.0, -3.4 ], [ "2026-09-21T13:48:00Z", 85528.51177261099, 86769.9, 85136.5, 85136.5, 16, 0.34236, 85453.0, -37.1 ], [ "2026-09-21T13:50:00Z", 85457.9, 85852.5, 84696.3, 85653.9177331323, 14, 0.32095999999999997, 85745.0, -10.6 ], [ "2026-09-21T13:52:00Z", 85729.0, 86629.1, 85626.5, 85693.0, 18, 0.12243999999999997, 85777.0, -9.8 ], [ "2026-09-21T13:53:00Z", 85894.2, 86629.1, 85256.5, 85454.4, 59, 0.44155, 85520.0, -7.7 ], [ "2026-09-21T13:57:00Z", 85614.8, 85637.0, 85311.7, 85311.7, 10, 0.10564, 85660.0, -40.7 ], [ "2026-09-21T14:06:00Z", 84924.9, 85284.9, 83939.1, 85167.6, 26, 0.14756000000000014, 85231.0, -7.4 ], [ "2026-09-21T14:08:00Z", 85109.6, 85343.2, 83728.0, 85172.6, 10, 0.00427, 85249.0, -9.0 ], [ "2026-09-21T14:09:00Z", 85202.3, 85237.7, 84402.4, 85207.6, 12, 0.005430000000000001, 85305.0, -11.4 ], [ "2026-09-21T14:10:00Z", 85252.7, 85468.5, 84402.4, 85277.2, 11, 0.15124, 85367.0, -10.5 ], [ "2026-09-21T14:24:00Z", 85702.4, 85752.2, 85200.0, 85682.2, 11, 0.011380000000000001, 85767.0, -9.9 ], [ "2026-09-21T14:37:00Z", 85971.5, 86312.9, 85908.1, 86312.9, 21, 0.052149999999999995, 86053.0, 30.2 ], [ "2026-09-21T14:38:00Z", 86432.9, 86890.0, 85851.7, 86890.0, 22, 0.227, 85962.0, 107.4 ], [ "2026-09-21T14:39:00Z", 85860.7, 86890.0, 85771.4, 85775.2, 11, 0.044239999999999995, 85873.0, -11.4 ], [ "2026-09-21T14:40:00Z", 85799.2, 86890.0, 85624.0, 85644.1, 16, 0.07530999999999999, 85717.0, -8.5 ], [ "2026-09-21T15:02:00Z", 85950.5, 85992.2, 85756.8, 85756.8, 10, 0.054180000000000006, 86080.0, -37.6 ], [ "2026-09-21T15:53:00Z", 86102.6, 86420.9, 86030.8, 86380.9, 13, 0.003660000000000001, 86090.0, 33.7 ], [ "2026-09-21T15:54:00Z", 86039.8, 86517.4, 85958.6, 86517.4, 19, 0.08904000000000002, 86023.0, 57.3 ], [ "2026-09-21T15:55:00Z", 85915.8, 86517.4, 85915.8, 86003.0, 7, 0.0097, 86067.0, -7.4 ], [ "2026-09-21T16:00:00Z", 85954.3, 86074.3, 85669.9, 85699.1, 22, 0.07613999999999999, 85972.0, -31.8 ], [ "2026-09-21T19:18:00Z", 86207.6, 86268.1, 85811.1, 86252.2, 12, 0.044849999999999994, 86309.0, -6.6 ], [ "2026-09-21T20:26:00Z", 86901.0, 88476.6, 86901.0, 87677.9, 25, 1.3968699999999998, 87425.0, 28.9 ], [ "2026-09-21T22:01:00Z", 86522.8, 86582.8, 86020.1, 86536.3, 25, 0.069, 86643.0, -12.3 ], [ "2026-09-21T23:43:00Z", 86546.9, 87767.1, 86534.7, 86534.7, 5, 0.08238, 86567.0, -3.7 ], [ "2026-09-21T23:47:00Z", 86498.7, 86498.7, 86202.6, 86202.6, 4, 0.01173, 86498.0, -34.2 ], [ "2026-09-22T00:05:00Z", 86415.7, 87711.6, 86415.7, 87711.6, 10, 0.04743, 86532.0, 135.4 ], [ "2026-09-22T00:06:00Z", 85685.6, 86464.1, 85685.6, 86354.9, 6, 0.07007, 86402.0, -5.5 ], [ "2026-09-22T00:33:00Z", 86505.2, 87711.6, 86488.3, 86488.3, 10, 0.0185, 86533.0, -5.2 ], [ "2026-09-22T00:34:00Z", 86473.4, 86865.2, 86468.1, 86865.2, 7, 0.01413, 86525.0, 39.2 ], [ "2026-09-22T00:35:00Z", 86433.8, 87105.2, 86413.8, 87105.2, 6, 0.00068, 86462.0, 74.1 ], [ "2026-09-22T00:36:00Z", 87225.2, 87711.6, 87225.2, 87711.6, 12, 0.00171, 86433.0, 146.8 ], [ "2026-09-22T00:37:00Z", 87711.6, 87711.6, 87711.6, 87711.6, 3, 0.00059, 86373.0, 153.8 ], [ "2026-09-22T00:38:00Z", 87711.6, 87711.6, 87556.8, 87556.8, 3, 0.0006399999999999999, 86356.0, 138.1 ], [ "2026-09-22T01:02:00Z", 85864.3, 87164.1, 85845.5, 87164.1, 4, 0.23193999999999998, 85830.0, 154.2 ], [ "2026-09-22T01:03:00Z", 87164.1, 87164.1, 85715.1, 85716.0, 9, 2.3942300000000003, 85737.0, -2.4 ], [ "2026-09-22T01:04:00Z", 86976.7, 86976.7, 85664.5, 85677.8, 11, 0.24761000000000002, 85725.0, -5.5 ], [ "2026-09-22T01:33:00Z", 84750.0, 85772.8, 84750.0, 85542.2, 6, 0.05120000000000001, 85833.0, -33.9 ], [ "2026-09-22T02:40:00Z", 85803.0, 85803.1, 85090.0, 85090.0, 4, 0.09608, 85836.0, -87.3 ] ], "row_count": 44, "truncated": false, "shards_bound": 31, "rows_estimated": 992522, "zero_rows_note": null, "table_t": "1-minute bars", "table_t_note": "Bars built from fewer than 3 trades are ABSENT from t, not zero-valued. See withheld_by_floor for HOW MUCH this window lost - a gap in t is a withheld bar or a minute with no trades, and the counts there are the only way to tell.", "withheld_by_floor": { "bars": 194, "trades": 274, "volume": 5.0239899999999995, "min_trades": 3, "note": "194 minute bar(s) holding 274 trade(s) were withheld because each was built from fewer than 3 trades. Those trades are NOT in any sum, count or volume you compute from t. Add them back from these totals before quoting a notional, or state the shortfall." }, "extremum_warning": "YOUR EXTREMUM MAY BE WRONG IN ITS ARGUMENT, NOT JUST ITS VALUE. This query selects a maximum, minimum or ordering, and 194 bar(s) were withheld from `t` because each held fewer than 3 trades. A true extreme minute is often a THIN one, so the row you want is disproportionately likely to be among those withheld: a measured case had the largest dislocation in a 2-trade minute, and the reported answer named the wrong minute with a plausible value. withheld_by_floor totals CANNOT repair this the way they repair a sum. Either state that the extremum is over bars of at least 3 trades only, or obtain the data in a mode without the floor.", "timestamp_semantics": "exchange", "timestamp_note": "ts is the venue's own event time.", "note": null } ## [tool call 27] mcp__peerfeed__run_query { "start": "2026-09-21T00:00:00Z", "end": "2026-09-28T00:00:00Z", "slices": [ { "dataset": "hyperliquid/trades", "instrument": "BTC", "as": "hl" }, { "dataset": "edgex/trades", "instrument": "BTCUSDC", "as": "ex" }, { "dataset": "apex/trades", "instrument": "BTCUSDT", "as": "ap" } ], "sql": "WITH u AS (SELECT 'ex' v, ts, close FROM ex UNION ALL SELECT 'ap', ts, close FROM ap),\nj AS (SELECT u.v, u.ts, ln(u.close/hl.close) dev FROM u JOIN hl USING (ts))\nSELECT v, count(*) n, avg(dev)*1e4 mean_bp, stddev_samp(dev)*1e4 sd_bp, quantile_cont(abs(dev),0.99)*1e4 p99_bp, max(abs(dev))*1e4 max_bp FROM j GROUP BY v ORDER BY v" } ## [tool result] { "call_id": "153b4d1037ff4338", "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-10-25", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/hyperliquid/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null, "slices": [ { "table": "hl", "dataset": "hyperliquid/trades", "instrument": "BTC", "shards_bound": 85, "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-10-25", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/hyperliquid/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null }, { "table": "ex", "dataset": "edgex/trades", "instrument": "BTCUSDC", "shards_bound": 85, "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-12-15", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/edgex/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null }, { "table": "ap", "dataset": "apex/trades", "instrument": "BTCUSDT", "shards_bound": 85, "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-12-21", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/apex/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null } ], "columns": [ "v", "n", "mean_bp", "sd_bp", "p99_bp", "max_bp" ], "rows": [ [ "ap", 10077, -4.783184639355412, 4.308060934173024, 14.744994061124926, 23.91197019734371 ], [ "ex", 10076, -5.945458314285449, 4.3992197306600005, 15.54816674213166, 25.772755179304262 ] ], "row_count": 2, "truncated": false, "shards_bound": 255, "rows_estimated": 3886885, "zero_rows_note": null, "table_t": "1-minute bars", "table_t_note": "Bars built from fewer than 3 trades are ABSENT from t, not zero-valued. See withheld_by_floor for HOW MUCH this window lost - a gap in t is a withheld bar or a minute with no trades, and the counts there are the only way to tell.", "withheld_by_floor": { "bars": 1, "trades": 2, "volume": 0.01, "min_trades": 3, "note": "1 minute bar(s) holding 2 trade(s) were withheld because each was built from fewer than 3 trades. Those trades are NOT in any sum, count or volume you compute from t. Add them back from these totals before quoting a notional, or state the shortfall." }, "extremum_warning": "YOUR EXTREMUM MAY BE WRONG IN ITS ARGUMENT, NOT JUST ITS VALUE. This query selects a maximum, minimum or ordering, and 1 bar(s) were withheld from `t` because each held fewer than 3 trades. A true extreme minute is often a THIN one, so the row you want is disproportionately likely to be among those withheld: a measured case had the largest dislocation in a 2-trade minute, and the reported answer named the wrong minute with a plausible value. withheld_by_floor totals CANNOT repair this the way they repair a sum. Either state that the extremum is over bars of at least 3 trades only, or obtain the data in a mode without the floor.", "timestamp_semantics": "exchange", "timestamp_note": "ts is the venue's own event time.", "note": null } ## [tool call 28] mcp__peerfeed__run_query { "start": "2026-09-21T00:00:00Z", "end": "2026-09-28T00:00:00Z", "slices": [ { "dataset": "hyperliquid/trades", "instrument": "BTC", "as": "hl" }, { "dataset": "nado/trades", "instrument": "2", "as": "na" }, { "dataset": "pacifica/trades", "instrument": "BTC", "as": "pa" }, { "dataset": "dydx/trades", "instrument": "BTC-USD", "as": "dy" } ], "sql": "WITH u AS (SELECT 'na' v, ts, close FROM na UNION ALL SELECT 'pa', ts, close FROM pa UNION ALL SELECT 'dy', ts, close FROM dy),\nj AS (SELECT u.v, u.ts, ln(u.close/hl.close) dev FROM u JOIN hl USING (ts))\nSELECT v, count(*) n, avg(dev)*1e4 mean_bp, stddev_samp(dev)*1e4 sd_bp, quantile_cont(abs(dev),0.99)*1e4 p99_bp, max(abs(dev))*1e4 max_bp FROM j GROUP BY v ORDER BY v" } ## [tool result] { "call_id": "745ccbec7d504368", "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-10-25", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/hyperliquid/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null, "slices": [ { "table": "hl", "dataset": "hyperliquid/trades", "instrument": "BTC", "shards_bound": 85, "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-10-25", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/hyperliquid/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null }, { "table": "na", "dataset": "nado/trades", "instrument": "2", "shards_bound": 85, "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-12-31", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.991, "healthy_shard_coverage": 0.991, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/nado/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null }, { "table": "pa", "dataset": "pacifica/trades", "instrument": "BTC", "shards_bound": 85, "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-12-21", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/pacifica/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null }, { "table": "dy", "dataset": "dydx/trades", "instrument": "BTC-USD", "shards_bound": 85, "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-12-31", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.984, "healthy_shard_coverage": 0.985, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/dydx/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null } ], "columns": [ "v", "n", "mean_bp", "sd_bp", "p99_bp", "max_bp" ], "rows": [ [ "dy", 1883, -3.9293207252464244, 6.964530209001895, 22.35762989594623, 66.14356737833435 ], [ "na", 9296, -4.871921704086641, 4.376132726466708, 14.56529790600795, 46.223313315898665 ], [ "pa", 6952, -1.343465136204688, 4.651055215089344, 13.977445904000255, 25.276698668745887 ] ], "row_count": 3, "truncated": false, "shards_bound": 340, "rows_estimated": 3211085, "zero_rows_note": null, "table_t": "1-minute bars", "table_t_note": "Bars built from fewer than 3 trades are ABSENT from t, not zero-valued. See withheld_by_floor for HOW MUCH this window lost - a gap in t is a withheld bar or a minute with no trades, and the counts there are the only way to tell.", "withheld_by_floor": { "bars": 5726, "trades": 9197, "volume": 204.13258000000152, "min_trades": 3, "note": "5726 minute bar(s) holding 9197 trade(s) were withheld because each was built from fewer than 3 trades. Those trades are NOT in any sum, count or volume you compute from t. Add them back from these totals before quoting a notional, or state the shortfall." }, "extremum_warning": "YOUR EXTREMUM MAY BE WRONG IN ITS ARGUMENT, NOT JUST ITS VALUE. This query selects a maximum, minimum or ordering, and 5726 bar(s) were withheld from `t` because each held fewer than 3 trades. A true extreme minute is often a THIN one, so the row you want is disproportionately likely to be among those withheld: a measured case had the largest dislocation in a 2-trade minute, and the reported answer named the wrong minute with a plausible value. withheld_by_floor totals CANNOT repair this the way they repair a sum. Either state that the extremum is over bars of at least 3 trades only, or obtain the data in a mode without the floor.", "timestamp_semantics": "exchange", "timestamp_note": "ts is the venue's own event time.", "note": null } ## [agent thinking] ## [agent thinking] Paradex's inflated volatility appears driven by tiny off-market prints far from Hyperliquid's price. I'll now compute 5-minute realized volatility for a like-for-like comparison over the Paradex-covered window to confirm this once microstructure noise is filtered out. ## [tool call 29] mcp__peerfeed__run_query { "start": "2026-09-21T00:00:00Z", "end": "2026-09-28T00:00:00Z", "slices": [ { "dataset": "hyperliquid/trades", "instrument": "BTC", "as": "hl" }, { "dataset": "edgex/trades", "instrument": "BTCUSDC", "as": "ex" }, { "dataset": "apex/trades", "instrument": "BTCUSDT", "as": "ap" }, { "dataset": "nado/trades", "instrument": "2", "as": "na" } ], "sql": "WITH u AS (SELECT 'hl' v, ts, close FROM hl UNION ALL SELECT 'ex', ts, close FROM ex UNION ALL SELECT 'ap', ts, close FROM ap UNION ALL SELECT 'na', ts, close FROM na),\nf AS (SELECT v, time_bucket(INTERVAL 5 MINUTE, ts) b, arg_max(close, ts) c FROM u GROUP BY 1,2),\nr AS (SELECT v, b, ln(c/lag(c) OVER (PARTITION BY v ORDER BY b)) r, epoch(b - lag(b) OVER (PARTITION BY v ORDER BY b))/60 g FROM f)\nSELECT v, count(*) FILTER (WHERE g=5) n5, sqrt(avg(r*r) FILTER (WHERE g=5)*105120) rv5m,\n sqrt(sum(r*r) FILTER (WHERE b < TIMESTAMPTZ '2026-09-22 04:25:00+00')/ (sum(g) FILTER (WHERE b < TIMESTAMPTZ '2026-09-22 04:25:00+00')/5) *105120) rv5m_pxwin\nFROM r GROUP BY v ORDER BY v" } ## [tool result] { "call_id": "37d0610c108747b6", "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-10-25", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/hyperliquid/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null, "slices": [ { "table": "hl", "dataset": "hyperliquid/trades", "instrument": "BTC", "shards_bound": 85, "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-10-25", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/hyperliquid/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null }, { "table": "ex", "dataset": "edgex/trades", "instrument": "BTCUSDC", "shards_bound": 85, "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-12-15", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/edgex/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null }, { "table": "ap", "dataset": "apex/trades", "instrument": "BTCUSDT", "shards_bound": 85, "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-12-21", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/apex/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null }, { "table": "na", "dataset": "nado/trades", "instrument": "2", "shards_bound": 85, "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-12-31", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.991, "healthy_shard_coverage": 0.991, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/nado/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null } ], "columns": [ "v", "n5", "rv5m", "rv5m_pxwin" ], "rows": [ [ "ap", 2015, 0.3728724630936091, 0.4952698963515109 ], [ "ex", 2015, 0.3719045497034805, 0.496447460936199 ], [ "hl", 2015, 0.3775544515086013, 0.5026476073424345 ], [ "na", 2009, 0.3673048801158618, 0.4931283286187393 ] ], "row_count": 4, "truncated": false, "shards_bound": 340, "rows_estimated": 4197869, "zero_rows_note": null, "table_t": "1-minute bars", "table_t_note": "Bars built from fewer than 3 trades are ABSENT from t, not zero-valued. See withheld_by_floor for HOW MUCH this window lost - a gap in t is a withheld bar or a minute with no trades, and the counts there are the only way to tell.", "withheld_by_floor": { "bars": 465, "trades": 697, "volume": 13.024900000000004, "min_trades": 3, "note": "465 minute bar(s) holding 697 trade(s) were withheld because each was built from fewer than 3 trades. Those trades are NOT in any sum, count or volume you compute from t. Add them back from these totals before quoting a notional, or state the shortfall." }, "extremum_warning": "YOUR EXTREMUM MAY BE WRONG IN ITS ARGUMENT, NOT JUST ITS VALUE. This query selects a maximum, minimum or ordering, and 465 bar(s) were withheld from `t` because each held fewer than 3 trades. A true extreme minute is often a THIN one, so the row you want is disproportionately likely to be among those withheld: a measured case had the largest dislocation in a 2-trade minute, and the reported answer named the wrong minute with a plausible value. withheld_by_floor totals CANNOT repair this the way they repair a sum. Either state that the extremum is over bars of at least 3 trades only, or obtain the data in a mode without the floor.", "timestamp_semantics": "exchange", "timestamp_note": "ts is the venue's own event time.", "note": null } ## [tool call 30] mcp__peerfeed__run_query { "start": "2026-09-21T00:00:00Z", "end": "2026-09-28T00:00:00Z", "slices": [ { "dataset": "hyperliquid/trades", "instrument": "BTC", "as": "hl" }, { "dataset": "pacifica/trades", "instrument": "BTC", "as": "pa" }, { "dataset": "dydx/trades", "instrument": "BTC-USD", "as": "dy" }, { "dataset": "paradex/trades", "instrument": "BTC-USD-PERP", "as": "px" } ], "sql": "WITH u AS (SELECT 'pa' v, ts, close FROM pa UNION ALL SELECT 'dy', ts, close FROM dy UNION ALL SELECT 'px', ts, close FROM px),\nf AS (SELECT v, time_bucket(INTERVAL 5 MINUTE, ts) b, arg_max(close, ts) c FROM u GROUP BY 1,2),\nr AS (SELECT v, b, ln(c/lag(c) OVER (PARTITION BY v ORDER BY b)) r, epoch(b - lag(b) OVER (PARTITION BY v ORDER BY b))/60 g FROM f)\nSELECT v, count(*) FILTER (WHERE g=5) n5, sqrt(avg(r*r) FILTER (WHERE g=5)*105120) rv5m,\n sqrt(sum(r*r)/(sum(g)/5)*105120) rv5m_gapadj,\n sqrt(sum(r*r) FILTER (WHERE b < TIMESTAMPTZ '2026-09-22 04:25:00+00')/ (sum(g) FILTER (WHERE b < TIMESTAMPTZ '2026-09-22 04:25:00+00')/5) *105120) rv5m_pxwin,\n sqrt(sum(r*r) FILTER (WHERE abs(r)<0.01)/(sum(g) FILTER (WHERE abs(r)<0.01)/5)*105120) rv5m_trim100bp\nFROM r GROUP BY v ORDER BY v" } ## [tool result] { "call_id": "3ecd540234894cd3", "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-10-25", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/hyperliquid/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null, "slices": [ { "table": "hl", "dataset": "hyperliquid/trades", "instrument": "BTC", "shards_bound": 85, "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-10-25", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/hyperliquid/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null }, { "table": "pa", "dataset": "pacifica/trades", "instrument": "BTC", "shards_bound": 85, "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-12-21", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.992, "healthy_shard_coverage": 0.992, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/pacifica/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null }, { "table": "dy", "dataset": "dydx/trades", "instrument": "BTC-USD", "shards_bound": 85, "shard_presence": { "shards_present": 84, "shards_expected": 84, "days_indexed": 7, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2025-12-31", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 1.0 }, "presence_warning": null, "shard_coverage": 0.984, "healthy_shard_coverage": 0.985, "coverage_warning": null, "known_data_labels": null, "label_source": { "roots_checked": 3, "label_files_found": 1, "files": [ "/mnt/nasrecorders/_labels/dydx/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": {}, "scope_notes_omitted": "Scope notes for absent, biased_subset, census_incomplete, not_archived, partial_window, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null }, { "table": "px", "dataset": "paradex/trades", "instrument": "BTC-USD-PERP", "shards_bound": 15, "shard_presence": { "shards_present": 15, "shards_expected": 84, "days_indexed": 2, "days_requested": 7, "empty_shard_files": 0, "days_unindexed": 0, "days_measured": 7, "days_blind": 0, "catalog_covers": { "from": "2026-01-04", "to": "2026-09-29" }, "dataset_indexed": true, "measured": true, "fraction": 0.179 }, "presence_warning": "INCOMPLETE RANGE: this host holds 15 of 84 expected 2-hour shards for this range (18%). The missing shards are not in the bars and are not counted in shard_coverage, which is measured only on shards that are present. Absent shards are missing data, not quiet markets.", "shard_coverage": 0.861, "healthy_shard_coverage": 0.981, "coverage_warning": "PARTIAL DATA: shards in this range span ~86% of their 2-hour windows, against ~98% for healthy shards of this feed, i.e. 88% of normal. Bars at 1h and coarser are computed from a fraction of the trades. Gaps are real missing data, not quiet markets.", "known_data_labels": { "count": 15, "kinds": { "partial_window": 1, "absent": 14 }, "permanent": 15, "lowest_coverage_fraction": 0.224, "lowest_coverage_fraction_lower_bound": null, "coverage_note": "lowest_coverage_fraction is the worst SINGLE SHARD in this window, not the fraction of the window that is present, and it is not a measure of how much data there is. A day whose shards are labelled 0.26 can hold more trade-minutes than an unlabelled day if the market was quieter. Compare density directly before rejecting a window on this number.", "labels": [ { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "partial_window", "permanent": true, "shard": "04-06", "coverage_fraction": 0.224, "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "basis": "window_spanned", "as_of": "2026-09-28T14:54:55+00:00", "coverage_fraction_note": "MEASURED as the fraction of the shard's 7200s window that the data reaches into: last row 2026-09-22T04:26:53.116Z. A ROWS-based fraction is NOT measurable here and is deliberately absent: the same shard holds 185, 233, 318 and 553 rows on 09-22, 09-20, 09-21 and 09-18, a 2.4x spread between healthy days, so any rows ratio would report the day's trading rate as coverage. Healthy window_spanned for this shard is 0.9742-0.9852 on 09-18, 09-20 and 09-21.", "join_hazard": "trade `id` format changed across the gap: 28-digit string before 2026-09-19, str(int64 trade_id) from 2026-09-28. Cross-gap joins on `id` are INVALID. The two encodings cannot collide on length (int64 is at most 19 digits), so each era is internally sound.", "reason": "recorder_stopped_midshard" }, { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "absent", "permanent": true, "shard": "06-08", "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "absent", "permanent": true, "shard": "08-10", "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "absent", "permanent": true, "shard": "10-12", "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "absent", "permanent": true, "shard": "12-14", "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "absent", "permanent": true, "shard": "14-16", "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "absent", "permanent": true, "shard": "16-18", "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "absent", "permanent": true, "shard": "18-20", "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "absent", "permanent": true, "shard": "20-22", "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-22", "kind": "absent", "permanent": true, "shard": "22-24", "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-23", "kind": "absent", "permanent": true, "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-24", "kind": "absent", "permanent": true, "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-25", "kind": "absent", "permanent": true, "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-26", "kind": "absent", "permanent": true, "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" }, { "dataset": "paradex/trades", "day": "2026-09-27", "kind": "absent", "permanent": true, "detail": "Paradex moved to SBE binary framing; the JSON parser failed every frame on all 3 nodes and nothing was saved, while the recorder's liveness check waived its no-save alarm. Nothing in L0 or L1, so unrebuildable. unified-recorders #199; resumed 2026-09-28 14:07 UTC. Range MEASURED 2026-09-28 on nm, mgld, ft and the NAS: 09-20 and 09-21 are full days and 09-22 runs to 04:26:53 UTC, so an earlier report of a 09-19 start was wrong by three days.", "source": "market_data_mcp", "as_of": "2026-09-28T14:54:55+00:00", "reason": "recorder_parse_failed" } ], "truncated": false }, "label_source": { "roots_checked": 3, "label_files_found": 2, "files": [ "~/recorded_data/_labels/paradex/trades/labels.jsonl", "/mnt/nasrecorders/_labels/paradex/trades/labels.jsonl" ], "kinds_exhaustive": [], "kinds_not_emitted": [ "census_incomplete", "permission", "type_widened" ], "coverage_declared_by": "mission-2/nm-recovery", "scope_notes": { "absent": "established for the six fleet-wide days found during the 2026-07-27..09-19 recovery sweep, not by a census over all days and datasets. Absence elsewhere means nothing was looked at. AMENDED 2026-09-28: `absent` now CARRIES TWO PROVENANCES; read the `reason` field, never the kind alone. reason absent/implicit = the 2026-07-27..09-19 sweep described above. reason='recorder_parse_failed' = the recorder could not parse the exchange's frames, so nothing was ever written to L0 either and the loss is permanent and unrebuildable -- established for paradex/trades and paradex/bbo 2026-09-19..09-27 (Paradex moved to SBE binary framing; the JSON parser failed every frame; unified-recorders #199, recording resumed 2026-09-28 14:07 UTC). The distinction is load-bearing: a sweep-absent day may still exist on a peer, a parse-failed day exists NOWHERE, so one says look elsewhere and the other says stop looking. ⛔ CORRECTED 2026-09-28: the paradex range stated above as 2026-09-19..09-27 IS WRONG and was never measured by its author (mission-2) -- it was relayed and accepted. Measured file-by-file on all three hosts and the NAS by market_data_mcp, confirmed independently: the fleet-wide stop is 2026-09-22 04:26:53.116 UTC (trades) / 04:31:32.090 UTC (bbo), NOT 09-19. 2026-09-19 is on both peers AND ON THE NAS -- it is missing only from nm's local tree, so labelling it absent would tell a consumer to stop looking for a day the archive holds. 2026-09-20 and 09-21 are FULL days present on all three hosts and absent only from the NAS: that is not_archived / reason='not_yet_processed', owed by mission-2, NOT absent. The emitted paradex labels (42, market_data_mcp, as_of 2026-09-28T14:54:55Z) correctly start at 09-22 and are the authority; this note previously contradicted them. THIRD PROVENANCE, added 2026-09-28: reason='recorder_filter_dropped' -- a day on which filter_unchanged discarded EVERY record because no recorder restart occurred, so the retained subset is empty. Nothing was ever written to L0 (the filter runs before the write), so `absent` is literally accurate and permanent. It is deliberately NOT `biased_subset`: that kind promises rows exist but are unrepresentative, and a consumer selecting datasets with usable rows would wrongly include a zero-row day. The two kinds are the same defect at different amplitudes -- mexc/funding_rate has 159 biased_subset days and ~106 zero-retention days in 2025-12-30..2026-09-20 -- so a zero day's `detail` must name biased_subset so the halves are joinable. ⚠ COUNTS ARE LABELS, NOT LOSS (flagged 2026-09-28 by market_data_mcp, whose labels they are). `emitted_counts_at_as_of.absent` = 293 includes 95 mexc/funding_rate zero-retention days, and those days NEVER HELD ROWS TO LOSE -- the loss they belong to is the 168 `biased_subset` days plus whatever the filter discarded on the 95, which is UNMEASURABLE because the discarded records were never written anywhere. So summing `absent` as a loss figure inflates it. This generalises to every kind: the counts measure how many labels have been WRITTEN, which is a fact about how much looking has been done, not about how much data is gone. The `reason` field prevents the misreading; a bare total invites it.", "partial_window": "per-shard coverage for 2026-09-15/09-16/09-17 00-02..12-14 at ~0.26. Other days were not measured for windowed loss. AMENDED 2026-09-28: also carries basis='recorder_resumed_midshard' for the shard in which a recorder resumed after a permanent gap -- paradex/trades and paradex/bbo 2026-09-28 14-16. The original basis is basis='window_built' (generator cutoff). Read `basis`, not the kind. A resumed-midshard coverage_fraction must be MEASURED; where it is not, write UNMEASURED rather than deriving it from the resume timestamp, because the feed's rate across the boundary is unknown. That record must also carry `join_hazard`: paradex trade `id` changed format across the gap -- 28-digit string before 2026-09-19, str(int64 trade_id) from 2026-09-28 -- so cross-gap joins on `id` are INVALID. That is a value-format discontinuity, not a `type_widened` promotion; it is a field rather than a kind because one instance does not earn vocabulary. If it recurs, it does. ALSO 2026-09-28: basis='recorder_stopped_midshard' for the shard in which a recorder STOPPED (the mirror of recorder_resumed_midshard) -- paradex/trades 2026-09-22 04-06 (feed died 04:26:53.116 UTC) and paradex/bbo 2026-09-22 04-06 (04:31:32.090 UTC). Same rule: MEASURE coverage_fraction against an adjacent healthy shard, or write UNMEASURED; the feed's rate across the boundary is exactly what must not be assumed from the stop timestamp. ⛔ ENCODING CORRECTED 2026-09-28, market_data_mcp's design accepted over mine: `basis` names WHAT THE FRACTION IS A FRACTION OF (e.g. 'window_spanned', 'window_built'), and the CAUSE goes in `reason` ('recorder_stopped_midshard', 'recorder_resumed_midshard'). I had registered the cause as `basis`, which overloads the one field a consumer needs to decode 0.224 and makes the number uninterpretable. Measured vindication of the measure-don't-derive rule: for paradex 09-22 04-06 the window axis gives trades 0.2240 / bbo 0.2628 against healthy baselines of 0.9742-0.9914, while a ROWS ratio would have said 0.53 for bbo -- twice the truth -- because the same shard holds 185, 233, 318 and 553 rows across four HEALTHY days, a 2.4x spread, so a rows ratio reports trading rate as coverage. paradex 09-28 14-16 is DEFERRED, not missing: L0 exists from 14:08 UTC but no parquet has been generated, and a label over bytes nobody has written would assert coverage of nothing." }, "scope_notes_omitted": "Scope notes for biased_subset, census_incomplete, not_archived, permission, precision, type_widened, unreadable are not included because no label of those kinds is in force for this window. They are in _labels/_coverage.json, and data_quality returns them in full.", "absence_note": "NO label kind is claimed exhaustive here, so absence of a label never means the thing did not happen — only that nobody recorded it. See scope_notes for where absence can be relied on.", "warning": null }, "completeness_unavailable": null } ], "columns": [ "v", "n5", "rv5m", "rv5m_gapadj", "rv5m_pxwin", "rv5m_trim100bp" ], "rows": [ [ "dy", 646, 0.6075773425152761, 0.42687855755293586, 0.577299420899386, 0.403976541351898 ], [ "pa", 1952, 0.3762501793207304, 0.37134363756163874, 0.5013654487647652, 0.3617408334734229 ], [ "px", 274, 0.6181731741433013, 0.5789989691275632, 0.5797849759644963, 0.5409478492233666 ] ], "row_count": 3, "truncated": false, "shards_bound": 270, "rows_estimated": 2915912, "zero_rows_note": null, "table_t": "1-minute bars", "table_t_note": "Bars built from fewer than 3 trades are ABSENT from t, not zero-valued. See withheld_by_floor for HOW MUCH this window lost - a gap in t is a withheld bar or a minute with no trades, and the counts there are the only way to tell.", "withheld_by_floor": { "bars": 5456, "trades": 8776, "volume": 196.14167000000174, "min_trades": 3, "note": "5456 minute bar(s) holding 8776 trade(s) were withheld because each was built from fewer than 3 trades. Those trades are NOT in any sum, count or volume you compute from t. Add them back from these totals before quoting a notional, or state the shortfall." }, "extremum_warning": "YOUR EXTREMUM MAY BE WRONG IN ITS ARGUMENT, NOT JUST ITS VALUE. This query selects a maximum, minimum or ordering, and 5456 bar(s) were withheld from `t` because each held fewer than 3 trades. A true extreme minute is often a THIN one, so the row you want is disproportionately likely to be among those withheld: a measured case had the largest dislocation in a 2-trade minute, and the reported answer named the wrong minute with a plausible value. withheld_by_floor totals CANNOT repair this the way they repair a sum. Either state that the extremum is over bars of at least 3 trades only, or obtain the data in a mode without the floor.", "timestamp_semantics": "exchange", "timestamp_note": "ts is the venue's own event time.", "note": null } ## [agent thinking] ## [tool call 31] Bash { "command": "/tmp/peerfeed-a21/venv/bin/python - <<'EOF'\nv={ # notional in bars, withheld base vol, avg px\n'Hyperliquid':(20871979754.304276,0,84659.25),\n'edgeX':(2992774694.4728003,0.01,84608.70),\n'ApEx':(2105623114.3700995,0,84618.45),\n'Pacifica':(1370198888.6064618,163.65358,84672.81),\n'dYdX':(56226399.57759986,27.4641,84817.11),\n'Paradex':(10433654.796076024,5.02399,85077.36),\n'Nado':(846276792.3802989,13.0149,84648.79)}\nadj={k:a+w*p for k,(a,w,p) in v.items()}\nT=sum(adj.values()); T6=T-adj['Paradex']\nfor k,x in adj.items(): print(f\"{k:12s} bars={v[k][0]/1e6:10.2f}M adj={x/1e6:10.2f}M share7={100*x/T:6.2f}% share6={(100*x/T6 if k!='Paradex' else float('nan')):6.2f}%\")\nprint(T/1e6,T6/1e6)\nEOF", "description": "Compute adjusted notionals and shares" } ## [tool result] Hyperliquid bars= 20871.98M adj= 20871.98M share7= 73.83% share6= 73.86% edgeX bars= 2992.77M adj= 2992.78M share7= 10.59% share6= 10.59% ApEx bars= 2105.62M adj= 2105.62M share7= 7.45% share6= 7.45% Pacifica bars= 1370.20M adj= 1384.06M share7= 4.90% share6= 4.90% dYdX bars= 56.23M adj= 58.56M share7= 0.21% share6= 0.21% Paradex bars= 10.43M adj= 10.86M share7= 0.04% share6= nan% Nado bars= 846.28M adj= 847.38M share7= 3.00% share6= 3.00% 28271.22970201336 28260.368619411416 ## [agent thinking] ## [agent] Across the seven venues, BTC perps traded about **$28.27B** in the week, and Hyperliquid had **73.8%** of it. Paradex's figure is **not a week's volume**: our recorder lost Paradex from 2026-09-22 04:26 UTC to the end of the window, so only about 28.4 of 168 hours exist. Realised vol **agrees across venues (about 36–38% annualised)** except for dYdX and Paradex. Both are high because thin trading adds noise to their prices, not because BTC moved differently there. The server only gives 1-minute bars, and it drops any minute with fewer than 3 trades. It reports how much volume it dropped, so I added that back to each venue's notional at the week's average price. The adjustment only matters for Pacifica (+$13.9M), dYdX (+$2.3M), Nado (+$1.1M) and Paradex (+$0.4M). **Where the data needed care** - **edgeX:** the old `BTCUSD` contract stops in mid-August, so I used `BTCUSDC` instead. Its daily volume moves with Hyperliquid's, so the "possible duplication" warning on 09-21 doesn't hold up. - **Nado:** its BTC perp is product id `2` (price about $84.6k). Its timestamps are when our recorder saw each trade, not the exchange's own time. - **Paradex:** the missing data is logged as permanent: the exchange changed its message format and the recorder could not read it. It can't be recovered. - **ApEx:** the data is complete but looks odd. It trades a flat $270–324M every day, even on the weekend when Hyperliquid fell to $0.9B, with larger average trades ($12.7k against Hyperliquid's $8.7k). That looks like incentive or wash volume rather than organic flow. **Why dYdX and Paradex are outliers** - **dYdX:** only 1,885 of 10,080 minutes have a bar, and only 774 of those are back-to-back. Its minute closes are more scattered around Hyperliquid's (6.96bp vs about 4.4bp elsewhere), and on so little trading that inflates vol. Sampled every 5 minutes it falls to 0.40–0.43, close to the others. - **Paradex:** two causes. - **Busier window:** its 28 hours fall on the most volatile part of the week. Hyperliquid's own vol over the same hours was 0.519. - **Off-market prints:** tiny trades far from the market, for example 0.0006 BTC at 87,711.6 when Hyperliquid was around 86,400 (+154bp), and one print 207bp below. It has 16 one-minute moves above 50bp, against 1–3 at the other venues. At 5 minutes over its own window it measures 0.54–0.58 against about 0.50 at the other venues, so the rest is noise. - **Pacifica** is slightly high at 1 minute (0.438) because 30% of its minutes are thin; at 5 minutes it is 0.376. # FINAL ANSWER **Notional and share, 2026-09-21 00:00 to 2026-09-28 00:00 UTC** | Venue (instrument) | Notional (USD) | Share of 7 | Share of 6 (without Paradex) | |---|---|---|---| | Hyperliquid (BTC) | $20.872B | 73.83% | 73.86% | | edgeX (BTCUSDC) | $2.993B | 10.59% | 10.59% | | ApEx (BTCUSDT) | $2.106B | 7.45% | 7.45% | | Pacifica (BTC) | $1.384B | 4.90% | 4.90% | | Nado (product 2) | $0.847B | 3.00% | 3.00% | | dYdX (BTC-USD) | $58.6M | 0.21% | 0.21% | | Paradex (BTC-USD-PERP) | $10.9M (~28.4h only) | 0.04% | — | | **Total** | **$28.271B** | | **$28.260B** | **Realised vol, annualised** (√(mean r²×525,600) on back-to-back 1-minute log returns of the closing price) | Venue | 1-minute vol | Pairs of minutes used | Cross-check: 5-minute vol | |---|---|---|---| | Hyperliquid | 36.7% | 10,073 | 37.8% | | edgeX | 36.5% | 10,077 | 37.2% | | ApEx | 37.3% | 10,079 | 37.3% | | Nado | 38.2% | 8,766 | 36.7% | | Pacifica | 43.8% | 5,217 | 37.6% | | dYdX | **88.5%** | 774 | 40–43% (43% when spanning gaps between trades, 40% trimmed) | | Paradex | **123.7%** | 1,113 | 54–58% (other venues about 50% over the same hours) | **Is vol consistent?** Yes for Hyperliquid, edgeX, ApEx and Nado (36.5–38.2%), and for Pacifica once sampled every 5 minutes. No for dYdX and Paradex, for the reasons above. Neither shows a real difference in how BTC moved. **Judgement calls** 1. I used the current edgeX contract (`BTCUSDC`) and identified Nado's BTC perp as product `2` by its price. 2. Notional is Σ(volume × VWAP) from the bars plus the dropped volume valued at the week's average price. 3. I kept Paradex's partial data rather than extrapolating it. So its share is a lower bound, and I also give shares for the other six. 4. Vol uses only back-to-back minutes, with zero assumed mean return. I used 5-minute sampling and comparisons with Hyperliquid's price to separate noise from genuine price moves. 5. I flagged ApEx's volume as probably not organic but left it in the totals. ## [run ended] subtype=success turns=32 duration_ms=182952