Корень стал про стенд, генератор уехал за свою дверь. Пять целей ушли из
корневого 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),
и это объяснение не про имя файла, а про принятое решение.
- Зачем:
- корневые цели смешивали два уровня: пять из шестнадцати начинались с 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>
- Зачем:
- половина критерия приёмки стояла не там, где решено: предупреждение о ручном равенстве версий 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>
- Зачем:
- 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 main2026-08-09 22:14:51 +03:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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),
и это объяснение не про имя файла, а про принятое решение.