refactor(make): корень — про стенд, генератор — за своей дверью #77

Merged
ddmitry merged 3 commits from refactor/65-make-two-doors into main 2026-08-09 22:14:51 +03:00
Owner

Closes #65

Корень стал про стенд, генератор уехал за свою дверь. Пять целей ушли из
корневого Makefile в новый generator/Makefile, пришла одна — корневой
lint по коду стенда; целей в корне двенадцать вместо шестнадцати.

Решение сверх тикета: target-version

В корневом ruff.toml записан target-version = "py313" — этого в тикете не
было, и вот почему пришлось решать. Правила UP предлагают синтаксис ровно
настолько новый, насколько позволяет target-version, а ruff выводит его из
requires-python ближнего pyproject.toml. У генератора это 3.14; в корне
пакета нет, значит умолчание py310 — и обещание решения «список правил тот
же, что у генератора» тихо означало бы другую строгость.

Взята версия дагов: их читают и правят, и идиомы им нужны те, на которых они
работают — apache/airflow:3.3.0 несёт Python 3.13.14. Настройка Superset
живёт на 3.10.20, но модернизировать в ней нечего; предложит ruff что-то не по
её возрасту — заведём исключение тогда, с настоящим поводом.

Первый заход стоял на py310, по младшему из образов. Переиграно после
горячего перечитывания: на учебном стенде линтер учил бы менти идиоме старее
той, на которой его даги работают, а защита от Superset была верна не по
устройству, а по сегодняшнему содержимому одного файла.

Отсюда находок ruff в дагах ровно четыре, как и обещал тикет: два файла под
переформат и два UP017.

Тексты ошибок в тестах свежести не тронуты

«пересоберите: make docs» и «пересоберите: make inventory» теперь точнее,
чем были: сообщение видит тот, кто только что запустил pytest в generator/,
и названная команда работает у него вербатим. Правка сделала бы текст длиннее
без выигрыша.

Названо и оставлено как есть

Две находки ty в dags/test_kafka.py: адрес записи едет через XCom словарём
dict[str, str | int], а TopicPartition ждёт int. На исполнении безвредно —
JSON возвращает целые. Постоянного сторожа они не получают: корневого
typecheck нет по доводу, записанному в карте проверок.

Проверка

  • make lint и make config-test в корне — зелёные.
  • make lint, make typecheck, make test из generator/ — зелёные, 407 тестов.
  • ruff check --show-files из корня перечисляет ровно три файла стенда, из
    generator/ — только файлы генератора.
  • Цена корневого lint замерена: 0,39 / 0,36 / 0,39 с, в таблицу пошло 0,4 с.

Стенд не поднимался: правка целей make, документов и двух файлов дагов по
форматированию. Цели на стенде не менялись.

Холодное ревью

Одна линия, craftsman свежей сессией, обе оси в одной линзе с перевесом в
уместность. Два захода: семь находок, затем перепроверка правок и пять
замечаний по новому тексту. Вердикт обоих — APPROVED_WITH_FINDINGS.

Принято: предупреждение о ручном равенстве версий ruff перенесено в карту
проверок — решение прямо назначило ей это место, а лежало оно в корневом
Makefile, то есть там, где его не увидит тот, кто правит лок в generator/.
Названа цена занижения target-version (даги бегут на 3.13 и модернизаций не
получают). Убран троекратный повтор довода «генератор — отдельная сущность» —
шапка generator/Makefile вырезана целиком. Добавлено правило про охват:
Python вне двух названных путей не проверит ни одна дверь. Три примечания к
таблице собраны списком; мелочи формулировок поправлены.

