# Coinbase hourly audit of five missing four-hour candles

Registered September 8, 2026 before requesting the hourly records. This is a data audit, with no strategy-return calculations or parameter selection. All existing datasets, decision records and helpers remain immutable.

## Frozen inputs and exact gaps

- `data/coinbase_btc_usd_4h_full.csv`: SHA256 `d8669543ff1a012b89d028cc4a9f44cbb60c3501d76c5f70ff1fb56f50351869`.
- `data/challenger-inputs-20260908/market-cache.json`: SHA256 `08a2b8874516b310318907eb5d5d9180462802614a295d442eaacae65e98b3ee`.
- Missing opening times: 2017-02-28T20:00:00Z; 2018-08-10T04:00:00Z, 08:00:00Z, 12:00:00Z; 2025-10-25T16:00:00Z. Assert these are the complete interior gaps of the frozen CSV and absent in the recent cache. Existing CSV/cache neighboring OHLC must agree.

## Requests fixed before collection

Public endpoint `https://api.exchange.coinbase.com/products/BTC-USD/candles`, GET, `granularity=3600`, no credentials. One request per contiguous gap cluster, including two complete four-hour candles on each side:

| Cluster | Start inclusive | End exclusive for local selection |
| --- | --- | --- |
| 2017 | 2017-02-28T12:00:00Z | 2017-03-01T08:00:00Z |
| 2018 | 2018-08-09T20:00:00Z | 2018-08-11T00:00:00Z |
| 2025 | 2025-10-25T08:00:00Z | 2025-10-26T04:00:00Z |

Save exact URL, request start/receipt UTC times, HTTP status, content type, byte count, raw-body SHA256 and raw body, including failures. Timeout 30 seconds; body limit 1 MiB. No automatic retry. If acquisition fails, retain the unresolved result; any retry is separately receipted. Use an exclusively created version directory and never overwrite an earlier collection.

Official documentation consulted: https://docs.cdp.coinbase.com/api-reference/exchange-api/rest-api/products/get-product-candles (September 8, 2026). It describes hourly granularity, a 300-candle maximum, buckets as time/low/high/open/close/volume, possible responses before start, and absent buckets when there are no ticks. Current retrieval cannot prove original historical availability or rule out source revisions.

## Strict validation and acceptance

The response must be a JSON array of at most 300 six-number arrays. Reject booleans, non-finite values, noninteger or non-hour-aligned timestamps, duplicate timestamps (even identical duplicates), nonpositive prices, negative volume and inconsistent OHLC bounds. Ordering may be ascending or descending; normalize only after validating unique timestamps. Validate every returned row; record and exclude rows outside the registered half-open request window.

Reconstruct a four-hour bucket only if all four exact hourly openings are present. Open is the first open, close is the fourth close, high/low are extrema, volume is the sum. Do not interpolate, forward-fill, relax completeness, use a different venue or change existing observations.

For each cluster, reconstruct all four surrounding complete reference candles (two before and two after the contiguous missing span). Require each OHLC field to differ from the frozen CSV by no more than $0.010000001 (one quoted cent plus floating-point tolerance), and volume by no more than max(1e-7 BTC, 1e-8 times the reference volume). These tolerances are fixed from quoted-price precision and numeric serialization, before acquisition. Require reference CSV/cache OHLC equality within 1e-9 for these neighbors. Any incomplete or mismatching neighbor prevents acceptance of every missing candle in that cluster. Keep comparisons and mismatches visible. If all neighbors pass, accept each missing bucket individually only when its own four hourly records are complete.

Freeze accepted candles as a sparse supplement with source receipt and parent hashes; retain unresolved gaps and diagnostic candidates separately. Empty acceptance is a valid result. Original CSV, cache and canonical decisions are never rewritten, and no complete-data claim is made when any gap remains. Any later performance study needs a separate protocol specifying how supplements enter features versus execution accounting.

## Verification and evidence

Tests cover exact aggregation, missing hours, duplicate records, timestamp alignment, invalid schema/values/bounds, out-of-range handling, neighbor price/volume thresholds, cluster rejection and immutable parent identity. Verify the original SOURCE_MANIFEST dependencies and original/reproduced canonical decision bytes after collection. Save a compact digest, provenance, source/test snapshots, raw receipts, accepted/unresolved data and a hash-checked evidence archive. Run focused tests then the full suite after implementation. No production, cloud or forward-journal changes.
