- Зачем:
- менти доставался плоский тестовый профиль ci; учебный профиль
должен быть один — daily-wave с суточной волной (issue #6).
- Что:
- дефолт daily-wave во всех точках: форма пульта generator_control,
launch.py (API и CLI), Config, Makefile, четыре shell-скрипта.
- автопроверки передают ci явно; контрактный тест пульта теперь
проверяет сам дефолт Param профиля (через AST), а не подстроку.
- доки в том же изменении: README, OPERATIONS, TEST_PLAN,
generator/README, runbook startup-history.
- Проверка:
- make test (206 + 31 passed) и make lint — зелёные.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- форма Trigger DAG требовала заполнить все поля: канонический запуск
«выбрать профиль, остальное пусто» через UI был невозможен (находка F1
ручного HITL); артефакты backfill (data/*.json, 49 МБ) рисковали
попасть в коммит.
- Что:
- пять необязательных Param переведены на Param(None, type=["null",
"string"]) — идиома необязательного поля, проверено по Context7
(Airflow 2.10.5); все места чтения уже None-безопасны (or "").
- контрактный тест дополнен: у необязательных Param есть "null" в type,
у operation/profile — нет.
- .gitignore: правило data/*.json (сиды data/*.jsonl остаются под git);
задача 21 закрыта в .scratch.
- Проверка:
- make test (205 + 31 passed) и make lint — зелёные.
- Зачем:
- режим кормления стенда порциями: менти триггерит «следующий день»,
видит полный цикл DWH за один шаг (задача 13, вариант 2 — генерация
от слепка T_end).
- Что:
- новый ограниченный режим next-day: восстановление мира из state,
генерация ровно [T_end, T_end+24h), публикация данные -> state ->
манифест (манифест — точка фиксации, автоотката нет).
- операция next-day в DAG generator_control: своя предпроверка границы
вместо clean-guard, идемпотентность через параметр expected_t_end.
- цепочка границ — накопительное поле boundaries в манифесте, старый
формат читается как [T0, T_end]; импорт не изменён.
- новая проверка цепочки (make generated-history-chain-check): непарные
счётчики и однородность по каждой границе, явный статус нулевого
стыка, хвост за границей по всем четырём топикам, литералы в UTC
с микросекундами.
- документация OPERATIONS.md: глагол, предпроверка, восстановление
после сбоя, ограничение retention; в задаче 13 — решения двух слепых
ревью постановки и кода с аргументами отклонений.
- Проверка:
- make test: 204 теста генератора + 31 контракт корня, зелёные.
- make generated-history-chain-check: зелёный, 2 внутренние границы,
непарные счётчики нулевые; учебный цикл: DM 322 -> 10026 -> 19196
за два next-day подряд.
- make generated-history-runtime-check (регрессия задачи 20): зелёный.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- коммит-гейт не запускал корневые контрактные тесты, а часть подтверждённых обходов могла снова смешать разные миры генератора.
- Что:
- добавлены цели make test, make lint и contract-test с тихим pytest-выводом через Docker.
- закрыты обходы через generator-reset, неизвестную версию state и fail-open проверку DM-витрин.
- усилены поведенческие контракты CHECK_LIVE_SEAM, профиля manifest и pause-check etl_pipeline; обновлены документы и issue 19.
- Проверка:
- make test; make lint; git diff --check.
- Зачем:
- свежий стенд должен доходить до generator_control без скрытых ручных шагов и зависаний.
- Что:
- quick start явно готовит DDL и откладывает Superset init до готового DM.
- generator_control проверяет паузу etl_pipeline до мутирующих шагов.
- make up пересобирает Airflow и поднимает базовый набор сервисов.
- Проверка:
- make generator-test; docker compose config --quiet; make clean; make up; make ddl.
- Зачем:
- нужен основной ручной интерфейс стенда для backfill/import/check без консольной матрицы переменных.
- Что:
- добавлен DAG generator_control с параметрами Airflow, ветвлением операций и ожиданием ETL.
- вынесена общая логика запуска и предпроверок генератора для Airflow.
- обновлены compose-настройки, зависимости, тесты и документация по пульту.
- Проверка:
- uv run --with pytest --with-requirements generator/requirements.txt pytest generator/tests -q.
- docker compose config --quiet.