Files
brain/lefthook.yml
T
Дмитрий c7f4160358 chore: lefthook brain-split + snapshot-stamp 3977770
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 09:12:49 +03:00

138 lines
7.1 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================================
# lefthook.yml — claude-brain (управляющий слой)
# =============================================================================
# Документация: https://lefthook.dev
# Установка хуков: npx lefthook install
# Ручной pre-commit: npx lefthook run pre-commit
# Пропуск (один раз): LEFTHOOK=0 git commit -m "..."
#
# Расщеплено из lefthook.yml Лидерры 2026-06-15 (ADR-020, дизайн v5 corzina C):
# убраны Лидерра-CODE-джобы (stylelint/pint/larastan/squawk/eslint-vue/deptrac —
# проверяли app/db/web, которых тут нет). Оставлены контролёры управляющего слоя
# (node tools/*.mjs + adr-judge) и общие гигиенические (gitleaks/markdownlint/
# cspell/lychee).
#
# ВНИМАНИЕ перед `npx lefthook install`: контролёры tools/*.mjs + adr-judge
# работают сразу (Node + python + файлы в репозитории). Общие джобы требуют
# инструментов, которых в claude-brain пока НЕТ — поставить ИЛИ временно
# закомментировать соответствующие джобы:
# gitleaks / gitleaks-full-history → bin/gitleaks.exe + .gitleaks.toml
# markdownlint → node_modules/markdownlint-cli2
# cspell → node_modules/cspell
# lychee-links → bin/lychee.exe + .lychee.toml
# =============================================================================
min_version: 2.0.0
# Pre-commit: проверки на staged-файлах перед каждым git commit
pre-commit:
parallel: false
jobs:
# 1. gitleaks — поиск ПДн / токенов / API-ключей в staged. Блокирует при находке.
- name: gitleaks
run: ./bin/gitleaks.exe protect --staged --config .gitleaks.toml --no-banner
fail_text: |
gitleaks нашёл потенциальные ПДн / токены / API-ключи в diff.
Если это маска / тестовое значение — добавь в allowlist .gitleaks.toml.
# 2. markdownlint — стиль Markdown с авто-fix.
- name: markdownlint
glob: "*.md"
run: node node_modules/markdownlint-cli2/markdownlint-cli2-bin.mjs --fix {staged_files}
fail_text: |
markdownlint нашёл проблемы, которые не исправляются автоматически.
Запусти `npm run lint:md:fix` или поправь руками.
# 3. cspell — орфография на staged .md.
- name: cspell
glob: "*.md"
run: node node_modules/cspell/bin.mjs --no-progress --no-summary --no-gitignore {staged_files}
fail_text: |
cspell нашёл слова, отсутствующие в словаре.
Если это валидное слово проекта — добавь в cspell-words.txt.
# 4. adr-judge — декларативная проверка ADR Enforcement-блоков (Прил. Н #36).
# Вендорен из adr-kit v0.13.1 → tools/adr-judge.py. Без --llm: только regex, $0.
# -X utf8 обязателен (stdin Python на Windows = cp1251, диф с кириллицей иначе крашит).
- name: adr-judge
run: git diff --cached --unified=0 | python -X utf8 tools/adr-judge.py --diff - --adr-dir docs/adr/
fail_text: |
adr-judge: staged-изменение нарушает задокументированное решение (ADR).
Смотри file:line выше и docs/adr/ADR-*.md.
# 5. l1-watcher — детектор settings.json ↔ Tooling Прил. Н drift (brain governance C1).
- name: l1-watcher
glob: "{.claude/settings.json,docs/Tooling_v8_3.md}"
run: node tools/l1-watcher.mjs
fail_text: |
l1-watcher detected settings.json ↔ Tooling Прил. Н drift.
# 6. cross-ref-checker — version drift между нормативными файлами (brain governance C2).
- name: cross-ref-checker
glob: "{docs/Pravila_raboty_Claude_v1_1.md,docs/Tooling_v8_3.md,docs/Plugin_stack_rules_v1.md,CLAUDE.md,MEMORY.md}"
run: node tools/cross-ref-checker.mjs
fail_text: |
cross-ref-checker detected version drift in §0 cross-refs.
# 7. observer-of-observer — счётчик чтений docs/observer/ + self-prune (C3, warn-only).
- name: observer-of-observer
run: node tools/observer-of-observer.mjs check
fail_text: |
observer-of-observer reports stale state.
# 8. observer-coverage-checker — brain governance C5 (warn-only).
- name: observer-coverage-checker
run: node tools/observer-coverage-checker.mjs
fail_text: |
observer-coverage-checker reports a gap (coverage or registration).
# 9. observer-chain-map-checker — brain governance C6 (chain attribution).
- name: observer-chain-map-checker
run: node tools/observer-chain-map-checker.mjs
fail_text: |
observer-chain-map-checker: дрейф chain-map <-> routing-off-phase.md.
# 10. registry-render-check — drift nodes.yaml <-> auto-region маркеры (warn-only).
- name: registry-render-check
glob: "{docs/registry/nodes.yaml,docs/Tooling_v8_3.md,docs/routing-off-phase.md}"
run: node tools/registry-render.mjs --check || echo "[registry] WARN rendered diverged from auto-region; run node tools/registry-render.mjs and recommit"
fail_text: |
registry-render-check: rendered output расходится с auto-region маркером.
# Post-commit: regenerate STATUS.md dashboard (informational, not gate)
post-commit:
parallel: false
jobs:
# 11. status-md generator — brain governance C4. Rebuilds docs/observer/STATUS.md.
- name: status-md
run: node tools/status-md-generator.mjs && git add docs/observer/STATUS.md || true
fail_text: |
status-md regeneration failed.
# 12. graphify safe auto-update — ADR-017. Skip silent если graphify-out/ нет. Non-blocking.
- name: graphify-safe-update
run: node tools/graphify-safe-update.mjs
fail_text: |
graphify-safe-update failed (non-blocking — run /graphify --update manually).
# Pre-push: проверки перед git push (медленнее, реже)
pre-push:
parallel: false
jobs:
# 13. Полный gitleaks-скан всей истории.
- name: gitleaks-full-history
run: ./bin/gitleaks.exe detect --source . --no-banner --config .gitleaks.toml --redact
fail_text: |
gitleaks нашёл утечки в истории коммитов.
# 14. lychee — проверка ссылок в .md.
- name: lychee-links
run: ./bin/lychee.exe --config .lychee.toml "docs/**/*.md" "*.md"
fail_text: |
lychee нашёл битые ссылки в .md.
# Подавить служебный вывод
skip_output:
- meta
- skips