e7c075919a
Точечная in-place синхронизация SQL/PHP-примеров webhook handler'а в narrative
ТЗ под двустадийную dedup-логику schema v8.6 (CTO-17). 8 разделов, без bump'а
версии файла (как для L13-гигиены 3a9ed71):
- §2.4 Поток данных от Webhook до сделки — описание воркера
- §5.5 ProcessWebhookJob (PHP-код) — Deal::updateOrCreate() заменён на
DB::selectOne с INSERT INTO webhook_dedup_keys ON CONFLICT RETURNING
is_new + раздельные ветки Deal::create() / Deal::where(...)->update()
- §5.6 Таблица крайних случаев (дубль vid)
- §6.5 Идемпотентность импорта (SQL-пример)
- §11 DDL deals — UNIQUE INDEX → INDEX, добавлен полный DDL
webhook_dedup_keys (PK, composite FK на deals(id, received_at)
ON DELETE CASCADE, RLS USING + WITH CHECK)
- §20.12.3 Связь с биллингом тенанта — поток в транзакции 4→5 шагов
- §21.1 Списание баланса при дублях
- §27.1 Итог по идемпотентности
Не трогалось намеренно:
- line 302 (глоссарий «Idempotency» — общая концепция UPSERT)
- line 1238 (диаграмма CSV-импорта — обобщённый текст)
- line 1180 (маппинг колонки id → deals.source_crm_id)
Реестр Открытые_вопросы v1.19 → v1.20 (новый блок «закрыт техдолг»).
Оперативная карта CLAUDE.md v1.10 → v1.11.
Линты: markdownlint 0 errors, cspell 0 issues на изменённых файлах,
lychee 115/115 OK на CLAUDE.md + 2 narrative.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>