Плагин был помечен устаревшим решением Q и жил до перевода jellybit. Удалён раньше этого срока: условие пережило свою причину. Заморозка выглядела бесплатной, а платила собой в каждой проверке репозитория — exclude в pyproject.toml, SKIP_DIRS в copies.py, два абзаца README, оговорка в описании маркетплейса, чтобы не ловить триггер «добавь задачу в беклог». Пять исключений ради 706 строк, которые никто не читает, и каждое надо объяснять всякий раз, когда спрашивают, почему проверка обходит каталог. Причина условия отпала раньше названного срока. docs/backlog/ читает не backlog.py, а av-dev-pm:tasks — adopt.md и адаптер в tasks.py держат ту же раскладку как вход миграции. Плагин перестал быть единственным, кто её знает, ещё когда писался adopt, и «живёт до перевода последнего проекта» с тех пор охраняло пустоту. Перевод jellybit на канон это не задевает. Порядок вышел обратный ожидаемому: плагин удалён из маркетплейса, а с jellybit снят после. Ожидалась ручная чистка enabledPlugins и installed_plugins.json, но claude plugin uninstall отработал штатно — он идёт по реестру, а не по манифесту маркетплейса. Раздел «Снятие» в README переписан с частного случая на общую процедуру, предупреждение заменено проверенным фактом. Записи Q и HH получили парные статусы, тема 30 в DECISIONS несёт причины и три следствия, пункт 5 TODO отмечен, открытый вопрос из REMAINING убран. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
66 lines
3.3 KiB
TOML
66 lines
3.3 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-pm/skills/tasks/scripts/tasks.py",
|
|
"av-dev-pm/skills/canon/scripts/docs.py",
|
|
"scripts/copies.py",
|
|
"scripts/diagrams.py",
|
|
"scripts/frontmatter.py",
|
|
]
|
|
python-version = "3.12"
|