From fee8efc809de76598514bd2f3d728835c15db213 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Wed, 20 May 2026 09:19:50 +0300 Subject: [PATCH] docs(finance): C6+C7 finance-tooling implementation plan MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 11 задач в 3 фазах: Ф1 billing-audit скил (C6), Ф2 finance plugin enable + ru-tax-accounting скил (C7), Ф3 нормативка (Tooling/PSR/Pravila/CLAUDE) + роутер (routing-off-phase L13 + router-procedure) + наблюдатель (9-атрибутные блоки + C1/C2) + карта (+3 узла) + ADR-012 + push. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../plans/2026-05-20-finance-tooling-c6-c7.md | 880 ++++++++++++++++++ 1 file changed, 880 insertions(+) create mode 100644 docs/superpowers/plans/2026-05-20-finance-tooling-c6-c7.md diff --git a/docs/superpowers/plans/2026-05-20-finance-tooling-c6-c7.md b/docs/superpowers/plans/2026-05-20-finance-tooling-c6-c7.md new file mode 100644 index 00000000..a166d123 --- /dev/null +++ b/docs/superpowers/plans/2026-05-20-finance-tooling-c6-c7.md @@ -0,0 +1,880 @@ +# Finance-tooling (C6+C7) Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Наполнить разделы карты C6 «Финансы — биллинг и тарификация» и C7 «Финансы — бухгалтерия и налоги» dev-тулчейном (3 новых узла + reuse-классификация) и довести расширенную нормативку (включая роутер и наблюдатель). + +**Architecture:** Гибрид с полным покрытием. Reuse-классификация ~11 существующих узлов в C6/C7 через `NODE_SECTION_SECONDARY` + 1 marketplace-плагин (`finance`, homed C7) + 2 self-authored project-скила (`billing-audit` для C6, `ru-tax-accounting` для C7). Нормативка по паттерну прошлых интеграций (Tooling/PSR_v1/Pravila/CLAUDE.md + ADR), расширенная роутером (`routing-off-phase.md`, `router-procedure.md`) и наблюдателем (9-атрибутные блоки + контролёры C1/C2). + +**Tech Stack:** Markdown (скилы/нормативка/ADR), JS (`automation-graph-data.js` + `automation-graph.html`), JSON (`evals.json`), lefthook (markdownlint/cspell/gitleaks + brain-контролёры). + +**Worktree:** `worktree-finance-tooling-c6-c7` (база origin/main `7df4786`). Спека: `docs/superpowers/specs/2026-05-20-finance-tooling-c6-c7-design.md` (commit `d984165`). + +**Дисциплина (Pravila §15):** коммиты только явными путями (`git commit -m "..." -- <пути>`); pre-flight `git fetch && git log HEAD..origin/main --oneline` перед правкой каждого из нормативных файлов; субагенты+git — Sonnet/Opus, верификация commit-базы после каждого. + +--- + +## File Structure + +| Файл | Создаём/Меняем | Ответственность | +|---|---|---| +| `.claude/skills/billing-audit/SKILL.md` | Create | C6-скил: денежные инварианты Лидерры | +| `.claude/skills/billing-audit/references/invariants.md` | Create | Чек-лист инвариантов + ссылки на биллинг-файлы | +| `.claude/skills/billing-audit/evals/evals.json` | Create | Триггер-eval (positive + near-miss) | +| `.claude/skills/ru-tax-accounting/SKILL.md` | Create | C7-скил: РСБУ/НК РФ контекст | +| `.claude/skills/ru-tax-accounting/references/ru-tax-context.md` | Create | Налоговые режимы + маппинг выручка→база | +| `.claude/skills/ru-tax-accounting/evals/evals.json` | Create | Триггер-eval | +| `~/.claude/settings.json` | Modify (user-level, не коммит) | enable `finance` plugin | +| `docs/adr/012-finance-tooling.md` | Create | Граница C6/C7, applicability, DEFERRED | +| `docs/Tooling_v8_3.md` | Modify | §4.36/§4.37/§4.38 + §0 счётчик 60→63 + header | +| `docs/Plugin_stack_rules_v1.md` | Modify | R10.1 Блок 1 (+finance) + note (+2 скила) + version | +| `docs/Pravila_raboty_Claude_v1_1.md` | Modify | §13.2 +абзац finance-tooling + §10 changelog + version | +| `docs/routing-off-phase.md` | Modify | +3 строки таблицы + L13 + scope + version | +| `docs/router-procedure.md` | Modify | changelog-touch v1.0→v1.1 | +| `CLAUDE.md` | Modify (прямой Edit, worktree-эксцепшн §5 п.10) | §3.3 +#61/#62/#63 + §0 + §6 + §9 + шапка | +| `docs/automation-graph-data.js` | Modify | +3 NODES + NODE_SECTION + NODE_SECTION_SECONDARY + EDGES | +| `docs/automation-graph.html` | Modify | +3 NODE_DETAILS `nd()` + NODE_META + версии-метки | +| `cspell-words.txt` | Modify | новые термины по мере появления cspell-флагов | + +--- + +## ФАЗА 1 — C6: скил billing-audit + +### Task 1: Скил `billing-audit` (C6) + +**Files:** + +- Create: `.claude/skills/billing-audit/SKILL.md` +- Create: `.claude/skills/billing-audit/references/invariants.md` +- Create: `.claude/skills/billing-audit/evals/evals.json` + +- [ ] **Step 1: Написать evals.json (триггер-кейсы первыми)** + +Создать `.claude/skills/billing-audit/evals/evals.json`: + +```json +{ + "skill": "billing-audit", + "positive": [ + "проверь корректность списания за лид", + "аудит денежной логики биллинга", + "не теряются ли копейки в prepaid→рублёвом балансе", + "идемпотентно ли списание при ретрае", + "правильно ли резолвится тарифная ступень", + "что значит дрейф >5% в CsvReconcile", + "проверь провенанс charge_source", + "ревью PricingTierResolver на ошибки округления", + "ledger двойной баланс — где может утечь сумма", + "audit charge invariants before merge" + ], + "near_miss": [ + {"prompt": "смоделируй BPMN процесса списания", "expect": "process-modeling #52"}, + {"prompt": "где узкое место в воронке оплат", "expect": "process-analysis #53"}, + {"prompt": "security-аудит платёжного эндпоинта", "expect": "D3 audit-security / Semgrep"}, + {"prompt": "посчитай РСБУ-проводки по выручке", "expect": "ru-tax-accounting #63"}, + {"prompt": "метрика MRR за месяц", "expect": "product-management metrics-review #42"} + ] +} +``` + +- [ ] **Step 2: Написать SKILL.md** + +Создать `.claude/skills/billing-audit/SKILL.md`: + +```markdown +--- +name: billing-audit +description: Аудит денежной корректности биллинг-кода Лидерры — money-инварианты при правке/ревью списаний, тарифов и баланса. Используй при «проверь списание», «аудит биллинга», «не теряются ли копейки», «идемпотентно ли списание», «корректна ли тарифная ступень», «что значит дрейф CsvReconcile», «провенанс charge_source». НЕ для моделирования процесса (process-modeling), поиска узких мест (process-analysis), security-аудита (D3), РСБУ/налогов (ru-tax-accounting), метрик выручки (product-management). +--- + +# Billing Audit — аудит денежной корректности биллинга Лидерры + +Проектный скил раздела C6 карты «Финансы — биллинг и тарификация». Проверяет +**денежные инварианты** биллинг-подсистемы при правке или ревью кода. Объект — +корректность *начисления* (не процесс, не безопасность, не учёт/налоги). + +## Когда использовать + +- Правка/ревью кода в `app/app/Services/Billing/**`, `app/app/Jobs/Supplier/CsvReconcileJob.php`, + моделей `PricingTier`/`LeadCharge`, контроллеров биллинга. +- Вопрос «безопасно ли это денежно?» по списанию, тарифу, балансу, сверке. + +## Процедура аудита (5 инвариантов) + +Полный чек-лист с проверками и ссылками на файлы — `references/invariants.md`. + +1. **Сохранение суммы** — все денежные операции через `bcmath` (bcadd/bcsub/bcmul/bcdiv, + scale фиксирован), никаких float; prepaid→₽ конвертация без потери копеек. +2. **Идемпотентность списания** — один лид = одно списание; повтор/ретрай джоба + не дублирует начисление (проверить уникальный ключ / advisory-lock / upsert). +3. **Корректность тарифной ступени** — `PricingTierResolver` выбирает верную из 7 + ступеней по объёму; границы ступеней (включительно/исключительно) однозначны. +4. **Дрейф сверки** — `CsvReconcileJob` порог >5%: что сравнивается, что значит дрейф, + куда смотреть (рассинхрон поставки vs ошибка тарифа). +5. **Провенанс charge_source** — каждое списание имеет прослеживаемый источник + (`charge_source`); ручные/авто/CSV-восстановленные различимы. + +## Границы + +- ≠ `process-modeling` #52 / `process-analysis` #53 — те про *поток/процесс*; billing-audit про *деньги в коде*. +- ≠ D3 audit-security (#39/#40) — те про *безопасность*; billing-audit про *денежную корректность*. +- ≠ `ru-tax-accounting` #63 — тот про *учёт/налоги* (выход биллинга → налоговая база); billing-audit про *начисление*. +- ≠ `product-management:metrics-review` #42 — тот про *метрики выручки*; billing-audit про *корректность*. + +## Связано + +- Reuse: Boost #10 (модели), Pest #18 (тесты инвариантов), Larastan #12 (bcmath/без float), Sentry #34 / Redis #35 (runtime/очередь). +- ADR-012 (граница finance-tooling C6/C7). +``` + +- [ ] **Step 3: Написать references/invariants.md** + +Создать `.claude/skills/billing-audit/references/invariants.md`: + +```markdown +# Денежные инварианты биллинга Лидерры — чек-лист аудита + +Объект-файлы (на момент 20.05.2026): + +- `app/app/Services/Billing/PricingTierResolver.php` — резолюция 7 ступеней (pure). +- `app/app/Services/Billing/LedgerService.php` — двойной баланс prepaid→₽ (bcmath). +- `app/app/Services/Billing/BillingTopupService.php` — пополнение. +- `app/app/Services/Billing/ChargeResult.php` — DTO результата списания. +- `app/app/Models/PricingTier.php`, `app/app/Models/LeadCharge.php`. +- `app/app/Repositories/PricingTierRepository.php`. +- `app/app/Jobs/Supplier/CsvReconcileJob.php` — hourly сверка, алерт дрейфа >5%. +- `app/app/Http/Controllers/Api/{AdminPricingTiersController,AdminBillingController,BillingController,TenantChargesController}.php`. + +## I1. Сохранение суммы (bcmath, без float) + +- [ ] Все арифметические операции с деньгами — `bcadd`/`bcsub`/`bcmul`/`bcdiv`/`bccomp` с явным `scale`. +- [ ] Нет `+`/`-`/`*`/`/` над денежными значениями (Larastan/grep на float-арифметику в Billing). +- [ ] prepaid→₽: конвертация округляет детерминированно (TRUNC/округление вниз в пользу tenant — свериться с кодом), сумма prepaid + ₽ не «исчезает». +- [ ] Денежные колонки — целочисленные копейки или DECIMAL, не float/double. + +## I2. Идемпотентность списания + +- [ ] Один лид → одно списание: уникальность по (lead_id) или advisory-lock в `LedgerService`. +- [ ] Ретрай `ImportLeadsJob`/`CsvReconcileJob` не создаёт дубль `lead_charges`. +- [ ] Транзакция + `lockForUpdate` на балансе при мутации (TOCTOU — см. Sprint 3 lockForUpdate). + +## I3. Корректность тарифной ступени + +- [ ] `PricingTierResolver` выбирает ступень по объёму `delivered_in_month` верно на границах. +- [ ] Границы ступеней непрерывны (нет дыр/перекрытий между 7 ступенями). +- [ ] Pest покрывает граничные значения (ступень N → N+1). + +## I4. Дрейф сверки CsvReconcile + +- [ ] Порог >5% — что сравнивается (поставка поставщика vs начислено) → `supplier_csv_reconcile_log`. +- [ ] Дрейф = рассинхрон поставки (норм) ИЛИ ошибка тарифа (баг) — различить по `charge_source`. + +## I5. Провенанс charge_source + +- [ ] Каждое `lead_charges.charge_source` заполнено и прослеживаемо. +- [ ] Авто/ручное/CSV-восстановленное (`recovered_from_csv_at`) различимы. + +## Reuse-инструменты + +Boost #10 (Eloquent-introspection), Pest #18 + pest-parallel-debugger (тесты + race), +Larastan #12 (статанализ bcmath), Sentry MCP #34 (runtime списаний), Redis MCP #35 (очередь сверки), context7 #60 (доки bcmath). +``` + +- [ ] **Step 4: Валидировать структуру скила** + +Run: + +```bash +cd ".claude/worktrees/finance-tooling-c6-c7" 2>/dev/null || cd "c:/моя/проекты/портал crm/Документация/.claude/worktrees/finance-tooling-c6-c7" +node -e "JSON.parse(require('fs').readFileSync('.claude/skills/billing-audit/evals/evals.json','utf8')); console.log('evals.json OK')" +grep -c "^name: billing-audit" .claude/skills/billing-audit/SKILL.md +grep -c "^description:" .claude/skills/billing-audit/SKILL.md +``` + +Expected: `evals.json OK`, оба grep → `1`. + +- [ ] **Step 5: Триггер-eval (самопроверка по evals.json)** + +Прогнать каждый `positive` промпт через дескрипшн скила: триггерит ли `description`? +Каждый `near_miss` — уходит ли к указанному соседу (НЕ к billing-audit)? Зафиксировать +результат в ответе (например «10/10 positive, 5/5 near-miss корректны»). При промахе — +уточнить `description` (добавить/убрать ключевые слова) и перепроверить. + +- [ ] **Step 6: lefthook-проверка + commit** + +Run: + +```bash +git add -- .claude/skills/billing-audit/ +git commit -m "feat(finance): billing-audit skill — money invariants C6 + +Co-Authored-By: Claude Opus 4.7 (1M context) " -- .claude/skills/billing-audit/ +``` + +Expected: PASS markdownlint/cspell/gitleaks. При cspell-флаге — добавить термины в `cspell-words.txt` (новой секцией `# finance-tooling C6+C7 — billing-audit skill (2026-05-20)`), `git add -- cspell-words.txt`, повторить commit с обоими путями. + +--- + +## ФАЗА 2 — C7: finance plugin + ru-tax-accounting + +### Task 2: Enable `finance` plugin + smoke + +**Files:** + +- Modify: `~/.claude/settings.json` (user-level, вне репозитория — НЕ коммитится) + +- [ ] **Step 1: Прочитать текущий формат enabledPlugins** + +Run: + +```bash +node -e "const s=require('os').homedir()+'/.claude/settings.json'; const j=JSON.parse(require('fs').readFileSync(s,'utf8')); console.log(JSON.stringify(j.enabledPlugins,null,2))" +``` + +Expected: объект с ключами вида `"operations@knowledge-work-plugins": true`, `"product-management@knowledge-work-plugins": true`. Запомнить точный формат ключа. + +- [ ] **Step 2: Добавить finance plugin** + +Через skill `update-config` ИЛИ прямым редактированием `~/.claude/settings.json` добавить в `enabledPlugins`: + +```json +"finance@knowledge-work-plugins": true +``` + +(ключ — точно по формату из Step 1; marketplace `knowledge-work-plugins` уже установлен). + +- [ ] **Step 3: Smoke — скилы finance доступны** + +Перезапустить сессию ИЛИ проверить доступность. Ожидаемо в списке скилов появляются +`finance:reconciliation`, `finance:variance-analysis`, `finance:financial-statements`, +`finance:journal-entry`, `finance:close-management`, `finance:audit-support`, `finance:sox-testing`. +Зафиксировать в ответе фактический список доступных `finance:*` скилов (raw, не саммари). + +- [ ] **Step 4: Зафиксировать применимость (для ADR-012, Task 4)** + +Записать вывод (без коммита — войдёт в ADR Task 4): + +- ✅ применимо C6: `reconciliation`, `variance-analysis`. +- ⚠️ частично C7 (US-GAAP): `financial-statements`, `close-management`, `journal-entry`, `journal-entry-prep`. +- ❌ not-applicable РФ: `sox-testing`, `audit-support`. +- DEFERRED MCP: snowflake/databricks/bigquery (не наш стек). + +> Примечание: enable settings.json — user-level, не попадает в git. Формализация — в нормативке (Task 5-9). + +### Task 3: Скил `ru-tax-accounting` (C7) + +**Files:** + +- Create: `.claude/skills/ru-tax-accounting/SKILL.md` +- Create: `.claude/skills/ru-tax-accounting/references/ru-tax-context.md` +- Create: `.claude/skills/ru-tax-accounting/evals/evals.json` + +- [ ] **Step 1: Написать evals.json** + +Создать `.claude/skills/ru-tax-accounting/evals/evals.json`: + +```json +{ + "skill": "ru-tax-accounting", + "positive": [ + "как учесть выручку за лиды по РСБУ", + "НДС или УСН для SaaS-выручки", + "переведи billing-выручку в налоговую базу", + "какое налогооблагаемое событие при пополнении баланса", + "выгрузка lead_charges для бухгалтера", + "проводки по РСБУ за списания", + "налоговый режим для подписочной выручки портала", + "что с НДС при возврате на баланс tenant", + "налоговая база УСН доходы по выручке за лиды" + ], + "near_miss": [ + {"prompt": "проверь идемпотентность списания", "expect": "billing-audit #62"}, + {"prompt": "US-GAAP financial statement", "expect": "finance plugin #61 financial-statements"}, + {"prompt": "договор с поставщиком лидов", "expect": "D1 юриспруденция"}, + {"prompt": "обработка ПДн при выгрузке", "expect": "D2 ПДн 152-ФЗ"}, + {"prompt": "сверка ledger с банком", "expect": "finance plugin #61 reconciliation"} + ] +} +``` + +- [ ] **Step 2: Написать SKILL.md** + +Создать `.claude/skills/ru-tax-accounting/SKILL.md`: + +```markdown +--- +name: ru-tax-accounting +description: Контекст РСБУ и налогов РФ (НК РФ, НДС/УСН) применительно к SaaS-выручке Лидерры за лиды. Используй при «учёт выручки по РСБУ», «НДС или УСН», «налоговая база по выручке», «налогооблагаемое событие», «выгрузка для бухгалтера», «проводки РСБУ». НЕ для денежной корректности кода (billing-audit), US-GAAP-отчётности (finance plugin), договоров (D1 право), ПДн (D2), сверки с банком (finance reconciliation). +--- + +# RU Tax & Accounting — РСБУ/НК РФ контекст для выручки Лидерры + +Проектный скил раздела C7 карты «Финансы — бухгалтерия и налоги». Переводит +billing-выручку (выход C6) в **российский учётно-налоговый контекст** (РСБУ + НК РФ). +Закрывает gap, который US-GAAP-плагин `finance` (#61) не покрывает. + +## Когда использовать + +- Вопрос «как это учесть/обложить по РФ-правилам?» по выручке/пополнениям/возвратам. +- Подготовка выгрузок/пояснений для бухгалтера из billing-данных. +- Определение налогооблагаемого события и налоговой базы. + +## Содержание (см. references/ru-tax-context.md) + +1. **Налоговые режимы РФ** — НДС (ОСНО) vs УСН (доходы / доходы-расходы); что применимо к SaaS за лиды. +2. **Налогооблагаемое событие** — пополнение баланса (аванс) vs списание за лид (реализация) vs возврат. +3. **Маппинг billing→база** — `lead_charges`/`LedgerService` → выручка → налоговая база; роль `charge_source`. +4. **РСБУ vs управленческий** — отличие от US-GAAP-отчётов плагина finance; первичка/документы. +5. **Выгрузки для бухгалтера** — какие данные и в каком разрезе извлечь (Boost/Pest как инструменты выгрузки). + +## Границы + +- ≠ `billing-audit` #62 — тот про *корректность начисления в коде*; ru-tax про *учёт/налог результата*. +- ≠ `finance` plugin #61 — тот US-GAAP-механика (проводки/отчёты/сверка); ru-tax — РФ-специфика РСБУ/НК. +- ≠ D1 «Юриспруденция/договорная» — там договоры/право; ru-tax — налоги. +- ≠ D2 «Защита ПДн (152-ФЗ)» — там персональные данные; ru-tax — налоги. + +## Ограничение + +Бухгалтерия компании ведётся вне dev-репо (1С/аутсорс). Скил даёт **контекст и выгрузки**, +не заменяет бухгалтера и не является налоговой консультацией. Реальный платёжный +провайдер — DEFERRED (Б-1). + +## Связано + +- Вход: выручка из C6 (`lead_charges`, `LedgerService`). +- Reuse: data-scientist #49 (финмодели), Boost #10 / Pest #18 (выгрузка), finance plugin #61 (US-механика). +- ADR-012 (граница finance-tooling C6/C7). +``` + +- [ ] **Step 3: Написать references/ru-tax-context.md** + +Создать `.claude/skills/ru-tax-accounting/references/ru-tax-context.md`: + +```markdown +# РСБУ / НК РФ — контекст для выручки Лидерры за лиды + +> Не налоговая консультация. Контекст для подготовки данных бухгалтеру. + +## 1. Налоговые режимы РФ + +- **ОСНО + НДС (НК РФ гл. 21)** — НДС 20% на реализацию услуг РФ. Электронные/рекламные + услуги — проверить место реализации и применимые льготы. +- **УСН (НК РФ гл. 26.2)** — «доходы» (6%) или «доходы минус расходы» (15%). Без НДС + (кроме исключений). Типичный режим для раннего SaaS. +- Применимый режим зависит от регистрации ООО (Б-1) — до закрытия Б-1 фиксируем как параметр. + +## 2. Налогооблагаемое событие + +- **Пополнение баланса** = аванс (предоплата). По НДС — момент определения базы может + возникать на аванс; по УСН-доходы — доход по поступлению (кассовый метод). +- **Списание за лид** = реализация услуги (закрытие аванса). +- **Возврат на баланс / с баланса** = корректировка базы. +- Различать по `lead_charges.charge_source` и операциям `LedgerService`. + +## 3. Маппинг billing → налоговая база + +| Billing-сущность | Учётный смысл | +|---|---| +| Пополнение (`BillingTopupService`) | Аванс / поступление | +| Списание (`LedgerService`, `lead_charges`) | Реализация (выручка) | +| `delivered_in_month` (`tenants`) | Объём для tier — не налог напрямую | +| Возврат | Корректировка | + +## 4. РСБУ vs управленческий / US-GAAP + +- РСБУ — российский план счетов, первичные документы (акт/УПД), кассовый/начисление. +- US-GAAP-скилы плагина `finance` (#61) — иная форма (income statement / balance sheet); + применимы для *внутренней управленки*, не для РФ-отчётности. + +## 5. Выгрузки для бухгалтера + +- Реестр списаний за период: `lead_charges` (period, tenant, сумма, charge_source). +- Реестр пополнений: операции `LedgerService` / `BillingTopupService`. +- Инструменты выгрузки: Boost #10 (Eloquent/SQL), Pest #18 (фикстуры/проверки), `BillingSummaryProvider` (готовый отчёт-провайдер). +``` + +- [ ] **Step 4: Валидировать структуру скила** + +Run: + +```bash +node -e "JSON.parse(require('fs').readFileSync('.claude/skills/ru-tax-accounting/evals/evals.json','utf8')); console.log('evals.json OK')" +grep -c "^name: ru-tax-accounting" .claude/skills/ru-tax-accounting/SKILL.md +grep -c "^description:" .claude/skills/ru-tax-accounting/SKILL.md +``` + +Expected: `evals.json OK`, оба grep → `1`. + +- [ ] **Step 5: Триггер-eval (самопроверка)** + +Прогнать positive/near_miss как в Task 1 Step 5. Зафиксировать результат. При промахе — уточнить `description`. + +- [ ] **Step 6: lefthook-проверка + commit** + +Run: + +```bash +git add -- .claude/skills/ru-tax-accounting/ +git commit -m "feat(finance): ru-tax-accounting skill — РСБУ/НК РФ context C7 + +Co-Authored-By: Claude Opus 4.7 (1M context) " -- .claude/skills/ru-tax-accounting/ +``` + +Expected: PASS. При cspell-флаге — добавить термины в `cspell-words.txt`, повторить с обоими путями. + +--- + +## ФАЗА 3 — нормативка + роутер + наблюдатель + карта + ADR + +> Перед правкой КАЖДОГО нормативного файла (Tooling/PSR_v1/Pravila/CLAUDE.md/routing-off-phase/router-procedure) — pre-flight: `git fetch && git log HEAD..origin/main --oneline` (Pravila §15.2). + +### Task 4: ADR-012 — граница finance-tooling + +**Files:** + +- Create: `docs/adr/012-finance-tooling.md` + +- [ ] **Step 1: Создать ADR-012** + +Создать `docs/adr/012-finance-tooling.md` (формат как соседние ADR в `docs/adr/`): + +```markdown +# ADR-012: Finance-tooling — наполнение разделов карты C6 + C7 + +**Status:** Accepted +**Date:** 2026-05-20 +**Контекст:** эпик finance-tooling (объединённые C6+C7), spec `docs/superpowers/specs/2026-05-20-finance-tooling-c6-c7-design.md`. + +## Context + +Разделы карты C6 «Финансы — биллинг и тарификация» и C7 «Финансы — бухгалтерия и +налоги» были пусты. Биллинг-подсистема (Plan 4) велика в коде, но dedicated dev-tooling +скуден. Заказчик решил объединить C6+C7 в один эпик и покрыть полностью. + +## Decision + +1. **finance plugin (#61)** (knowledge-work-plugins) — homed **C7** (primary), cross-ref C6. + - ✅ C6: `reconciliation`, `variance-analysis`. + - ⚠️ C7 частично (US-GAAP): `financial-statements`, `close-management`, `journal-entry`, `journal-entry-prep`. + - ❌ not-applicable РФ: `sox-testing`, `audit-support` (нет SOX у частной РФ-компании). + - DEFERRED: warehouse-MCP (snowflake/databricks/bigquery) — не стек проекта (PG+Redis). +2. **billing-audit (#62)** — self-authored project-скил, C6. Денежные инварианты Лидерры. +3. **ru-tax-accounting (#63)** — self-authored project-скил, C7. РСБУ/НК РФ. Закрывает gap US-плагина. +4. **Граница C6 ↔ C7:** C6 = начисление денег клиенту за лиды; C7 = учёт и налоги компании. + Точка стыка: billing-выручка (`lead_charges`/`LedgerService`) — выход C6 и вход C7. +5. **Reuse** существующих узлов в C6/C7 через `NODE_SECTION_SECONDARY` (см. spec §6). + +## Boundaries (конфликт-аудит) + +- FIN1 warehouse-MCP → DEFERRED. FIN2 SOX → not-applicable РФ. FIN3 finance vs operations. +- FIN4 finance reconciliation (инструмент) vs CsvReconcileJob (код). FIN5 billing-audit vs process-*/D3. +- FIN6 ru-tax vs finance plugin vs D1/D2. FIN7 граница C6↔C7. FIN8 self-authored скилы линтуются. + +## Consequences + +- C6/C7 карты непусты. Новая off-phase подкатегория `finance-tooling` (15-я). +- Реальный платёжный провайдер и warehouse-аналитика — DEFERRED (Б-1 / вне стека). +- ru-tax-accounting — контекст/выгрузки, не налоговая консультация (бухгалтерия вне репо). +``` + +- [ ] **Step 2: lefthook + commit** + +Run: + +```bash +git add -- docs/adr/012-finance-tooling.md +git commit -m "docs(adr): ADR-012 finance-tooling boundary C6/C7 + +Co-Authored-By: Claude Opus 4.7 (1M context) " -- docs/adr/012-finance-tooling.md +``` + +Expected: PASS (adr-judge job 9 OK). cspell-флаги → cspell-words.txt. + +### Task 5: Tooling Прил.Н — §4.36/§4.37/§4.38 + §0 + header + +**Files:** + +- Modify: `docs/Tooling_v8_3.md` + +- [ ] **Step 1: pre-flight sync** + +Run: `git fetch && git log HEAD..origin/main --oneline` — ожидаемо пусто или чужие коммиты (не Tooling). Если Tooling изменён на origin/main — сначала rebase. + +- [ ] **Step 2: Добавить §4.36 finance plugin** (после §4.35 context7) + +Вставить блок (формат как §4.30): + +```markdown +### 4.36. finance plugin — финансы и бухгалтерия (off-phase, finance-tooling) + +**Атрибуты:** + +| id | name | kind | phase | subcategory | triggers | boundaries | dormant | last-touched | +|---|---|---|---|---|---|---|---|---| +| #61 | finance plugin | plugin | off-phase | finance-tooling | «сверка, variance-анализ, US-GAAP-отчётность, проводки, close» | ADR-012 (граница C6/C7, vs operations) | false | 2026-05-20 | + +**Источник:** Claude Code plugin, marketplace `anthropics/knowledge-work-plugins`, plugin `finance@knowledge-work-plugins` (Anthropic Verified). Включается в `~/.claude/settings.json` `enabledPlugins`. 9 скилов (reconciliation/variance-analysis/financial-statements/close-management/journal-entry/journal-entry-prep/sox-testing/audit-support) + MCP-серверы (snowflake/databricks/bigquery/slack/ms365 — http). + +**Категория:** off-phase, **finance-tooling** — 15-я off-phase подкатегория. Домашний раздел карты — **C7** «Финансы — бухгалтерия и налоги» (primary), cross-ref **C6** «биллинг/тарификация». + +**Назначение:** учёт и финансовая отчётность — сверка счетов, анализ отклонений, US-GAAP-отчёты (P&L/BS/CF), управление закрытием периода, проводки. + +**Роль:** инструмент **#61**. Применимость к РФ-контексту: ✅ `reconciliation`/`variance-analysis` (C6); ⚠️ `financial-statements`/`close-management`/`journal-entry`/`journal-entry-prep` (US-GAAP — частично, у нас РСБУ); ❌ `sox-testing`/`audit-support` (not-applicable — нет SOX у частной РФ-компании). MCP-серверы (snowflake/databricks/bigquery) — **DEFERRED**, не стек проекта. + +**Конфликт-аудит (ADR-012):** FIN1 warehouse-MCP DEFERRED; FIN2 SOX not-applicable; FIN3 граница с operations #51 (finance = учёт/сверка/отчётность, operations = операционные процессы/риск); FIN4 finance `reconciliation` (инструмент) vs `CsvReconcileJob` (код проекта). РФ-специфику покрывает `ru-tax-accounting` #63. + +**Координация:** PSR_v1 R10.1 Блок 1. Не UI → вне R6.0/R6.1/R14. ADR-012. + +### 4.37. billing-audit — аудит денежной корректности (off-phase, finance-tooling) + +**Атрибуты:** + +| id | name | kind | phase | subcategory | triggers | boundaries | dormant | last-touched | +|---|---|---|---|---|---|---|---|---| +| #62 | billing-audit | skill | off-phase | finance-tooling | «аудит списания, money-инварианты, идемпотентность, тариф-резолюция, дрейф reconcile» | ADR-012 (vs process-*/D3/ru-tax) | false | 2026-05-20 | + +**Источник:** self-authored standalone project-скил в `.claude/skills/billing-audit/` (`SKILL.md` + `references/invariants.md` + `evals/evals.json`). Свой, не вендоренный; **линтуется** (cspell+markdownlint, не в ignorePaths — как process-*/discovery-interview, LINT1). + +**Категория:** off-phase, **finance-tooling**. Раздел карты **C6** «Финансы — биллинг и тарификация». + +**Назначение:** аудит денежных инвариантов биллинг-кода Лидерры — сохранение суммы (bcmath/без float), идемпотентность списания, корректность 7-ступенчатой tier-резолюции, интерпретация дрейфа CsvReconcile >5%, провенанс charge_source. + +**Роль:** инструмент **#62**. Триггер-eval в `.claude/skills/billing-audit/evals/evals.json`. + +**Конфликт-аудит (ADR-012, FIN5):** объект иной — ≠ process-modeling/process-analysis (#52/#53, поток/процесс), ≠ D3 audit-security (#39/#40, безопасность), ≠ ru-tax-accounting (#63, учёт/налог результата), ≠ product-management metrics-review (#42, метрики выручки). + +**Координация:** PSR_v1 R10.1 Блок 1 note (self-authored project-скил). Не UI → вне R6.0/R6.1/R14. + +### 4.38. ru-tax-accounting — РСБУ/НК РФ контекст (off-phase, finance-tooling) + +**Атрибуты:** + +| id | name | kind | phase | subcategory | triggers | boundaries | dormant | last-touched | +|---|---|---|---|---|---|---|---|---| +| #63 | ru-tax-accounting | skill | off-phase | finance-tooling | «РСБУ, НДС/УСН, налоговая база, налогооблагаемое событие, выгрузка бухгалтеру» | ADR-012 (vs finance plugin/billing-audit/D1/D2) | false | 2026-05-20 | + +**Источник:** self-authored standalone project-скил в `.claude/skills/ru-tax-accounting/` (`SKILL.md` + `references/ru-tax-context.md` + `evals/evals.json`). Свой, не вендоренный; **линтуется** (LINT1). + +**Категория:** off-phase, **finance-tooling**. Раздел карты **C7** «Финансы — бухгалтерия и налоги». + +**Назначение:** перевод billing-выручки (выход C6) в российский учётно-налоговый контекст — налоговые режимы (НДС/УСН), налогооблагаемое событие, маппинг выручка→база, выгрузки для бухгалтера. Закрывает РФ-gap US-GAAP-плагина finance #61. + +**Роль:** инструмент **#63**. Не налоговая консультация; бухгалтерия компании ведётся вне dev-репо (1С/аутсорс). Реальный платёжный провайдер — DEFERRED (Б-1). + +**Конфликт-аудит (ADR-012, FIN6):** ≠ billing-audit #62 (корректность начисления в коде), ≠ finance plugin #61 (US-GAAP-механика), ≠ D1 (договоры/право), ≠ D2 (ПДн 152-ФЗ). + +**Координация:** PSR_v1 R10.1 Блок 1 note (self-authored project-скил). Не UI → вне R6.0/R6.1/R14. +``` + +- [ ] **Step 3: Обновить §0 счётчик + header** + +В §0 «КАНОН СЧЁТЧИКОВ»: счётчик формализованных позиций 60 → **63** (off-phase +3); добавить подкатегорию **finance-tooling** (15-я). Обновить header Прил.Н: v2.17 → **v2.18** с записью «finance-tooling: +§4.36 finance plugin #61 / §4.37 billing-audit #62 / §4.38 ru-tax-accounting #63; §0 счётчик 60→63 + 15-я подкатегория; cross-ref Pravila v1.34 / PSR_v1 v3.18 / CLAUDE.md v2.21». Сверить фактическое число в §0 (Step выполняется по факту прочитанного §0, не вслепую). + +- [ ] **Step 4: lefthook + commit** + +Run: + +```bash +git add -- docs/Tooling_v8_3.md cspell-words.txt +git commit -m "docs(tooling): finance-tooling #61-#63 + §0 counter 60->63 (Прил.Н v2.18) + +Co-Authored-By: Claude Opus 4.7 (1M context) " -- docs/Tooling_v8_3.md cspell-words.txt +``` + +Expected: PASS. cspell-флаги (РСБУ/УСН/etc. уже добавлены в Task 1/3; новые — добавить). + +### Task 6: PSR_v1 R10.1 + version + +**Files:** + +- Modify: `docs/Plugin_stack_rules_v1.md` + +- [ ] **Step 1: pre-flight sync** (`git fetch && git log HEAD..origin/main --oneline`). + +- [ ] **Step 2: Блок 1 — добавить строку finance plugin** (после строки `operations` / в конец таблицы Блок 1) + +```markdown +| **finance** *(9 skills: `reconciliation` / `variance-analysis` / `financial-statements` / `close-management` / `journal-entry` / `journal-entry-prep` / `sox-testing` / `audit-support`)* | `anthropics/knowledge-work-plugins` (plugin `finance@knowledge-work-plugins`, Anthropic Verified) | финансы/бухгалтерия — сверка, анализ отклонений, US-GAAP-отчётность, закрытие периода, проводки. Категория: **finance-tooling** (Tooling #61, вне UI-пула). Homed C7, cross-ref C6 | при учётно-финансовой работе. Применимость РФ: ✅ reconciliation/variance; ⚠️ US-GAAP-скилы частично; ❌ SOX-скилы not-applicable; warehouse-MCP DEFERRED (ADR-012). Не UI → вне R6.0/R6.1/R14 | +``` + +- [ ] **Step 3: Блок 1 — добавить note (self-authored finance-скилы)** (после note v3.13) + +```markdown +**Блок 1 — note (v3.18):** **billing-audit** (Tooling #62) + **ru-tax-accounting** (Tooling #63) — self-authored project-скилы в `.claude/skills/billing-audit/` и `.claude/skills/ru-tax-accounting/`, **не** вендоренные и **не** через marketplace; написаны проектом (паттерн `audit-portal`/`regression`/`process-*`/`discovery-interview`). **Линтуются** lefthook'ом (cspell+markdownlint), **не** в ignorePaths (LINT1). Категория **finance-tooling** (15-я off-phase подкатегория, разделы C6/C7 карты), вне R6.0/R6.1/R14. ADR-012. +``` + +- [ ] **Step 4: Обновить версию-шапку PSR_v1** v3.17 → **v3.18** с changelog-строкой (формат как v3.9): «finance-tooling: R10.1 Блок 1 +finance plugin (#61) + note (+billing-audit #62 / ru-tax-accounting #63). Не UI → вне R6/R14. Содержательных изменений R0–R16: 0. Связано: Tooling v2.18, Pravila v1.34, CLAUDE.md v2.21; план `docs/superpowers/plans/2026-05-20-finance-tooling-c6-c7.md`». + +- [ ] **Step 5: lefthook + commit** + +```bash +git add -- docs/Plugin_stack_rules_v1.md cspell-words.txt +git commit -m "docs(psr): R10.1 finance-tooling #61-#63 (PSR_v1 v3.18) + +Co-Authored-By: Claude Opus 4.7 (1M context) " -- docs/Plugin_stack_rules_v1.md cspell-words.txt +``` + +Expected: PASS. + +### Task 7: Pravila §13.2 + version + +**Files:** + +- Modify: `docs/Pravila_raboty_Claude_v1_1.md` + +- [ ] **Step 1: pre-flight sync.** + +- [ ] **Step 2: §13.2 — добавить абзац** (после абзаца «Off-phase authoring-tooling + dev-support», перед `### 13.3`) + +```markdown +**Off-phase finance-tooling (C6+C7, v1.34, 20.05.2026):** Инструменты разделов C6 «Финансы — биллинг и тарификация» и C7 «Финансы — бухгалтерия и налоги» карты — #61 `finance` plugin (Tooling §4.36; marketplace `finance@knowledge-work-plugins`, Anthropic Verified, 9 скилов; homed C7, cross-ref C6; РФ-применимость: ✅ reconciliation/variance, ⚠️ US-GAAP-скилы частично, ❌ SOX-скилы not-applicable, warehouse-MCP DEFERRED), #62 `billing-audit` (Tooling §4.37; self-authored project-скил `.claude/skills/billing-audit/` — денежные инварианты биллинга C6: сохранение суммы bcmath, идемпотентность, tier-резолюция, дрейф reconcile, charge_source), #63 `ru-tax-accounting` (Tooling §4.38; self-authored project-скил `.claude/skills/ru-tax-accounting/` — РСБУ/НК РФ контекст C7: НДС/УСН, налоговая база, выгрузки бухгалтеру; закрывает РФ-gap US-плагина). Плюс reuse-классификация существующих узлов в C6/C7 через `NODE_SECTION_SECONDARY` (Boost/Pest/Larastan/Sentry/Redis/PM metrics-review/data-scientist/operations/process-*/context7) — без новых номеров. **Пятнадцатая** off-phase подкатегория. Off-phase, не UI → вне R6.0/R6.1/R14 PSR_v1. self-authored скилы billing-audit/ru-tax-accounting **линтуются** (не в ignorePaths, LINT1). Границы — ADR-012 (граница C6↔C7: начисление клиенту vs учёт/налоги компании; FIN1–FIN8). Регулируется PSR_v1 R10.1 Блок 1 (finance plugin) + note (2 self-authored скила). Установлено 20.05.2026 на ветке `worktree-finance-tooling-c6-c7`; план `docs/superpowers/plans/2026-05-20-finance-tooling-c6-c7.md`. +``` + +- [ ] **Step 3: §0 cross-ref + §10 changelog + версия-шапка** Pravila v1.33 → **v1.34** (формат как соседние записи; +строку в §10 changelog-таблице). + +- [ ] **Step 4: lefthook + commit** + +```bash +git add -- docs/Pravila_raboty_Claude_v1_1.md cspell-words.txt +git commit -m "docs(pravila): §13.2 finance-tooling abzац (Pravila v1.34) + +Co-Authored-By: Claude Opus 4.7 (1M context) " -- docs/Pravila_raboty_Claude_v1_1.md cspell-words.txt +``` + +### Task 8: Роутер — routing-off-phase.md + router-procedure.md + +**Files:** + +- Modify: `docs/routing-off-phase.md` +- Modify: `docs/router-procedure.md` + +- [ ] **Step 1: pre-flight sync.** + +- [ ] **Step 2: routing-off-phase.md — +3 строки routing-таблицы** (в раздел «Таблица routing», после строки context7 #60) + +```markdown +| Аудит денежной корректности биллинга (списание/тариф/баланс/дрейф/charge_source) | **billing-audit** (project-скил) | #62 | finance-tooling | C6; ≠ process-*/D3/ru-tax (ADR-012) | +| РСБУ/НК РФ контекст: НДС/УСН, налоговая база, выгрузка бухгалтеру | **ru-tax-accounting** (project-скил) | #63 | finance-tooling | C7; ≠ finance plugin/D1/D2 (ADR-012) | +| Сверка счетов / variance-анализ / US-GAAP-отчётность / проводки | **finance plugin** | #61 | finance-tooling | C7; SOX not-applicable, warehouse-MCP DEFERRED (ADR-012) | +``` + +- [ ] **Step 3: routing-off-phase.md — +связка L13** (в раздел «Канонические связки», после L12) + +```markdown +| L13 | `billing-audit` (#62) + `Pest` (#18) + `Boost` (#10) + `Sentry`/`Redis` (#34/#35) → `ru-tax-accounting` (#63) | Финансовая цепочка: аудит денежных инвариантов кода (billing-audit) тестами (Pest) на моделях (Boost) с runtime-фактами (Sentry/Redis) → перевод выверенной выручки в учётно-налоговый контекст (ru-tax). C6→C7. Граница — ADR-012. | +``` + +- [ ] **Step 4: routing-off-phase.md — scope + версия** Обновить scope-диапазон «Tooling §4.11–§4.35» → «§4.11–§4.38»; версию v1.1 → **v1.2** (запись: «+3 строки finance-tooling #61-#63 + связка L13 + scope →§4.38; ADR-012»). + +- [ ] **Step 5: router-procedure.md — changelog-touch** Добавить в Changelog строку: + +```markdown +- **v1.1 (2026-05-20)** — finance-tooling узлы #61-#63 добавлены в реестр Tooling §4.36-§4.38 (читаются step 3) и routing-off-phase.md (связка L13). Структурных правок процедуры нет. ADR-012. +``` + +И обновить `**Status:**` строку версией v1.1. + +- [ ] **Step 6: lefthook + commit** + +```bash +git add -- docs/routing-off-phase.md docs/router-procedure.md cspell-words.txt +git commit -m "docs(router): finance-tooling routing rows + L13 chain (routing-off-phase v1.2) + +Co-Authored-By: Claude Opus 4.7 (1M context) " -- docs/routing-off-phase.md docs/router-procedure.md cspell-words.txt +``` + +### Task 9: CLAUDE.md (прямой Edit — worktree-эксцепшн §5 п.10) + +**Files:** + +- Modify: `CLAUDE.md` + +- [ ] **Step 1: pre-flight sync.** + +- [ ] **Step 2: §3.3 — добавить 3 строки** (после #60 context7, формат однострочного индекса): + +```markdown +| 61 | Финансы/бухгалтерия (сверка, variance, US-GAAP, проводки) — *off-phase* | **finance plugin** | off-phase, finance-tooling — Tooling §4.36; homed C7, cross-ref C6; SOX not-applicable РФ | +| 62 | Аудит денежной корректности биллинга (инварианты) — *off-phase* | **billing-audit** | off-phase, finance-tooling — Tooling §4.37; project-скил, раздел C6 | +| 63 | РСБУ/НК РФ контекст (НДС/УСН, налоговая база) — *off-phase* | **ru-tax-accounting** | off-phase, finance-tooling — Tooling §4.38; project-скил, раздел C7 | +``` + +- [ ] **Step 3: §0 cross-refs** Pravila v1.33→**v1.34** / PSR_v1 v3.17→**v3.18** / Tooling Прил.Н v2.17→**v2.18**. + +- [ ] **Step 4: §6 +абзац** (сверху) «2026-05-20 finance-tooling integration (C6+C7)» — кратко: 3 узла (#61 finance plugin homed C7 / #62 billing-audit C6 / #63 ru-tax-accounting C7) + reuse + расширенная нормативка (роутер L13 + наблюдатель 9-атрибутные блоки) + ADR-012; разделы C6/C7 карты непусты; worktree. + +- [ ] **Step 5: §9 +entry** v2.20 → **v2.21** с описанием правок (§3.3 +#61/#62/#63, §0 cross-refs, §6, шапка). Обновить шапку версии. + +- [ ] **Step 6: lefthook + commit** + +```bash +git add -- CLAUDE.md cspell-words.txt +git commit -m "docs(claude-md): §3.3 finance-tooling #61-#63 (CLAUDE.md v2.21) + +Co-Authored-By: Claude Opus 4.7 (1M context) " -- CLAUDE.md cspell-words.txt +``` + +### Task 10: Карта — automation-graph-data.js + automation-graph.html + +**Files:** + +- Modify: `docs/automation-graph-data.js` +- Modify: `docs/automation-graph.html` + +- [ ] **Step 1: NODES — добавить 3 узла** (в массив `NODES`, рядом со skills_proj-кластером) + +```javascript + { id: 'finance_plugin', label: 'finance\n(plugin)', group: 'plugins', size: 20, ring: 2, ...pos(2, 200) }, + { id: 'billing_audit', label: 'billing-audit\n(skill)', group: 'skills_proj', size: 18, ring: 3, ...pos(3, 397) }, + { id: 'ru_tax', label: 'ru-tax-accounting\n(skill)', group: 'skills_proj', size: 18, ring: 3, ...pos(3, 407) }, +``` + +- [ ] **Step 2: NODE_SECTION — добавить привязки** (в объект `NODE_SECTION`, новой секцией-комментарием) + +```javascript + // finance-tooling C6+C7 (20.05.2026) — разделы «Финансы» + finance_plugin: 'C7', billing_audit: 'C6', ru_tax: 'C7', +``` + +- [ ] **Step 3: NODE_SECTION_SECONDARY — finance cross-ref + reuse** (в объект `NODE_SECTION_SECONDARY`) + +```javascript + // finance-tooling C6+C7 (20.05.2026) — cross-ref + reuse-классификация + finance_plugin: ['C6'], + mcp_boost: ['C6', 'C7'], ag_pest: ['C6', 'C7'], lh_larastan: ['C6'], + mcp_sentry: ['C6'], mcp_redis: ['C6'], product_mgmt: ['C6'], + data_scientist: ['C6', 'C7'], ops_plugin: ['C6', 'C7'], context7: ['C6'], + process_modeling: ['C6'], process_analysis: ['C6'], +``` + +> Примечание: если у узла уже есть запись в `NODE_SECTION_SECONDARY` (напр. `mcp_boost: ['A3']`, `context7: ['A3']`, `ag_pest: ['A3']`, `process_modeling: ['C10']`, `process_analysis: ['C10']`, `product_mgmt: ['C10']`) — НЕ перезаписывать, а **дополнить** массив (`mcp_boost: ['A3','C6','C7']` и т.д.). Сверить с фактическим содержимым перед правкой. + +- [ ] **Step 4: EDGES — добавить рёбра** (в массив `EDGES`, через хелпер `E(...)`) + +```javascript + E('tooling', 'finance_plugin', '§4.36 #61 — реестр'), + E('tooling', 'billing_audit', '§4.37 #62 — реестр'), + E('tooling', 'ru_tax', '§4.38 #63 — реестр'), + E('billing_audit', 'ag_pest', 'аудит инвариантов\nчерез тесты'), + E('mcp_boost', 'billing_audit','модели биллинга'), + E('finance_plugin', 'ru_tax', 'РФ-специфика поверх\nUS-механики (ADR-012)'), + E('billing_audit', 'ru_tax', 'выручка C6 →\nналог.база C7'), +``` + +- [ ] **Step 5: NODE_DETAILS (`automation-graph.html`) — `nd()` для 3 узлов** (рядом с finance-кластером, формат как `discovery_interview`) + +```javascript + finance_plugin: nd( + 'Marketplace-плагин (Anthropic): финансы/бухгалтерия — сверка, variance-анализ, US-GAAP-отчётность, закрытие периода, проводки. 9 скилов.', + 'При учётно-финансовой работе C7 (и сверке/variance для C6). РФ: reconciliation/variance ✅; US-GAAP-скилы ⚠️; SOX ❌; warehouse-MCP DEFERRED.', + 'plugin finance@knowledge-work-plugins (enabledPlugins). Категория finance-tooling, homed C7. Не UI → вне R6/R14. Tooling §4.36 #61, CLAUDE.md §3.3 #61, ADR-012.', + [{ name: 'Tooling', cond: '§4.36 #61 — реестр' }], + [{ name: 'FIN2', cond: 'SOX not-applicable РФ' }, { name: 'FIN3', cond: 'граница с operations #51' }], + [{ name: 'ru-tax-accounting', cond: 'РФ-специфика поверх US-механики' }] + ), + billing_audit: nd( + 'Self-authored скил: аудит денежных инвариантов биллинга Лидерры — сумма (bcmath), идемпотентность, tier-резолюция, дрейф reconcile, charge_source.', + 'При правке/ревью кода Billing — проверить денежную корректность начисления.', + 'Свой project-скил .claude/skills/billing-audit/ (линтуется, LINT1). Не UI → вне R6/R14. Tooling §4.37 #62, CLAUDE.md §3.3 #62, ADR-012.', + [{ name: 'Tooling', cond: '§4.37 #62 — реестр' }], + [{ name: 'FIN5', cond: 'объект ≠ process-*/D3/ru-tax' }], + [{ name: 'Pest', cond: 'инварианты через тесты' }, { name: 'Boost', cond: 'модели биллинга' }] + ), + ru_tax: nd( + 'Self-authored скил: РСБУ/НК РФ контекст для выручки Лидерры — НДС/УСН, налоговая база, налогооблагаемое событие, выгрузки бухгалтеру.', + 'При «как учесть/обложить по РФ» — перевод billing-выручки (выход C6) в учётно-налоговый контекст C7.', + 'Свой project-скил .claude/skills/ru-tax-accounting/ (линтуется, LINT1). Закрывает РФ-gap US-плагина finance. Не UI → вне R6/R14. Tooling §4.38 #63, CLAUDE.md §3.3 #63, ADR-012.', + [{ name: 'Tooling', cond: '§4.38 #63 — реестр' }], + [{ name: 'FIN6', cond: '≠ finance plugin/billing-audit/D1/D2' }], + [{ name: 'billing-audit', cond: 'выручка C6 → налог.база C7' }, { name: 'finance plugin', cond: 'US-механика' }] + ), +``` + +- [ ] **Step 6: NODE_META — добавить 3 записи** (`automation-graph.html`, рядом с discovery_interview) + +```javascript + finance_plugin: { since: '20.05.2026', changed: '—', uses: 0, usesSrc: 'новый узел' }, + billing_audit: { since: '20.05.2026', changed: '—', uses: 0, usesSrc: 'новый узел' }, + ru_tax: { since: '20.05.2026', changed: '—', uses: 0, usesSrc: 'новый узел' }, +``` + +- [ ] **Step 7: Обновить версии-метки + счётчики META** В `automation-graph-data.js`/`automation-graph.html`: метку узла `claude_md` (`CLAUDE.md v2.20` → `v2.21`); счётчики «узлов/рёбер» в шапке/META (узлов +3, рёбер +7) — сверить фактические числа перед правкой; комментарий-счётчик «Покрывает все N узлов» в `NODE_SECTION` (+3). + +- [ ] **Step 8: JS-smoke (карта парсится, секции покрыты, рёбра валидны)** + +Run: + +```bash +node -e " +const fs=require('fs'); const vm=require('vm'); +const src=fs.readFileSync('docs/automation-graph-data.js','utf8'); +const sandbox={module:{exports:{}},exports:{}}; vm.createContext(sandbox); +vm.runInContext(src + '\n;globalThis.__d={NODES,EDGES,NODE_SECTION,NODE_SECTION_SECONDARY,SECTIONS};', sandbox); +const d=sandbox.__d||globalThis.__d; +const ids=new Set(d.NODES.map(n=>n.id)); +const miss=d.NODES.filter(n=>!d.NODE_SECTION[n.id]).map(n=>n.id); +const badEdge=d.EDGES.filter(e=>!ids.has(e.from)||!ids.has(e.to)).map(e=>e.from+'->'+e.to); +const c6=Object.entries(d.NODE_SECTION).filter(([,s])=>s==='C6').length; +const c7=Object.entries(d.NODE_SECTION).filter(([,s])=>s==='C7').length; +console.log('nodes',d.NODES.length,'edges',d.EDGES.length,'no-section',JSON.stringify(miss),'bad-edges',JSON.stringify(badEdge),'C6',c6,'C7',c7); +" +``` + +Expected: `no-section []`, `bad-edges []`, `C6 ≥1`, `C7 ≥2` (finance_plugin+ru_tax), nodes/edges +3/+7 от прежних. +> Если data-файл не экспортирует через `module.exports` и `vm` не видит const — fallback: открыть `docs/automation-graph.html` через Playwright MCP, проверить 0 console-ошибок + screenshot; плюс grep-ассерты: `grep -c "finance_plugin\|billing_audit\|ru_tax" docs/automation-graph-data.js` → ≥9 (3 NODES + 3 NODE_SECTION + рёбра). + +- [ ] **Step 9: lefthook + commit** + +```bash +git add -- docs/automation-graph-data.js docs/automation-graph.html cspell-words.txt +git commit -m "feat(map): finance-tooling — populate C6+C7 (+3 nodes, +7 edges) + +Co-Authored-By: Claude Opus 4.7 (1M context) " -- docs/automation-graph-data.js docs/automation-graph.html cspell-words.txt +``` + +### Task 11: Контролёры наблюдателя + финальная регрессия + push + +- [ ] **Step 1: Прогон brain-контролёров C1/C2 на новых узлах** + +Run: + +```bash +node tools/l1-watcher.mjs 2>&1 | tail -20 || true +node tools/cross-ref-checker.mjs 2>&1 | tail -20 || true +``` + +(точные имена скриптов — из `lefthook.yml` jobs 11-14; если иначе — взять оттуда). Expected: новые узлы (#61-#63) не вносят НОВЫХ name@source drift / cross-ref-разрывов. Pre-existing drift (известный, WARN-only) — допустим. Зафиксировать вывод. + +- [ ] **Step 2: Финальная регрессия (docs/skills epic — quick)** + +Run: `/regression quick` (markdownlint + cspell + при наличии PHP — pint/larastan). Expected: GREEN. Записать canonical status line. + +- [ ] **Step 3: lychee на изменённых .md (pre-push gate)** + +Run: `npx lefthook run pre-push 2>&1 | tail -30` (или `npm run links`). Expected: 0 broken на изменённых docs. gitleaks-full-history — в составе pre-push. + +- [ ] **Step 4: Push** + +Run: + +```bash +git fetch origin && git log HEAD..origin/main --oneline +git push origin worktree-finance-tooling-c6-c7:main +``` + +Expected: FF-push. Если origin/main ушёл вперёд — rebase на свежий origin/main, повтор JS-smoke, push. + +- [ ] **Step 5: verification-before-completion** + +Invoke superpowers:verification-before-completion: подтвердить разделы C6/C7 непусты (JS-smoke вывод), 3 узла во всех 8 артефактах, регрессия GREEN, push выполнен (`git log -1 origin/main`). + +--- + +## Self-Review (выполнено при написании плана) + +**Spec coverage:** §4 слои → Tasks 1-3 (скилы/плагин) + Tasks 4-10 (нормативка/карта/ADR). §5 узлы → Tasks 1/2/3 + §4.36-38 (Task 5). §6 reuse → Task 10 Step 3. §7 граница → ADR Task 4. §8 нормативка (8 артефактов) → Tasks 4-10 (Tooling/PSR/Pravila/CLAUDE/routing-off-phase/router-procedure/ADR/observer-блоки в Task 5 + контролёры Task 11). §9 карта → Task 10. §10 конфликт-аудит → ADR Task 4. §11 изоляция → header + pre-flight в каждом Task. §12 верификация → Task 11. Покрытие полное. + +**Placeholder scan:** нет TBD/TODO; весь контент скилов/нормативки/ADR/карты приведён дословно. Счётчики (60→63, узлы/рёбра) с явным указанием «сверить факт перед правкой» — не placeholder, а защита от дрейфа. + +**Type consistency:** node-id единообразны (`finance_plugin`/`billing_audit`/`ru_tax`) во всех Tasks (10 NODES/SECTION/EDGES/DETAILS/META); номера #61/#62/#63 и §4.36/§4.37/§4.38 согласованы между Tooling/PSR/Pravila/CLAUDE/routing/ADR; версии (Tooling v2.18 / PSR v3.18 / Pravila v1.34 / CLAUDE v2.21 / routing v1.2 / router-procedure v1.1) согласованы во всех cross-ref.