docs(specs): спека уточнена после проверки свежим взглядом

- Зачем:
  - три обещания спеки расходились с фактами кода и замеров HITL.
- Что:
  - в путь менти возвращён шаг make superset-init; критерий «терминал
    только make up» поправлен честно.
  - критерий стоимости world_next_day сужен до генерации+manifest:
    ETL full_refresh растёт с миром — явно вынесен в «чего не делаем».
  - проверка профиля ×1 уточнена: runtime-seam уже на daily-wave,
    проверять надо дефолты launch.py и автотесты.
- Проверка:
  - сверка с scripts/run_generated_history_runtime_check.sh, Makefile
    и замерами HITL (ETL 30 с на 110k событий).
This commit is contained in:
2026-07-19 23:20:44 +03:00
parent d6e7a03032
commit 8c68d6cd73
+15 -8
View File
@@ -50,8 +50,9 @@
3. Airflow UI: `world_init` — Trigger с пустой формой. Дефолтная операция — 3. Airflow UI: `world_init` — Trigger с пустой формой. Дефолтная операция —
`import`, путь к артефакту — дефолтом на эталонный мир. DAG сам заливает `import`, путь к артефакту — дефолтом на эталонный мир. DAG сам заливает
Kafka, запускает ETL и сверяет витрины. Kafka, запускает ETL и сверяет витрины.
4. Superset — готовый трёхдневный мир. 4. `make superset-init` — разовая инициализация дашборда (терминал).
5. Дальше по выбору лабы: `world_next_day` (кнопка без параметров) или 5. Superset — готовый трёхдневный мир.
6. Дальше по выбору лабы: `world_next_day` (кнопка без параметров) или
`make generator-continue` (живой поток). `make generator-continue` (живой поток).
### Решения ### Решения
@@ -82,8 +83,9 @@
становится ~постоянной (сейчас день 2 — 638 с и растёт), риск OOM становится ~постоянной (сейчас день 2 — 638 с и растёт), риск OOM
снимается. Разбор по коду — hitl-findings, F9. снимается. Разбор по коду — hitl-findings, F9.
5. **Один учебный профиль**: `daily-wave` (волна, ×60). `ci` (×1, плоско, 5. **Один учебный профиль**: `daily-wave` (волна, ×60). `ci` (×1, плоско,
6h) — служебный для автотестов, менти не предлагается. Перед слиянием 6h) — служебный для автотестов, менти не предлагается. Runtime-seam-
проверить, что runtime-seam-тест не завязан на скорость ×1. проверка уже идёт на `daily-wave`; перед слиянием проверить остальных
потребителей `ci` — дефолты `launch.py` и автотесты, где профиль зашит.
## Чего здесь не делаем ## Чего здесь не делаем
@@ -97,6 +99,10 @@
(JS-ошибка Grid) — отдельные issues вне фичи. (JS-ошибка Grid) — отдельные issues вне фичи.
- **Не включаем расписание по умолчанию** и не занимаемся retention сверх - **Не включаем расписание по умолчанию** и не занимаемся retention сверх
инкрементальных счётчиков. инкрементальных счётчиков.
- **Не делаем инкрементальный ETL**: `world_next_day` по-прежнему зовёт
`full_refresh`, его стоимость растёт с миром (на текущих объёмах —
десятки секунд). Известная цена; исторический план —
`plans/incremental-etl-v2.md` (legacy).
## Форма работ ## Форма работ
@@ -118,13 +124,14 @@
## Проверка ## Проверка
- Чистый стенд: путь менти из раздела UX проходится пустыми формами; - Чистый стенд: путь менти из раздела UX проходится пустыми формами;
от `make up` до дашборда — без документации и без терминала (кроме терминал — только `make up` и `make superset-init`.
`make up`).
- `import` эталонного мира — секунды-минуты, не десятки минут. - `import` эталонного мира — секунды-минуты, не десятки минут.
- После `import` у любого менти совпадают manifest-числа эталонного мира - После `import` у любого менти совпадают manifest-числа эталонного мира
(события, визиты, пользователи, контрольная сумма). (события, визиты, пользователи, контрольная сумма).
- `world_next_day` на дне N по времени ~равен дню 1; - Задача генерации+manifest в `world_next_day` на дне N по времени
`make generated-history-chain-check` зелёный на стыках. ~равна дню 1 (ETL `full_refresh` растёт с миром — это вне скоупа,
см. «Чего не делаем»); `make generated-history-chain-check` зелёный
на стыках.
- `make test` / `make lint` зелёные; профиль `ci` продолжает обслуживать - `make test` / `make lint` зелёные; профиль `ci` продолжает обслуживать
автотесты. автотесты.