Files
dev-skills/pyproject.toml
T
avandClaude Opus 5 84134cac1e ревью: ступень wide, цвета по модели, проверка фронтматтеров
Прыжок 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>
2026-08-04 16:49:02 +03:00

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"