Files
dev-skills/pyproject.toml
T
av ee53ef8af8 resync.py поднят в scripts/: пересборка копий из домов
copies.py находит расхождение, а чинить его руками — та же работа, из-за
которой копии и расходятся: правка дома касается стольких файлов, сколько
у него копий, и последний забывают. Проверка была, починки не было.

Разметку разбирает не свой код: copies.py импортируется целиком, иначе
второй разборщик той же разметки разошёлся бы с первым молча.

В гейт не ставится намеренно. Автоматическая пересборка протащила бы
правку дома во все копии мимо глаз автора, а копия, уезжающая в
репозиторий проекта, тянет ещё и запись в журнал версий канона — этого
машина не напишет.

Проверено на обеих формах копии: обычной и лежащей внутри объемлющей
ограды. Ограда и пустые строки по краям принадлежат месту, а не дому, и
пересборка возвращает их такими, какими были — round-trip побайтно
чистый на всех 24 копиях.
2026-08-09 15:49:45 +03:00

73 lines
3.8 KiB
TOML

[project]
name = "dev-skills"
version = "0"
description = "Маркетплейс плагинов av-dev; здесь только линтеры скриптов скиллов"
requires-python = ">=3.12"
dependencies = []
# Версии прибиты точно: обновление линтера меняет набор находок, а находки тут
# правятся руками в скриптах, которые уезжают в чужие проекты. Обновление —
# отдельная осознанная правка, а не побочный эффект `uv sync`.
[dependency-groups]
dev = ["ruff==0.16.1", "pyrefly==1.2.0"]
[tool.uv]
package = false
[tool.ruff]
target-version = "py312"
line-length = 88
[tool.ruff.lint]
select = [
"F", # pyflakes: неиспользованное, неопределённое, битые f-строки
"E", "W",# pycodestyle
"I", # порядок импортов
"UP", # устаревшие для 3.12 конструкции
"B", # bugbear: изменяемый дефолт, забытый raise, цикл с замыканием
"SIM", # упрощения
"RET", # возвраты
"PTH", # os.path → pathlib
"RUF", # правила самого ruff
"TID", # запрет внешних зависимостей, см. banned-api ниже
"BLE", # голый except Exception — только там, где помечен noqa
]
ignore = [
"E501", # длину строк держит formatter, а не проверка
# Весь текст скриптов — русский: сообщения, докстроки, комментарии.
# «Похожая на латиницу кириллица» здесь не опечатка, а норма, и три этих
# правила дают 311 срабатываний из 338 на пустом месте.
"RUF001", "RUF002", "RUF003",
]
[tool.ruff.lint.flake8-tidy-imports.banned-api]
# Скрипты обязаны работать на голом python 3.12 без установки чего-либо:
# они лежат рядом со скиллами и запускаются в любом проекте. Список — не
# полный перечень мира, а частые соблазны; настоящий страж — pyrefly, у
# которого в окружении нет ничего, кроме линтеров.
"requests".msg = "внешняя зависимость; скрипты работают на голом python 3.12"
"yaml".msg = "внешняя зависимость; для json есть stdlib, для yaml — разбор руками"
"pydantic".msg = "внешняя зависимость; скрипты работают на голом python 3.12"
"click".msg = "внешняя зависимость; аргументы разбирает argparse"
"rich".msg = "внешняя зависимость; вывод — обычный print"
[tool.ruff.format]
quote-style = "double"
[tool.pyrefly]
project-includes = [
"av-dev-tasks/skills/tasks/scripts/tasks.py",
"av-dev-docs/skills/canon/scripts/docs.py",
"av-dev-code/skills/openspec/scripts/openspec.py",
"scripts/addresses.py",
"scripts/copies.py",
"scripts/diagrams.py",
"scripts/frontmatter.py",
"scripts/resync.py",
]
python-version = "3.12"
# resync.py импортирует разборщик разметки из copies.py: второй разборщик той же
# разметки разошёлся бы с первым молча. Оба лежат в scripts/ и в чужой проект не
# уезжают, поэтому импорт между ними законен — но искать его надо здесь.
search-path = ["scripts"]