Прыжок standard → deep стоил самого дорогого прохода конвейера, а платить приходилось за одну архитектурную находку: изменений, которые трогают публичный контракт, но не вводят нового правила слияния, — большинство. Ступень wide это standard плюс architecture (вход шире диффа, отсюда имя), семь проходов против восьми. Заодно вычистилась давняя неровность: триггер reimpl стоял внутри deep, и профиль означал то семь проходов, то восемь — реестр состава, который «сверяется взглядом до коммита», проверять было нечем. Теперь условие «новое правило идентичности, слияния или разбора» выбирает профиль, reimpl в deep безусловен и есть единственное отличие от wide. Барьер стоимости остался только в deep: в wide за ним стоял бы один дешёвый проход с потолком в 3 находки, а барьер сериализует то, что могло идти разом. Цвет charter'а теперь кодирует модель, а не роль: sonnet → green, opus → yellow, fable → red. Роль видна из имени, стоимость прогона — ниоткуда, а список агентов читается взглядом. scripts/frontmatter.py ловит три класса ошибок, невидимых при чтении: - двоеточие с пробелом в незакавыченном описании — для YAML это вложенное отображение, а не текст. Так было написано три описания из четырнадцати, и читались они правильно; - name, разошедшееся с именем каталога скилла или файла charter'а; - цвет, не отвечающий модели: он ставится один раз при заведении charter'а, а модель потом двигает калибровка. Обе ветки проверены, коды выхода — общий словарь. Триггеры профиля в canon.md и skeletons.md подтянуты под wide. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
69 lines
3.6 KiB
TOML
69 lines
3.6 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",
|
|
"scripts/frontmatter.py",
|
|
]
|
|
python-version = "3.12"
|