- Зачем:
- клиентская сторона мира становится целой: без add_to_cart и purchase
в данных нет ни таксономии событий, ни вложенного JSON, ни денег,
а метка «покупатель» из плана состава ни на что не влияла (#40).
- Что:
- добавлен модуль commerce: корзина шире заказа, номер заказа вида
ГГГГММДД-NNNN, промокод без скидки в сумме, сырой ecommerce через orjson;
- метка покупателя получила два рычага — долгую жизнь куки в плане и
свою воронку в дне; CART_PERCENT опущен с 8 до 6, чтобы конверсия
мира осталась около 2%;
- часть цен каталога получила копейки: productPrice округляется форматом,
purchaseRevenue несёт точную сумму — расхождение живёт внутри события;
- граница суток забирает страницу подтверждения вместе с её покупкой:
потерь на клиентской стороне этот этап не заводит;
- решения и перемеренные числа мира записаны в спеку генератора, §9.
- Проверка:
- make lint && make typecheck && make test — 383 passed (было 353).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
33 lines
1.1 KiB
TOML
33 lines
1.1 KiB
TOML
[project]
|
|
name = "clickstream-generator"
|
|
version = "0.1.0"
|
|
description = "Генератор кликстрима учебного стенда: контракт схемы события и модельный мир"
|
|
readme = "README.md"
|
|
# Верхняя граница — не педантизм: обещание побайтовой воспроизводимости
|
|
# держится на зафиксированных версиях (спека генератора, раздел 2).
|
|
requires-python = ">=3.14,<3.15"
|
|
dependencies = [
|
|
"numpy>=2",
|
|
"orjson>=3.11.9",
|
|
]
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"pytest>=8",
|
|
"ruff>=0.15",
|
|
# Типчекер; молод (0.0.x), но версия закреплена в uv.lock. Настройка
|
|
# сверена с доками Astral через Context7: запуск `uv run ty check`,
|
|
# правил по умолчанию пока достаточно.
|
|
"ty>=0.0.65",
|
|
]
|
|
|
|
[build-system]
|
|
requires = ["uv_build>=0.11.21,<0.12.0"]
|
|
build-backend = "uv_build"
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests"]
|
|
|
|
[tool.ruff.lint]
|
|
select = ["E", "F", "I", "UP", "B"]
|