Commit Graph

6 Commits

Author SHA1 Message Date
Дмитрий 038a884daf schema(v8.5): реализация 27 решений аудита C — DDL + CHANGELOG + метрики
Закрывает все 27 решений из Открытые_вопросы v1.12 §13.10 на уровне
schema.sql. Narrative-обновление (§10/§12.5.5/§14/§17/§19.10/§22/§23.10/
Прил.И) — отдельным коммитом.

Метрики v8.4 → v8.5:
- 53 → 54 таблицы (+1: project_user_assignments)
- 86 → 91 индекс (+5)
- 34 → 35 RLS-политик (+1) + WITH CHECK на 2 существующих
- 34 → 35 ENABLE RLS (+1)
- 3 → 4 роли (+crm_audit_writer)
- 0 → 12 триггеров (5×2 audit append-only + 1 report_jobs export
  + 1 deals lead_score)
- 0 → 4 функции (audit_chain_hash, audit_block_mutation,
  report_jobs_log_export, calc_lead_score)
- +26 колонок: suppliers.quality_score; saas_admin_users (sso_provider,
  is_break_glass); impersonation_tokens (second_approver_id,
  second_approval_at); tenants (api_key_limit, telegram_bot_token);
  projects (assignment_strategy, ttfr_target_minutes); users
  (telegram_user_id); deals (assigned_at, escalated_count, duplicate_of_id,
  utm_source/medium/campaign/content, region_code, city,
  time_in_form_seconds, lead_score); +log_hash на 5 audit-таблицах
- ALTER api_keys.expires_at SET NOT NULL DEFAULT NOW()+365d
- REVOKE ALL на 6 saas-таблицах от crm_app_user

P0 (8) разблокировали триггер фазы 1 (composer create-project):
- Биз-17 (manual routing), Биз-18 (TTFR 15м), Биз-19 (24ч-дедуп без списания)
- CTO-13 (e2e SET LOCAL+PgBouncer тест в спринте 1; план в narrative)
- OPEN-И-13 (OIDC+JIT+break-glass), OPEN-И-14 (WITH CHECK + REVOKE)
- OPEN-И-15 (append-only audit + hash chain + crm_audit_writer)
- OPEN-И-16 (Sentry whitelist+regex; конфигурация в Laravel, не DDL)

Self-review: 0 orphan-FK, 0 дубликатов CREATE TABLE, метрики совпадают
с grep'ами; markdownlint+cspell чистые.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 17:46:46 +03:00
Дмитрий 574154bcf9 fix(schema+narrative): B-5 — schema P1 + синхронизация метрик
schema.sql v8.4 (hotfix Z.5.3-Z.5.6):
- outbound_webhook_subscriptions.events: убран DEFAULT '[]' (конфликт
  с CHECK jsonb_array_length>0). NOT NULL остался — приложение должно
  явно передать список событий ≥1.
- deal_tag_pivot: добавлены ENABLE RLS + CREATE POLICY tenant_isolation
  через JOIN на deal_tags(tenant_id) — паттерн как у saas_invoice_items.
- Шапка schema.sql:107-108: «33 политики / 34 защищённых» → «34/34, 1:1»
  (после правки выше). CHANGELOG_schema.md: расширена запись Z.5
  (Z.5.3-Z.5.6) с финальными метриками.

narrative v8.4:
- §1.4, §3.2, §7.1, §22.6, §27 «33 политики на 34» (5 мест) → «34/34,
  1:1». Шапка «Что нового в v8.4»: +3 RLS вместо +2 (с учётом hotfix).

Прил. Б+В:
- Шапка ссылалась на «schema.sql v8.3, 51 таблица» → актуально:
  «schema.sql v8.4, 53/86/34/34, при расхождении приоритет за schema.sql».
  Добавлены изменения v8.4 в перечень того, что не отражено в ER.

cspell-words.txt: добавлено «партиционированной» (склонение, нужно для
CHANGELOG Z.5.4).

Метрики schema.sql v8.4: 65 CREATE TABLE (53+12), 86 индексов,
34 RLS-политики, 34 ENABLE RLS, 3 роли БД.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 00:19:20 +07:00
Дмитрий 7619ac0345 fix(schema+package): D-блок P0 — forward FK + битые partial-индексы + npm links
- schema.sql: forward FK saas_admin_sessions.impersonating_tenant_id и
  impersonation_tokens.tenant_id → tenants(id) вынесены в ALTER TABLE
  после CREATE TABLE tenants (миграция с нуля больше не падает на
  forward-reference).
