c7f4160358
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
138 lines
7.1 KiB
YAML
138 lines
7.1 KiB
YAML
# =============================================================================
|
||
# 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
|