Files
portal/lefthook.yml
T
Дмитрий 952373fce5 phase2(trigger): Vue 3 + Vuetify 3 + ESLint+Prettier+Vue + vue-tsc + Vitest
Триггер фазы 2 выполнен — первый коммит в app/resources/js/. Активирует
5 из 6 инструментов фазы 2 (CLAUDE.md §3.3) — без Histoire (отдельно).

Tailwind удалён (правило CLAUDE.md §5 п.2).

Стек:
  - vue@3.5, vuetify@3.12, @vitejs/plugin-vue@6 (для Vite 8 совместимости —
    @vitejs/plugin-vue@5 поддерживает только Vite 5/6), vite-plugin-vuetify@2
    (auto-import), sass-embedded
  - eslint@10 (flat-config), eslint-plugin-vue@10,
    @vue/eslint-config-typescript@14, eslint-config-prettier, prettier@3.8
  - typescript@6, vue-tsc@3.2
  - vitest@4.1, @vue/test-utils, jsdom, @vitest/coverage-v8

Конфиги:
  - app/vite.config.js — vue + vuetify auto-import
  - app/vitest.config.ts — jsdom + setup file для ResizeObserver/
    IntersectionObserver/matchMedia/CSS.supports stubs (без них Vuetify
    падает в JSDOM)
  - app/eslint.config.js — flat-config
  - app/.prettierrc.json, app/tsconfig.json

Frontend-структура:
  - resources/js/app.ts — точка входа
  - resources/js/plugins/vuetify.ts — палитра Forest (Teal/ivory/теало-нуар
    из BRANDBOOK_v2 §3)
  - resources/js/components/AppShell.vue — первый компонент: v-app +
    v-app-bar + v-card
  - resources/css/app.css — Inter (UI, opsz axis), JetBrains Mono
    (.numeric, tnum)
  - resources/views/welcome.blade.php — упрощён под Vue mount

Smoke-тесты Vitest 3/3 за 2.8 сек:
  - монтируется без ошибок
  - содержит «Лидерра.»
  - рендерит chip с фазой 2

Build: 158 модулей за 386 ms (184 KB JS / 295 KB CSS gzipped).

npm-scripts: lint:vue, format, format:check, type-check, test:vue.
lefthook job #8 (ESLint на staged .ts/.vue) добавлен в pre-commit.
Полный type-check (vue-tsc) и Vitest — отдельно вручную (медленно для
pre-commit: ~3 сек на каждый).

CLAUDE.md v1.16 → v1.17 (фаза 1 → фаза 2 в §6).
Реестр Открытые_вопросы v1.25 → v1.26.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 16:07:14 +03:00

