fix(airflow): формулировки пульта переписаны живым русским

- Зачем:
  - владелец на ревью PR #175 отметил кальку в подсказках; читать их
    будет менти, и язык здесь — часть продукта.
- Что:
  - переписаны подсказка формы days, докстринги работников, строки
    журнала remember_played, абзац README и пункт в etl.md; смысл
    не менялся.
- Проверка:
  - make lint, make config-test.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
ddadminandClaude Fable 5 committed 2026-08-28 05:14:51 -04:00
1 parent c2c4401a16
commit 17995d4c5e
3 files changed
+18 -19

No files matched your search

+4 -5
View File
@@ -262,11 +262,10 @@ uv run --project generator python -m clickstream_generator batch \
`0` — очистка закончена, а начальная генерация ещё не завершена. Работники `0` — очистка закончена, а начальная генерация ещё не завершена. Работники
начинают играть только с позиции `8` и больше. начинают играть только с позиции `8` и больше.
Форма запуска работника спрашивает только своё — сколько дней играть. В форме запуска можно выбрать только число дней. Первый день работник берет из
Служебные поля Airflow в ней — «Logical date» и «Run ID» за створкой `world_position`. Поля «Logical date» и «Run ID» спрятаны в «Advanced Options».
«Advanced Options» — к оси мира отношения не имеют: какой день пойдёт первым, Они нужны самому Airflow и на выбор дня не влияют. Сыгранные дни и новую
смотрите в `world_position`, а какой сыгран — в журнале шага позицию работник пишет в журнал шага `remember_played`.
`remember_played`.
Выключатель создаётся на паузе. Снимите — мир поедет сам; поставите обратно — Выключатель создаётся на паузе. Снимите — мир поедет сам; поставите обратно —
встанет на границе модельных суток, доиграв начатый день. Форма пульта и доводы встанет на границе модельных суток, доиграв начатый день. Форма пульта и доводы
+12 -12
View File
@@ -148,12 +148,12 @@ def _ingest_orders() -> TriggerDagRunOperator:
maximum=7, maximum=7,
title="Сколько дней прожить", title="Сколько дней прожить",
# description_md рендерится подсказкой прямо в форме запуска # description_md рендерится подсказкой прямо в форме запуска
# (params.rst, Airflow 3.3) — объяснение стоит там, где путают. # (params.rst, Airflow 3.3), чтобы правило было видно сразу.
description_md=( description_md=(
"Какие именно дни — решает не форма: первый несыгранный " "Форма задает только число дней. Номер первого несыгранного "
"день хранит переменная `world_position` (Admin → " "дня работник берет из переменной `world_position` (Admin → "
"Variables). Служебные поля Airflow — Logical date, Run " "Variables). Поля Logical date и Run ID нужны самому Airflow "
"ID — к оси мира отношения не имеют." "и на выбор дня не влияют."
), ),
) )
}, },
@@ -162,9 +162,9 @@ def world_next_day():
"""Прожить следующие дни пачкой, без пауз. """Прожить следующие дни пачкой, без пауз.
Запускается руками. День по умолчанию один, но разгон вперёд идёт одним Запускается руками. День по умолчанию один, но разгон вперёд идёт одним
нажимом, а не десятью: сколько дней играть — параметр запуска. Какие нажимом, а не десятью: сколько дней играть — параметр запуска. Первый
именно дни, знает переменная `world_position`, а не форма: логическая день работник берет из `world_position`. Логическая дата прогона на выбор
дата прогона к оси мира отношения не имеет. дня не влияет.
""" """
@task @task
@@ -174,7 +174,7 @@ def world_next_day():
position = first_day + days position = first_day + days
Variable.set(WORLD_POSITION, str(position)) Variable.set(WORLD_POSITION, str(position))
logging.info( logging.info(
"сыграны дни %s–%s, позиция теперь %s", first_day, position - 1, position "дни %s–%s сыграны; новая позиция — %s", first_day, position - 1, position
) )
first_day = first_unplayed_day() first_day = first_unplayed_day()
@@ -215,15 +215,15 @@ def world_live_day():
Ускорение ×60: модельные сутки укладываются примерно в двадцать четыре Ускорение ×60: модельные сутки укладываются примерно в двадцать четыре
реальные минуты, и суточная волна разворачивается на глазах. Запускается реальные минуты, и суточная волна разворачивается на глазах. Запускается
руками; чтобы мир жил так день за днём сам, есть выключатель `world_live`. руками; чтобы мир жил так день за днём сам, есть выключатель `world_live`.
Какой день пойдёт, знает переменная `world_position`: логическая дата Следующий день работник берет из `world_position`. Логическая дата прогона
прогона к оси мира отношения не имеет. на выбор дня не влияет.
""" """
@task @task
def remember_played(first_day: int) -> None: def remember_played(first_day: int) -> None:
"""Позиция ставится по сыгранному дню и только по успеху.""" """Позиция ставится по сыгранному дню и только по успеху."""
Variable.set(WORLD_POSITION, str(first_day + 1)) Variable.set(WORLD_POSITION, str(first_day + 1))
logging.info("сыгран день %s, позиция теперь %s", first_day, first_day + 1) logging.info("сыгран день %s; новая позиция — %s", first_day, first_day + 1)
first_day = first_unplayed_day() first_day = first_unplayed_day()
played = _generator("play_day", ["live", "--day", PLAYED_DAY]) played = _generator("play_day", ["live", "--day", PLAYED_DAY])
+2 -2
View File
@@ -138,8 +138,8 @@ ODS и ещё не собранный в DDS, затем при необходи
- Партиционная переобработка — переиграть произвольный прошлый день или - Партиционная переобработка — переиграть произвольный прошлый день или
диапазон, включая форму необязательных параметров того же дага. диапазон, включая форму необязательных параметров того же дага.
- Инкрементальный ETL вместо пересборки — отклонён (#2, wontfix); учебная - Инкрементальный ETL вместо пересборки отклонен (#2, wontfix). Идея отдельной
сторона темы — идея лабы #149. лабы на эту тему — #149.
- Состав витрин `dm_transform` и проверок `dq_check` — - Состав витрин `dm_transform` и проверок `dq_check` —
[дока слоя DM](dm.md). [дока слоя DM](dm.md).