# 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) <noreply@anthropic.com>" -- .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) <noreply@anthropic.com>" -- .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) <noreply@anthropic.com>" -- 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) <noreply@anthropic.com>" -- 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) <noreply@anthropic.com>" -- 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) <noreply@anthropic.com>" -- 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) <noreply@anthropic.com>" -- 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) <noreply@anthropic.com>" -- 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) <noreply@anthropic.com>" -- 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.