132 lines
7.2 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 — Лидерра (фаза 0)
# =============================================================================
# Документация: https://lefthook.dev
# Установка хуков: npx lefthook install
# Удаление хуков: npx lefthook uninstall
# Ручной pre-commit: npx lefthook run pre-commit
# Пропуск (один раз): LEFTHOOK=0 git commit -m "..."
#
# Принципы (Прил. Н §1):
# - Pre-commit для быстрых проверок: gitleaks, markdownlint, cspell, Stylelint
# - Pre-push для медленных: полный gitleaks по истории + lychee
# - Pa11y — только в CI (требует Chromium)
# =============================================================================
min_version: 2.0.0
# Pre-commit: проверки на staged-файлах перед каждым git commit
pre-commit:
parallel: false
jobs:
# 1. gitleaks — поиск ПДн / токенов / API-ключей в staged
# Правило §5.2 правил Claude. Блокирует коммит при находке.
- name: gitleaks
run: ./bin/gitleaks.exe protect --staged --config .gitleaks.toml --no-banner
fail_text: |
gitleaks нашёл потенциальные ПДн / токены / API-ключи в diff.
Если это маска / тестовое значение — добавь в allowlist .gitleaks.toml.
Если реальные данные — удали и используй маски (+7XXXXXXXXXX, ***@***).
# 2. markdownlint — стиль Markdown с авто-fix
- name: markdownlint
glob: "*.md"
run: npx markdownlint-cli2 --fix {staged_files}
stage_fixed: true
fail_text: |
markdownlint нашёл проблемы, которые не исправляются автоматически.
Запусти `npm run lint:md:fix` или поправь руками.
# 3. cspell — орфография на staged .md
- name: cspell
glob: "*.md"
run: npx cspell --no-progress --no-summary {staged_files}
fail_text: |
cspell нашёл слова, отсутствующие в словаре.
Если это валидное слово проекта — добавь в cspell-words.txt.
Если опечатка — поправь.
# 4. Stylelint — стиль CSS в HTML-прототипах
- name: stylelint
glob: "*.html"
run: npx stylelint {staged_files}
fail_text: |
Stylelint нашёл проблемы в CSS прототипа.
Запусти `npx stylelint --fix <file>` где возможно.
# 5. Pint — code style PHP (фаза 1, Прил. Н #11). Авто-fix на staged .php в app/.
- name: pint
glob: "app/**/*.php"
root: "app/"
run: php vendor/bin/pint {staged_files}
stage_fixed: true
fail_text: |
Pint не смог отформатировать какие-то файлы (синтаксическая ошибка PHP?).
Запусти `cd app && composer pint` локально, посмотри вывод.
# 6. Larastan — статанализ PHP (фаза 1, Прил. Н #12). Полный анализ при любой правке
# *.php в app/ (точечный анализ только staged-файлов невозможен — phpstan нужен граф
# классов). Скорость: ~5-10 с на default scaffold + baseline 3.
- name: larastan
glob: "app/**/*.php"
root: "app/"
run: php vendor/bin/phpstan analyse --no-progress --memory-limit=512M
fail_text: |
Larastan нашёл новые ошибки выше baseline.
Запусти `cd app && composer stan` локально и поправь.
Если ошибка ложная — обнови `app/phpstan-baseline.neon`
(см. feedback_environment.md п.25 — генерация baseline в 2 шага).
# 7. squawk — линтер миграций PostgreSQL (фаза 1, Прил. Н #15). Срабатывает только
# на staged *.sql (db/schema.sql и будущие raw-SQL-миграции). Конфиг .squawk.toml
# в корне отключает bootstrap-неприменимые правила и дизайнные предпочтения проекта.
- name: squawk
glob: "*.sql"
run: ./bin/squawk.exe {staged_files}
fail_text: |
squawk нашёл проблемы в SQL.
Конфиг — .squawk.toml в корне проекта.
Если правило неприменимо к bootstrap — добавь в excluded_rules в .squawk.toml.
Если это будущая миграция Laravel в app/database/migrations/ —
создай локальный .squawk.toml рядом с более строгими правилами.
pgFormatter (Прил. Н #16) — отдельно через `npm run format:sql:check`,
НЕ в pre-commit (стиль schema.sql ручной, авто-fix не применяется).
# 8. ESLint+Prettier+Vue — frontend стиль (фаза 2, Прил. Н #22). Lint-only
# на staged .ts/.vue в app/resources/js/. Полный type-check (vue-tsc) и Vitest —
# отдельно (медленно для pre-commit: ~3 сек на vue-tsc, ~3 сек на vitest).
# Запускать вручную: `cd app && npm run type-check && npm run test:vue`.
- name: eslint-vue
glob: "app/resources/js/**/*.{ts,vue}"
root: "app/"
run: npx eslint {staged_files}
fail_text: |
ESLint нашёл проблемы в Vue/TS-файлах.
Запусти `cd app && npm run lint:vue` локально и поправь.
Авто-форматирование: `cd app && npm run format`.
# Pre-push: проверки перед git push (медленнее, но реже запускаются)
pre-push:
parallel: false
jobs:
# 5. Полный gitleaks-скан всей истории (не только staged)
- name: gitleaks-full-history
run: ./bin/gitleaks.exe detect --source . --no-banner --config .gitleaks.toml --redact
fail_text: |
gitleaks нашёл утечки в истории коммитов.
Перед push разберись с каждой находкой.
# 6. lychee — проверка ссылок в narrative-доках (.md). HTML-концепты в web/v8/
# и liderra_v8_handoff/concepts/ намеренно НЕ проверяются — там root-relative
# ссылки на будущие маршруты Vue+Vuetify (/login, /register, /legal/*).
- name: lychee-links
run: ./bin/lychee.exe --config .lychee.toml "docs/**/*.md" "db/**/*.md" "*.md"
fail_text: |
lychee нашёл битые ссылки в .md.
Запусти `npm run links` локально, поправь URL или добавь в `.lychee.toml` exclude.
# Подавить служебный вывод
skip_output:
- meta
- skips