Команда snapshot: окно, граница суток, байты и опись #92
Notifications
Due Date
No due date set.
Blocks
Depends on
#93 Топик orders, байтовый чтец и даг приёма: забор в STG
ddmitry/clickstream-data-platform
#91 Заказная судьба: исход, моменты и дельта
ddmitry/clickstream-data-platform
Reference: ddmitry/clickstream-data-platform#92
Reference in New Issue
Block a user
Part of #5.
Цель
Третья команда пакета:
snapshotсобирает слепок дня переигровкой окна,снимает состояние заказов на границе суток, сериализует одной функцией и
отправляет со сдвигом «ночная выгрузка за вчера». Побайтовая
воспроизводимость слепка встаёт под охрану описи. Учебный результат: слепок —
чистая функция (зерно, D), у живого дня нет особого случая.
Что войдёт
snapshot --day D [--days N]со своим Kafka-приёмником (топикorders; сам топик заводит #93) и файловым приёмником для проверок.Семантика
--day— день прогона: прогон дня D отправляет слепок дняD−1, прогон дня 0 не отправляет ничего; закрепить в
--helpи доке.Правило сдвига живёт в одном месте — в проигрывателе.
переигровкой этих дней; у начала оси окно усекается само. Внутри одного
прогона
--days Nпроигрыши дней переиспользуются между слепками(стартовый диапазон — 8 проигрышей, не 49); байты слепков не зависят от
разбиения диапазона на прогоны. Кэша между прогонами нет. Замер цены — в
тело PR.
моменты, не позже границы;
status— по учтённым моментам,updated_at—поздний учтённый момент, а без единого —
created_at. Если это правилоразойдётся с принятыми документами — вопрос владельцу, не починка на
месте.
serialize.py— один словарь с вложеннымсписком и один
orjson.dumps; прямыхjson.dumpsпо коду нет. Контрактпровода — мастер-спека, раздел 2: деньги строками с ровно двумя знаками,
времена RFC 3339 в UTC с миллисекундами,
snapshot_dateстрокойYYYY-MM-DD,itemsобычным массивом, порядок ключей — порядок полейконтракта.
order_id.batch: по ней тикеты приёмасверяют счёт.
Границы
docs/formats/) не заводится: контрактуже записан мастер-спекой и исследованием формата, второй сторож без
читателя не нужен (рез вычитания при нарезке).
приносящий читателя (сверка — этап 4, B+D — этап 6). Счёта строк слепка в
описи нет — опись описывает мир, а не доставку.
Кому что
serialize.py, правило сдвига и CLI — Opus: сериализатор — учебный код с одним местом правды. Кодексу — прогоны пересъёмки и хешей, разбор объёмного вывода при отладке. В брифе: проверять свойство, не текст вывода; POSIX-инструменты.Сначала прочитать
docs/architecture/orders/snapshot.md— целиком, это спека тикета;docs/architecture/orders/fate.md— моменты судьбы;docs/architecture/orders/inventory.md— что хранит опись;docs/research/2026-08-16-order-snapshot-wire-format.md— контракт ипроверка разбора;
docs/architecture/orders/code-rules.md;docs/specs/2026-08-01-generator.md— приёмники, режимы, опись.Проверка
В
generator/:make lint,make typecheck,make test.make testследит за свежестью описи, как уже делает для дней.(усечение у начала оси).
created,в слепке дня D+1 —
paid.order_id, каждаяпроходит разбор по контракту (приём разбора — из исследования
формата).
дня D−1.