fix(airflow): необязательные поля формы generator_control стали необязательными

- Зачем:
  - форма 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 — зелёные.
This commit is contained in:
2026-07-19 22:17:50 +03:00
parent 91d15e60a0
commit bec56da1c3
4 changed files with 128 additions and 10 deletions
+11 -10
View File
@@ -227,27 +227,28 @@ with DAG(
title="Профиль",
description="Именованный набор настроек генератора.",
),
# "null" в type делает поля формы необязательными (Context7, Airflow 2.10.5).
"duration": Param(
"",
type="string",
None,
type=["null", "string"],
title="Длительность",
description="Например 6h или 2d. Пусто — взять длительность из профиля.",
),
"seed": Param(
"",
type="string",
None,
type=["null", "string"],
title="GEN_SEED",
description="Пусто — взять seed из профиля.",
),
"model_time_speed": Param(
"",
type="string",
None,
type=["null", "string"],
title="GEN_MODEL_TIME_SPEED",
description="Пусто — взять скорость модельного времени из профиля.",
),
"artifact_path": Param(
"",
type="string",
None,
type=["null", "string"],
title="Артефакт",
description=(
"Backfill: куда сохранить файл; пусто — не сохранять. "
@@ -255,8 +256,8 @@ with DAG(
),
),
"expected_t_end": Param(
"",
type="string",
None,
type=["null", "string"],
title="Ожидаемая граница next-day",
description=(
"Необязательный model_t_end до запуска. Защищает от "