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>
- 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>