Диаграмма и проза вокруг неё описывают один факт — это второй дом, и разойтись они могут молча: то самое, против чего написан copies.py. Механической сверки здесь нет, дословного соответствия между текстом и графом не существует, поэтому работает объявление. В review-pipeline старший граф — он и есть алгоритм планировщика, проза объясняет рёбра; в остальных местах старшая проза, диаграмма там сводка; в calibration.md старшая таблица вердиктов, схема добавляет к ней только счётчик. Объявление стоит у каждой диаграммы строкой в месте, а не общим правилом в README: скилл читают целиком, README — нет. В task-batch добавлена оговорка про соседний скилл — два вызова с разным старшинством рядом это место, где легко ошибиться. scripts/diagrams.py вынимает все mermaid-блоки и рендерит каждый через mmdc или npx @mermaid-js/mermaid-cli. Коды выхода — общий словарь; нет рендерера — код 3, а не молчаливый успех. Chromium с --no-sandbox: без флага падает на «No usable sandbox», причина в докстроке. Проверены обе ветки: 11 диаграмм в 9 файлах зелено, сломанный блок даёт точное место с текстом ошибки парсера и код 1. README: раздел «Проверка диаграмм» рядом с проверкой копий — что ловит, чего не ловит и почему не в гейте. DECISIONS 63 и 64. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
68 lines
3.5 KiB
TOML
68 lines
3.5 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
|
|
# backlog.py заморожен: плагин помечен УСТАРЕЛ и живёт до перевода последнего
|
|
# проекта, после чего удаляется целиком. Правки в него — риск без выгоды.
|
|
exclude = ["av-dev-backlog"]
|
|
|
|
[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",
|
|
]
|
|
python-version = "3.12"
|