Files
portal/db
Дмитрий 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
..