Зачем: - дать описи контрольные числа для закрытых дней заказного окна; - зафиксировать словарь наблюдаемых классов без изменения самого мира. Что: - посчитаны match, cancelled и amount_delta с приоритетом отмены; - счётчики добавлены только к дням с закрытым окном; - опись, тесты и документация приведены к новому формату. Проверка: - make lint; - make typecheck; - make test — 429 passed; - uv run pytest tests/test_inventory.py -q — 3 passed после ревью.
2.9 KiB
2.9 KiB
Что хранит опись
Резолюции развилок «Расхождения A–D и опоздания: механика, доли и что обещано» и «Места заказов в стартовом мире». Словарь описи — растяжка-хеш против опоры-счётчика — задан «Чем меряется генератор» в спеке генератора и термином «Опись мира» в CONTEXT.md.
Опись хранит только то, чего движение мира не меняет. Хеш кладём всегда, счётчик — только когда назван его читатель.
- У каждого отправленного слепка — своя строка с хешем байтов. Байты слепка не покрыты хешами дней ни при каком раскладе подпотоков — это второй артефакт мира. Побайтовое обещание («слепок переснимается и даёт те же байты») опись начинает сторожить.
- Счётчики классов расхождений — наблюдаемых, после приоритета, по
итоговой судьбе заказов дня. В строке закрытого дня поле
ordersхранит число заказов каждого класса; пока окно открыто, поля нет. При N сыгранных днях закрыты N − 7 (день d закрывается слепком d + 6, а последний отправленный слепок несёт день N − 2). Для этих счётчиков запланирована проверкаclasses_vs_inventoryиз DQ-звена этапа 4. - Контрольные числа идентичности не заводятся вовсе: uniq известных пользователей и число двухкуковых пар растут, пока мир едет, — опоры из них не выходит; генератор сторожит хеш, транспорт — счёт событий.
- Опись описывает мир, а не доставку. Работа генератора кончается на
Kafka: дошли ли байты до
ods.order— вопрос стенда и его проверок. Поэтому счёта строк у слепка в описи нет; понадобится проверка приёма заказов — число заведётся вместе с ней.