# Гейт коммита: всё, что в этом репозитории проверяется машиной. # # Документы — то, что читает не человек, а машина, и чья поломка **не видна при # чтении**: фронтматтер (его разбирает загрузчик скиллов), помеченная копия # правила (расходится молча) и диаграмма mermaid (текст правдоподобен, рендер # падает). Скрипты — ruff и pyrefly: они же стерегут ноль внешних зависимостей, # без которого tasks.py и docs.py перестают работать в чужом проекте. # Всё остальное (проза, устройство, язык) — предмет ревью, а не хука. # # Скрипты читают **рабочее дерево целиком**, а не индекс: частичный коммит при # грязном дереве судится по тому, что на диске. Это осознанно — они и написаны # как обход репозитория, а не как фильтр по файлам. # # Ставится `lefthook install` (см. README, «Гейт коммита»). Обойти разово — # `LEFTHOOK=0 git commit …`; обход законен ровно для того случая, когда чинить # найденное нечем прямо сейчас. pre-commit: parallel: true jobs: - name: фронтматтеры glob: "*.md" run: python3 scripts/frontmatter.py - name: копии правил glob: "*.md" run: python3 scripts/copies.py # Секунды, а не миллисекунды: рендер идёт настоящим mermaid-cli. Поэтому # glob — правка одних только скриптов проходит гейт мгновенно. Нет ни # `mmdc`, ни `npx` — код 3, коммит отказан: «не проверено» здесь не то же # самое, что «проверено и сошлось». - name: диаграммы glob: "*.md" run: python3 scripts/diagrams.py # Скрипты — под своим glob и через uv: версии линтеров прибиты точно, и # `uv run` берёт именно их, а не то, что оказалось в PATH. Обе проверки # укладываются в доли секунды на весь репозиторий, поэтому проверяется он # целиком, а не изменённые файлы: находка в чужом файле здесь означает, что # правка сломала соседа. - name: ruff glob: "*.py" run: uv run ruff check . - name: pyrefly glob: "*.py" run: uv run pyrefly check