Отклонено одно: ревьюер дважды предлагал дорезать в ruff.toml объяснение,
почему конфиг лежит отдельным файлом, а не в pyproject.toml. Оставлены две
строки: вопрос про корневое окружение открыт (см. «Отклонено» в решении #65),
и это объяснение не про имя файла, а про принятое решение.

Closes #65 Корень стал про стенд, генератор уехал за свою дверь. Пять целей ушли из корневого `Makefile` в новый `generator/Makefile`, пришла одна — корневой `lint` по коду стенда; целей в корне двенадцать вместо шестнадцати. ## Решение сверх тикета: `target-version` В корневом `ruff.toml` записан `target-version = "py313"` — этого в тикете не было, и вот почему пришлось решать. Правила `UP` предлагают синтаксис ровно настолько новый, насколько позволяет `target-version`, а ruff выводит его из `requires-python` ближнего `pyproject.toml`. У генератора это 3.14; в корне пакета нет, значит умолчание `py310` — и обещание решения «список правил тот же, что у генератора» тихо означало бы другую строгость. Взята версия дагов: их читают и правят, и идиомы им нужны те, на которых они работают — `apache/airflow:3.3.0` несёт Python 3.13.14. Настройка Superset живёт на 3.10.20, но модернизировать в ней нечего; предложит ruff что-то не по её возрасту — заведём исключение тогда, с настоящим поводом. Первый заход стоял на `py310`, по младшему из образов. Переиграно после горячего перечитывания: на учебном стенде линтер учил бы менти идиоме старее той, на которой его даги работают, а защита от Superset была верна не по устройству, а по сегодняшнему содержимому одного файла. Отсюда находок ruff в дагах ровно четыре, как и обещал тикет: два файла под переформат и два `UP017`. ## Тексты ошибок в тестах свежести не тронуты `«пересоберите: make docs»` и `«пересоберите: make inventory»` теперь точнее, чем были: сообщение видит тот, кто только что запустил pytest в `generator/`, и названная команда работает у него вербатим. Правка сделала бы текст длиннее без выигрыша. ## Названо и оставлено как есть Две находки `ty` в `dags/test_kafka.py`: адрес записи едет через XCom словарём `dict[str, str | int]`, а `TopicPartition` ждёт `int`. На исполнении безвредно — JSON возвращает целые. Постоянного сторожа они не получают: корневого `typecheck` нет по доводу, записанному в карте проверок. ## Проверка - `make lint` и `make config-test` в корне — зелёные. - `make lint`, `make typecheck`, `make test` из `generator/` — зелёные, 407 тестов. - `ruff check --show-files` из корня перечисляет ровно три файла стенда, из `generator/` — только файлы генератора. - Цена корневого `lint` замерена: 0,39 / 0,36 / 0,39 с, в таблицу пошло 0,4 с. Стенд не поднимался: правка целей `make`, документов и двух файлов дагов по форматированию. Цели на стенде не менялись. ## Холодное ревью Одна линия, `craftsman` свежей сессией, обе оси в одной линзе с перевесом в уместность. Два захода: семь находок, затем перепроверка правок и пять замечаний по новому тексту. Вердикт обоих — `APPROVED_WITH_FINDINGS`. Принято: предупреждение о ручном равенстве версий ruff перенесено в карту проверок — решение прямо назначило ей это место, а лежало оно в корневом `Makefile`, то есть там, где его не увидит тот, кто правит лок в `generator/`. Названа цена занижения `target-version` (даги бегут на 3.13 и модернизаций не получают). Убран троекратный повтор довода «генератор — отдельная сущность» — шапка `generator/Makefile` вырезана целиком. Добавлено правило про охват: Python вне двух названных путей не проверит ни одна дверь. Три примечания к таблице собраны списком; мелочи формулировок поправлены. Отклонено одно: ревьюер дважды предлагал дорезать в `ruff.toml` объяснение, почему конфиг лежит отдельным файлом, а не в `pyproject.toml`. Оставлены две строки: вопрос про корневое окружение открыт (см. «Отклонено» в решении #65), и это объяснение не про имя файла, а про принятое решение.
ddmitry added 1 commit 2026-08-09 21:31:43 +03:00
- Зачем:
  - корневые цели смешивали два уровня: пять из шестнадцати начинались с cd generator.
  - цель, названная общерепозиторной, охватывала 31 файл Python из 34: даги и Superset не видел ни линт, ни типы.
- Что:
  - lint, typecheck, test, docs и inventory переехали в новый generator/Makefile.
  - корневой lint заведён по коду стенда — dags и infra/superset — с явными путями и закреплённой версией ruff.
  - заведён корневой ruff.toml: тот же список правил, target-version по младшему Python в образах стенда.
  - цели корня сгруппированы по использованию, осталось двенадцать.
  - два файла дагов переформатированы под новую проверку.
  - карта проверок, оба README, спека генератора и AGENTS.md приведены к двум дверям.
- Проверка:
  - make lint; make config-test — зелёные.
  - make -C generator lint; typecheck; test — зелёные, 407 тестов.
  - ruff check --show-files: из корня ровно три файла стенда, из generator/ — только его.
  - цена корневого lint замерена (0,4 с) и вписана в карту проверок.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ddmitry added 1 commit 2026-08-09 21:50:01 +03:00
- Зачем:
  - половина критерия приёмки стояла не там, где решено: предупреждение о ручном равенстве версий ruff адресовано тому, кто правит лок в generator/, а лежало в корневом Makefile.
  - довод «генератор — отдельная сущность» был выписан трижды почти дословно.
- Что:
  - равенство версий и охват корневой цели названы в карте проверок; три примечания к таблице собраны списком.
  - названа цена занижения target-version: даги бегут на 3.13 и модернизаций не получают.
  - шапка generator/Makefile вырезана, корневая сжата до строки, объяснение в ruff.toml укорочено.
  - формулировки в AGENTS.md и README поправлены.
- Проверка:
  - make lint; make config-test — зелёные.
  - make -C generator lint; typecheck — зелёные; исходники генератора не менялись.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ddmitry added 1 commit 2026-08-09 21:58:57 +03:00
- Зачем:
  - target-version по младшему образу (Superset, 3.10) занижал проверку для дагов: они бегут на 3.13, а ruff предлагал им идиомы старее их рантайма. На учебном стенде это вывернуто наизнанку — менти читает и правит именно даги.
  - защита от Superset была верна не по устройству, а по сегодняшнему содержимому одного файла настройки.
- Что:
  - target-version в корневом ruff.toml поднят до py313, комментарий переписан.
  - две находки UP017 в дагах починены: datetime.timezone.utc заменён на datetime.UTC.
  - из карты проверок убран пункт про разную строгость дверей — с равными версиями он потерял предмет.
- Проверка:
  - make lint; make config-test — зелёные.
  - make -C generator lint — зелёный; исходники генератора не менялись.
  - находок ruff в дагах теперь ровно четыре, как обещал тикет: два переформата и два UP017.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ddmitry merged commit d5c5e14cd5 into main 2026-08-09 22:14:51 +03:00
ddmitry deleted branch refactor/65-make-two-doors 2026-08-09 22:14:52 +03:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ddmitry/clickstream-data-platform#77