# Разбор метрик в часовые объекты **Приоритет:** высокий Приём работает, но дальше архива данные не идут: 89 доставок лежат телами `.json.gz`, а в SQLite только строки `delivery`. Всё остальное — каталог, Read API, MCP — стоит на этой задаче. Правила выведены на живом потоке и проверены, изобретать заново не нужно (`docs/local-research.md`, находки 33, 35, 36, 38, 39, 41): - ключ точки — координаты `метрика + слой + метка`; `source` в ключ не входит; - слой выводится из выравнивания меток: плотная метрика (≥10 точек) классифицируется сама, редкая наследует преобладающий слой доставки; - при столкновении выигрывает более полная точка, а не последняя пришедшая (0.66% координат различаются набором полей, а не значением); - три формата времени: локальное со смещением, RFC 3339 Z, Unix-эпоха внутри `heartbeatSeries`; - `sleep_analysis` разводится на два имени — поэпизодное и суточную сводку. Шаги: - миграция `bucket` (`метрика + слой + час`, payload gzip-BLOB, `sealed`); - разбор метрик, вывод слоя, канонизация с округлением до ~12 значащих цифр; - слияние точек в объект read-modify-write, хеш объекта как детектор изменений; - `docs/database.md` — ER-схема (её требует шаг гейта `er-schema`). **Границы после ревью дизайна.** Поэпизодный `sleep_analysis` в этой задаче не сохраняется — модель идентичности вынесена блокером [identichnost-epizodnyh-metrik](identichnost-epizodnyh-metrik.md). Остальное делается целиком. Готово, когда по существующим 89 доставкам собирается хранилище (кроме эпизодов сна), а суммы по часовому слою сходятся с проверкой из `tmp/research/`. Связано: `docs/architecture.md` → «Хранилище», план шаг 3.