- schema.sql: partial-индексы idx_saas_admin_sessions_expires и
  idx_sessions_expires переведены на полное поле expires_at — PostgreSQL
  не разрешает NOW() в предикате частичного индекса (STABLE, не IMMUTABLE).
- package.json:10 (links): lychee → bin\lychee.exe — Windows-cmd корректно
  резолвит относительный путь только через backslash.
- CHANGELOG_schema.md: запись Z.5 (hotfix v8.4) с метриками 53/86/33/34.

Метрики schema.sql v8.4 не меняются. Self-review §8 CLAUDE.md пройден.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 23:15:45 +07:00
Дмитрий c8db9a26c4 docs(narrative): v8.4 финал (§23.10 + 13/13 + rename _v8_3 → _v8_4)
- §23.10 Админка SaaS: расширен с 5 до 10 подсекций — Биз-16
  (колонка «Желаемое × факт сегодня» с цветовым кодированием),
  Ю-2 (поставщики, дашборд маржи, сверка счетов), OPEN-Д-5/И-1
  (incidents_log: 8 типов × 4 severity, 24ч SLA уведомления РКН для
  data_breach по 152-ФЗ ст.18.1 ч.3.1), Прил. Д (workflow обращений
  субъектов ПДн с 30-дневным SLA), таблица преимуществ vs оригинал.
- Шапка narrative: убрано «in progress», блок «Что нового в v8.4»
  дополнен §23.10. Подвал: имя файла v8.4.
- Переименование: CRM_bp-gr_Инструкция_v8_3.md → _v8_4.md.
- Кросс-ссылки обновлены: CLAUDE.md (§0/§2/§6/§8 — версии, метрики
  схемы 53/86/33, счётчик прототипов 3/8), README.md (версии, статусы
  прототипов, репо CoralMinister), db/schema.sql, db/CHANGELOG_schema.md,
  web/index.html.
- .lychee.toml: exclude приватного github.com/CoralMinister/lidpotok
  (404 анонимно — норма).
- Plan_narrative_v8_4.md удалён (план v8.4 выполнен полностью, 13/13).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 19:14:53 +07:00
Дмитрий a05b09a025 schema(v8.4)+docs(narrative): §7 + outbound_webhook_* DDL
schema.sql v8.3 → v8.4 (закрывает тех-долг §19.10):
- +outbound_webhook_subscriptions (15 полей: target_url, secret_hash,
  secret_prefix, events JSONB, custom_headers, is_active, paused_at,
  consecutive_failures, …) + 2 индекса
- +outbound_webhook_deliveries (16 полей с retry-флоу: attempt_number 1-7,
  status pending/success/failed/permanently_failed, scheduled_at,
  next_retry_at, response_body, …) + 3 индекса
- +RLS-политики tenant_isolation для обеих таблиц
- Шапка обновлена: 51→53 таблицы, 81→86 индексов, 31→33 RLS,
  32→34 ENABLE RLS

db/CHANGELOG_schema.md: новая запись §Z (v8.3 → v8.4) с обоснованием,
сводной таблицей, описанием новых таблиц/индексов, разъяснением что
crm_connections/crm_field_mappings отложены до спринта 14-15 (amoCRM).

narrative §7: синхронизация с фактическим schema.sql v8.4.
- §7.1: метрики обновлены (53/12/86/33/34), карта таблиц расширена
  до полного списка (включая ранее отсутствовавшие
  tenant_custom_domains, user_recovery_codes, user_sessions,
  project_suppliers, project_limit_adjustments, incidents_log,
  report_jobs, document_sequences, outbound_webhook_*)
- §7.3: DDL deals — удалены reminder_text/reminder_at/idx_deals_reminder
  (синхронизация с v8.3, партия 12.2.5). Добавлены DDL reminders v8.3,
  outbound_webhook_subscriptions, outbound_webhook_deliveries

Шапка narrative: блок «Что нового в v8.4» обновлён (+§7).
План v8.4: 8/13  (было 7/13). cspell-words.txt: +воркер, +деплой формы.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 17:35:18 +07:00
Дмитрий b5cda8886d Restructure: split files into docs/web/db folders 2026-05-06 01:39:59 +07:00