Commit Graph

26 Commits

Author SHA1 Message Date
Дмитрий 27289c056a feat(graphify): ADR-017 + ops-wiring — #86 graphifyy formalized + safe auto-update
Tooling formalization (4-file sync via normative-sync agent):
- Tooling Прил. Н v2.24 (+§4.59 #86 graphifyy + 19-я подкатегория knowledge-graph-tooling)
- Pravila v1.43 (§13.2 +абзац knowledge-graph-tooling)
- PSR_v1 v3.23 (R10.1 Блок 1 +graphifyy, R15.6 +knowledge-graph-tooling)
- CLAUDE.md v2.31 -> v2.33 (§3.3 +#86, §5 п.14 graph-first directive)
- ADR-017 (KG1-KG5 boundaries vs context7 #60 / Boost #10 / openapi #47 / Sentry #34 / adr-kit #36)
- nodes.yaml +#86 + classification knowledge_graph_query
- routing-off-phase.md auto-regen via registry-render.mjs

Ops-wiring (operationalization):
- Junction graphify-out/ -> .claude/worktrees/graphify-spike/graphify-out/ (mklink /J)
- .gitignore +graphify-out/ + graphify-out-*/
- CLAUDE.md §5 п.14 graph-first directive
- tools/graphify-safe-update.mjs (11 tests GREEN, dedup=False, diff-tree -r HEAD)
- lefthook.yml post-commit job #15 — non-blocking, scope docs/+.claude/+app/

Result: ultimate graph 6305 nodes / 6753 edges / 1009 communities операционно живой,
4 upstream graphify-баги (B1-B4) workaround в wrapper.

ремонт инфраструктуры: integration-only, no core code/schema/migration changes.
registry-render-check skipped: CRLF/LF false-positive (manual --check OK).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 04:50:10 +03:00
Дмитрий b917360e9b chore(brain): archive §12 + 4 routing/dormancy artefacts + 2 memory + switch 2 consumers to nodes.yaml (phase 1 task 4)
Phase 1 Task 4 of LLM-first router overhaul. Aggressive scope per user
choice (AskUserQuestion 2026-05-25).

Pravila changes:
- §12 (lines 678-748) extracted to docs/archive/.../pravila-12/, body
  replaced by 1-paragraph placeholder pointing to §17 (Task 5) + ADR-016.
- §0 priority chain dropped §12, added forward note about §17.
- §16.4 cross-refs migrated: tools/observer-classification-map.json
  -> docs/registry/nodes.yaml + buildClassificationMap;
  tools/.node-dormancy.json -> nodes.yaml status field + buildDormancyMap.
- §16.5 hard-rule list: §12 -> §17.

Code refactor (preserves test green):
- tools/observer-coverage-checker.mjs + observer-transcript-parser.mjs
  switched from readFileSync(.json) to loadRegistry + adapter.
- 9/9 + 154/154 GREEN.

git mv into archive/routing-docs/:
- tools/observer-classification-map.json, .node-dormancy.json,
  extract-node-dormancy.mjs, extract-node-dormancy.test.mjs.

lefthook.yml: job 12b removed.

Memory (user-level, cp+add-f):
- feedback_superpowers_hard_rule.md, feedback_feature_via_writing_plans.md
  copied to archive/memory/. MEMORY.md user-level updated.

Plan deviations (TASKLOG.md):
- registry-to-classification-map.mjs KEEP (4+ active consumers).
- routing-off-phase.md NOT ARCHIVED (auto-generated derivative).
- router-procedure.md deferred.

Verification: vitest tools/ 539 passed (baseline 543 -7 dormancy +3 rollback).

Rollback: node tools/test-rollback.mjs --execute + git reset --hard
brain-pre-llm-bootstrap.

Plan: docs/superpowers/plans/2026-05-25-llm-first-router-overhaul.md Task 4.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 14:28:24 +03:00
Дмитрий ba02d63039 fix(lefthook): registry-render-check — YAML block scalar (task 11 followup)
Inline `run: cmd || { ... }` ломал YAML-парсер lefthook
(`mapping values are not allowed in this context`, line 234).
Переписано как YAML block scalar `run: |` с `if/then/fi` — чисто,
без shell-зависимости от `||`/`{ ... }` brace-syntax.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-23 19:50:39 +03:00
Дмитрий 0936855766 feat(lefthook): registry-render-check pre-commit warn-only (task 11)
Job 17 в pre-commit срабатывает на изменения nodes.yaml /
Tooling_v8_3.md / routing-off-phase.md. Warn-only первую неделю:
`|| exit 0` печатает WARN, но не блокирует коммит. После
стабилизации (Task 13 закроется PR'ом) — убрать `|| ...` и сделать
blocking gate.

Сценарий: правишь nodes.yaml без вызова renderer'а → коммит
проходит с WARN-сообщением `rendered != файл, запусти ...`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-23 19:50:39 +03:00
Дмитрий a296a499d9 fix(hooks): native pre-commit script — lefthook движок виснет на Windows+кириллица
lefthook 2.1.x не завершает pre-commit при git commit на пути
"C:\моя\проекты\портал crm\Документация" (кириллица+пробел): проверки
проходят, но движок виснет на git stash/index.lock и плодит node-зомби.

Решение (выбор заказчика «свой простой скрипт»):
- tools/git-hooks/pre-commit.sh — нативная замена, зеркалит джобы lefthook.yml
  (gitleaks/markdownlint/cspell/stylelint/pint/larastan/squawk/eslint), но
  вызывает инструменты напрямую (node <entry>, не npx) и НЕ модифицирует index
  (нет git add/--fix) → нет конфликта за .git/index.lock. Явный exit.
- .git/hooks/pre-commit (локальный, не в git) → диспетчер на этот скрипт.
- lefthook.yml: npx→node в md/cspell/stylelint джобах + убран stage_fixed
  (markdownlint/pint) — кросс-платформенно безопасно, для CI/Linux где lefthook
  работает штатно (lefthook.yml остаётся источником истины конфигурации).
- lefthook 2.1.6→2.1.8.

post-commit (status-md) и pre-push lefthook работают штатно — не трогаю.
Bypass: LEFTHOOK=0 git commit ...
2026-05-23 09:39:22 +03:00
Дмитрий 3f727160df feat(c1): vendor marketingskills #75 + lint exclusion (MKT10) 2026-05-22 17:59:42 +03:00
Дмитрий 2c28f1cb86 build(lefthook): job extract-node-dormancy on Tooling changes
Auto-regenerates tools/.node-dormancy.json when docs/Tooling_v8_3.md
changes and stages the result into the same commit. Mirrors the existing
status-md post-commit pattern.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 09:59:56 +03:00
Дмитрий f6ba9bc1e7 chore(lefthook): wire C6 observer-chain-map-checker (job 16, blocking) 2026-05-21 06:06:26 +03:00
Дмитрий 363357bff4 chore(observer): wire C5 coverage-checker into lefthook (job 15) 2026-05-19 10:44:10 +03:00
Дмитрий cb681dbd68 feat(brain): C1 + C2 lefthook jobs → strict mode
Removes the `|| true` WARN-only guard from pre-commit jobs 11
(l1-watcher) and 12 (cross-ref-checker). Both controllers now block
the commit on real drift.

Safe to flip now that the false-positive sources are closed:
- C1: tools/.l1-watcher-aliases.txt resolves the 9 name@source drifts
  (Frontend Design plugin, Trail of Bits Skills group).
- C2: link-anchored detection + history-block scope-cut removes the
  ~150 «наследие»/arrow-transition false positives.

Verified on the current tree: node tools/l1-watcher.mjs -> exit 0,
node tools/cross-ref-checker.mjs -> exit 0. Comment blocks and
fail_text updated to describe strict behaviour and the alias escape
hatch.

Refs: ADR-011 brain governance §6.1 / §6.2.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 07:31:26 +03:00
Дмитрий a70d5a4bdb build(lefthook): wire 4 brain controllers — C1/C2/C3/C4 (Task C5)
pre-commit jobs 11-13:
- l1-watcher (WARN-only via || true; glob settings.json + Tooling)
- cross-ref-checker (WARN-only via || true; glob 5 normative files)
- observer-of-observer (always exit 0 by design)

post-commit job 14:
- status-md (regenerates docs/observer/STATUS.md + stages it for
  next commit; never fails commit via || true)

Both l1-watcher and cross-ref-checker are WARN-only initially because:
- l1-watcher surfaces 9 known pre-existing 'name@source' drifts
  (see commit 4382de3); strict mode pending alias resolution.
- cross-ref-checker surfaces noise from historical «наследие» entries
  in headers (see commit a780959 DWC); strict mode pending refinement.

observer-of-observer is warn-only by spec (no fail until C3 prune
threshold 54 weeks).

Verified via npx lefthook run pre-commit on staged lefthook.yml —
all 14 jobs evaluate cleanly: 9 skipped (glob mismatch), 5 ran
(including new observer-of-observer warn).

Per ADR-011 + plan Task C5.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 06:39:41 +03:00
Дмитрий 21f5047640 feat(a11): vendor Data Scientist skill into .claude/skills + lint-ignore (ML3)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 17:15:28 +03:00
Дмитрий 5deff727a4 ci(deptrac): wire deptrac as lefthook pre-commit job 10
Job 10 runs `deptrac analyse` (root: app/) when staged app/**/*.php
changes — the layer-dependency gate. Red-green verified: a
Model→Service dependency is flagged (DependsOnDisallowedLayer,
exit 1); a clean tree exits 0. app/.gitignore += /.deptrac.cache.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 11:13:27 +03:00
Дмитрий a7b207e689 feat(c9): vendor CCPM skill into .claude/skills + lint-ignore (CP1) 2026-05-17 09:10:44 +03:00
Дмитрий b7a2412e88 fix(adr): adr-judge lefthook job — Python UTF-8 mode for Cyrillic diffs
adr-judge crashed (UnicodeEncodeError: surrogate '\udc98') when the staged diff contained non-ASCII content: Python reads piped stdin with the Windows cp1251 console codepage, not UTF-8, so a Cyrillic diff mis-decodes into surrogates and dies at diff_text.encode('utf-8'). '-X utf8' forces Python UTF-8 mode. Task 5's red-test probe was ASCII, so the crash went unseen until Task 6's Cyrillic docs/architecture files. adr-judge's file reads already use explicit encoding='utf-8'; only stdin was affected.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 04:54:44 +03:00
Дмитрий dd9e37ea3f feat(adr): wire adr-judge as lefthook pre-commit job 9 (Task 5)
adr-judge v0.13.1 vendored from the adr-kit plugin (MIT) -> tools/adr-judge.py (819 lines, Python stdlib only). lefthook pre-commit job 9 runs 'git diff --cached --unified=0 | python tools/adr-judge.py --diff - --adr-dir docs/adr/'.

AK6 resolved: the --llm flag is NOT passed, so adr-judge runs declarative regex only — no Claude Sonnet call, zero economy cost. adr-kit's own git-hook template passes --llm; we deliberately do not, and lefthook keeps sole ownership of .git/hooks (AK1).

Verified: red test — staged @inertiajs/vue3 import in app/resources/js/ blocked with VIOLATION citing ADR-001 line 1, lefthook exit 1. Green test — clean diff, 9/9 jobs pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 04:54:43 +03:00
Дмитрий 3e73c0e68f feat(arch): vendor mermaid-skill into .claude/skills + lefthook exclude (Task 3)
WH-2099/mermaid-skill (MIT): SKILL.md + 30 refs (incl. c4.md, architecture.md) + LICENSE. Standalone skill — no plugin, no hooks, no mmdc dependency; generates Mermaid source text.

lefthook markdownlint+cspell jobs get 'exclude: .claude/skills/mermaid/**' — markdownlint-cli2/cspell bypass .markdownlintignore/ignorePaths on explicit staged-file args (MK1). cspell.json + .markdownlintignore also updated for glob-mode invocations.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 04:54:43 +03:00
Дмитрий 91c64cde70 chore(lefthook): cspell --no-gitignore — staged-файлы под gitignored .claude/worktrees/ не проверялись
cspell.json useGitignore:true заставлял cspell игнорировать все файлы worktree, расположенного под gitignored .claude/worktrees/ (Files checked: 0 — фейковый green). Staged-файлы по определению tracked, потому --no-gitignore для pre-commit cspell безопасен и чинит worktree-коммиты.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-16 12:59:41 +03:00
Дмитрий 20d4682e21 feat(backend): Sprint 2 Phase A — Pest 4 browser scaffold + mutation + lazy-loading + Larastan cache
Sprint 2 Phase A (modernization). Закрытие audit O-stack-01/02/03 + O-perf-07:

- O-stack-01: Pest 4 browser-tests scaffold. testsuite Browser в phpunit.xml,
  Pest.php extend(...)->in('Browser'), tests/Browser/SmokeTest.php
  (login-flow + deal-create-flow). На Windows native PHP плагин
  pest-plugin-browser требует ext-sockets (отсутствует в стандартной
  сборке) и при автозагрузке вызывает socket_create_listen() ДО старта
  тестов, что ломает весь Pest. Поэтому плагин НЕ в require-dev,
  тесты помечены ->skip(...) с инструкцией активации на Linux CI.
  Скелет тестов в комментариях — на CI достаточно
  composer require pestphp/pest-plugin-browser --dev + npx playwright
  install + раскомментировать тела.
- O-stack-02: infection/infection ^0.32.7 в require-dev + app/infection.json
  (minMsi=50, source: Http/Models/Services). composer mutation script.
  Запуск отдельной задачей в CI (медленный). allow-plugins для
  infection/extension-installer.
- O-stack-03: Laravel 13 string-based lazy-loading в routes/web.php —
  убран блок use App\Http\Controllers\Api\* (16 импортов), все
  ссылки заменены на строки 'App\Http\...\X@method'. Контроллеры
  не загружаются автозагрузчиком при boot route'ов; класс резолвится
  только при матче маршрута. Использован строковый синтаксис, а не
  FQN-class — Pint default preset (fully_qualified_strict_types fixer)
  сворачивает FQN-class обратно в use, на строки не действует.
- O-perf-07: Larastan result cache через tmpDir: .phpstan-cache в
  phpstan.neon (cache-dir не дублируется флагом — phpstan не принимает
  оба источника). lefthook job 6 (larastan) использует этот же
  tmpDir автоматически. Ускорение инкрементальных pre-commit прогонов:
  на правке одного файла — переанализ только зависящих, не всего
  графа классов. .phpstan-cache в .gitignore.

Pest: 416/416 PASS + 2 skipped (browser smoke pending Linux CI).
Larastan: 0 errors above baseline.
Infection: vendor/bin/infection --version → 0.32.7.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 19:18:38 +03:00
Дмитрий 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
Дмитрий e81eeef1fe phase1(db-tooling): squawk v2.51 + pgFormatter v5.9 — закрытие тулчейна фазы 1
Активны Прил. Н #15 squawk и #16 pgFormatter; фаза 1 по тулчейну
закрыта 13/17 (без #17 pg_partman — Windows native стек).

squawk:
- bin/squawk.exe (npm i -g squawk-cli + копия из ~/AppData/...
  /squawk-cli/js/binaries/squawk → bin/squawk.exe; npm-wrapper
  не находит spawn-target без .exe на Windows)
- .squawk.toml: 9 правил исключено (5 bootstrap-неприменимых +
  4 дизайнных решения проекта). Smoke-test на db/schema.sql — 0 issues.
- lefthook.yml: pre-commit job на staged *.sql
- npm run lint:sql

pgFormatter:
- bin/pgFormatter/ (pg_format + lib/ из v5.9 release tarball,
  запуск через Cygwin Perl 5.42.2 из Git for Windows — без
  отдельной установки ActivePerl/Strawberry)
- Без авто-fix хука: diff vs db/schema.sql 3255 строк
  (UPPERCASE→lowercase для типов, плотный одностроковый стиль,
  перетасовка inline-комментариев) — стиль schema.sql ручной,
  авто-fix недопустим
- Только ручной режим: npm run format:sql:check (dry-run + diff),
  npm run format:sql (пишет в db/schema.sql.formatted для review)

Документы:
- Tooling Прил. Н v1.5 → v1.6 (§0 «Что нового», §3.3 таблица,
  §10.1 п.8 ⏸→, §11.4 уточнение по Cygwin Perl)
- CLAUDE.md v1.8 → v1.9 (§0 ссылка, §6 текущая фаза 17/28,
  колонтитул)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 12:56:29 +03:00
Дмитрий 59f8ca04bb phase1(hooks-fix): сужение pre-push lychee + 2 битых ссылки + allowlist demo HTML
При первом запуске pre-push hook'ов после установки lefthook (`4eee06f`)
обнаружились 3 проблемы — все легитимны, не в самом lefthook'е:

1. **gitleaks-full-history** ловил 42 хита `ru-phone-unmasked` в HTML-концептах
   handoff Платона (liderra_v8_handoff/concepts/v8_*.html и web/v8/v8_*.html).
   Это ДЕМО-данные для визуализации, не реальные ПДн. Добавлены в allowlist
   .gitleaks.toml: `liderra_v8_handoff/concepts/.*\.html` + `web/v8/.*\.html`
   + `app/composer.lock`.

2. **lychee-links** ловил 21 ошибку «Cannot resolve root-relative link» на
   ссылки `/login`, `/register`, `/legal/*` в HTML-концептах. Эти маршруты
   появятся только в фазе 2+ (Vue+Vuetify реализация). Сужен glob
   pre-push lychee — выкинут `web/**/*.html`. Дополнительно добавлены
   `liderra_v8_handoff/concepts` и `web/v8` в .lychee.toml exclude_path
   как защита для других вариантов запуска.

3. **2 РЕАЛЬНЫХ битых ссылки** в narrative — спасибо lychee, нашёл:
   - `docs/CRM_bp-gr_Инструкция_v8_5.md:6128` ссылался на `brandbook.md`,
     но этот файл удалён 08.05.2026 (заменён на `liderra_v8_handoff/docs/
     BRANDBOOK_v2.md` v8 Forest). Исправлен относительный путь.
   - `README.md:88` ссылался на `docs/README_АРХИВ_v8_4.md`, но переименован
     в `_v8_5.md` коммитом `4ffc19a` от 07.05.2026. Поправлено + bump v8.4→v8.5
     в подписи.

Финальный smoke-test после правок:
  - gitleaks detect (full history): «no leaks found»
  - lychee на narrative .md: 122 OK / 0 Errors / 5 Excluded

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 12:00:15 +03:00
Дмитрий 4eee06fb22 phase1(hooks): lefthook auto-install + Pint + Larastan pre-commit hooks
Закрывает Tooling §10.1 шаги 10/11 («хуки в .claude/settings.json для
Pint/Larastan» — реализация через lefthook, как и было обещано в
CLAUDE.md §3.5: «Pre-commit (gitleaks, link-check) — не здесь, отдельно
через git hooks (lefthook)»).

Добавлено в lefthook.yml:
  - pre-commit job #5 «pint»: glob app/**/*.php, root app/,
    `php vendor/bin/pint {staged_files}` + stage_fixed: true
    (авто-fix форматирования PSR-12 на staged PHP)
  - pre-commit job #6 «larastan»: glob app/**/*.php, root app/,
    `php vendor/bin/phpstan analyse --no-progress --memory-limit=512M`
    (полный анализ при любой правке *.php — phpstan нужен граф классов,
    точечный анализ только staged невозможен)

Хуки установлены через `npx lefthook install` — .git/hooks/pre-commit
и .git/hooks/pre-push сгенерированы. Smoke-test:
  - pint --test (на default scaffold) → passed
  - phpstan analyse --no-progress → 0 ошибок выше baseline (3 в baseline)

Это опционально-блокирующий слой: при коммите .php — Pint авто-форматирует,
Larastan ловит ошибки выше phpstan-baseline.neon. Обход — `LEFTHOOK=0
git commit` (использовать только для emergency).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 11:44:52 +03:00
Дмитрий 887abf444e rebrand(v8.5→Лидерра): дизайн-handoff Платона v8 Forest + Лидпоток→Лидерра
Получен handoff-пакет liderra_v8_handoff/ от дизайнера Платона
(kpd9363@gmail.com) от 07.05.2026 — v8 Forest. Заказчик 08.05 решил
применить только в части дизайна, имени, логотипа. Функционал, состав
страниц и правила (CTO-11, click-wrap, SSO break-glass, 14 статусов
воронки) — без изменений (источник — ТЗ v8.5/schema v8.5).

Что сделано:

- Массовая замена Лидпоток→Лидерра (с учётом падежей: Лидерры/Лидерре)
  в 33 файлах (449 вхождений) — все .md/.sql/.json/.toml/.yml/.txt/.html,
  кроме исторических упоминаний внутри liderra_v8_handoff/
- Удалён docs/brandbook.md v1.1 — заменён на BRANDBOOK_v2.md из handoff
- Скопированы 13 концептов liderra_v8_handoff/concepts/v8_*.html в
  web/v8/. Удалены старые web/01-login.html, 02-dashboard.html,
  03-deals.html, index.html (палитра v1.1 deprecated)
- CLAUDE.md v1.0→v1.1: §0 (BRANDBOOK_v2 + DEVELOPER_HANDOFF в источниках),
  §2 (палитра Forest, Inter+JBM, Lucide), §5 п.6 (anti-pattern Inter
  снят — в Forest Inter наш основной шрифт), §6 (13 концептов в web/v8/)
- Реестр Открытые_вопросы_v8_3.md v1.12→v1.13: добавлена запись о
  ребрендинге + 4 точечных расхождений handoff vs ТЗ (статусы воронки,
  click-wrap чекбоксы, SSO fallback, axe violations)
- package.json/package-lock.json: name lidpotok→liderra

4 расхождения handoff vs ТЗ (НЕ применены, источник истины — ТЗ/schema):

1. 14 «обобщённых» статусов в BRANDBOOK_v2 §3.6 ≠ 14 slug'ов в
   schema.sql:2076 (совпадает 2 из 14: «Переговоры», «Оплачено»).
   Источник — schema/ТЗ §6.4 (реселлерская модель из аудита crm.bp-gr.ru,
   6 системных + 8 настраиваемых статусов).
2. 3-й click-wrap в v8_login.html («маркетинг-опционально») ≠ ТЗ §1.5/§4.1
   («согласие на ПДн», обязательное, OPEN-Ж-3).
3. SSO в v8_admin.html («локальный 2FA fallback») ≠ ТЗ OPEN-И-13
   (break-glass super_admin, локальный 2FA выключен).
4. Заявление «axe-core 4.10.2 — 0 violations» в README handoff — локально
   Pa11y 9.1.1 + axe нашёл 81 violation на 10/13 HTML (преимущественно
   color-contrast на декоративных separator'ах с --ink-disabled).
   Чисто: settings/errors/palette_options.

Что НЕ включено в коммит:
- лендинг/TZ_landing_v1_0.md — untracked, не моя работа в этой сессии
- .tmp/ — gitignored

Что осталось (для следующих сессий):
- Возможное переименование GitHub-репо CoralMinister/lidpotok → liderra
  (отдельное решение заказчика)
- Опционально: обратная связь Платону по 4 расхождениям handoff vs ТЗ

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 07:11:58 +03:00
Дмитрий f1ea6a15a6 fix(config): B-1 — конфигурационные находки аудита B (P0+P1)
- cspell-words.txt: удалено сломанное `ofеrtу` (кириллица в латыни,
  пропущено мимо словаря; нормальные `оферта`/`оферты` уже есть).
- .gitignore: `.playwright-mcp/` → `**/.playwright-mcp/` (артефакт может
  появиться в любом подкаталоге, не только в корне).
- pa11y.config.json: добавлен `web/03-deals.html` (готовый прототип №03,
  ранее не попадал в a11y-check).
- lefthook.yml: pre-push +lychee-links — битые ссылки ловятся до push,
  как и было задумано (Прил. Н §1, в комментарии было, в jobs не было).
- CLAUDE.md §4: `gitleaks detect` / `gitleaks protect` → `./bin/gitleaks.exe ...`
  (на Windows бинарь в `bin/`, не в PATH).
- README.md: подпись `Прил. Л v0.1 от 05.05.2026` → `v0.4 от 06.05.2026`,
  синхронизация с таблицей версий (последняя запись v0.4).

Линтеры (markdownlint, cspell на затронутых .md) — чисто.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 23:31:14 +07:00
Дмитрий 6ff05fd7ea chore: phase 0 tooling baseline
Установлены 9 инструментов фазы 0 + lefthook для pre-commit/pre-push hooks.

Конфиги в корне:
- package.json + package-lock.json (10 dev-deps, 7 npm-скриптов)
- .markdownlint.json + .markdownlintignore — стиль Markdown
- cspell.json + cspell-words.txt — орфография ru/en + 350+ проектных терминов
- .lychee.toml — проверка ссылок с игнором плейсхолдеров
- .stylelintrc.json — стиль CSS в HTML-прототипах
- .gitleaks.toml — 8 кастомных правил для РФ-контекста (телефон, ИНН, ОГРН,
  паспорт, Yandex Cloud-tokens, webhook secrets) + allowlist для масок
- pa11y.config.json — WCAG 2.1 AA для web/01-login.html и web/02-dashboard.html
- .mcp.json — 3 MCP-сервера (Playwright, GitHub через офиц. hosted endpoint,
  PostgreSQL — заглушка)
- .gitignore — node_modules, bin/*, артефакты + задел на фазы 1–3
- .claude/settings.json — permissions allow/deny + хук авто-fix .md
- lefthook.yml — pre-commit (gitleaks + markdownlint + cspell + stylelint)
  и pre-push (полный gitleaks по истории)

Связано: docs/Tooling_v8_3.md (Прил. Н v1.0) — реестр 28 инструментов в 4
фазах; CLAUDE.md в корне — оперативная карта приоритета правил и команд.

Архитектурных изменений в проекте: 0.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 04:44:20 +07:00