038a884daf
Закрывает все 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>