Commit Graph

7 Commits

Author SHA1 Message Date
Дмитрий 887abf444e rebrand(v8.5→Лидерра): дизайн-handoff Платона v8 Forest + Лидпоток→Лидерра
Получен handoff-пакет liderra_v8_handoff/ от дизайнера Платона
(kpd9363@gmail.com) от 07.05.2026 — v8 Forest. Заказчик 08.05 решил
применить только в части дизайна, имени, логотипа. Функционал, состав
страниц и правила (CTO-11, click-wrap, SSO break-glass, 14 статусов
воронки) — без изменений (источник — ТЗ v8.5/schema v8.5).

Что сделано:

- Массовая замена Лидпоток→Лидерра (с учётом падежей: Лидерры/Лидерре)
  в 33 файлах (449 вхождений) — все .md/.sql/.json/.toml/.yml/.txt/.html,
  кроме исторических упоминаний внутри liderra_v8_handoff/
- Удалён docs/brandbook.md v1.1 — заменён на BRANDBOOK_v2.md из handoff
- Скопированы 13 концептов liderra_v8_handoff/concepts/v8_*.html в
  web/v8/. Удалены старые web/01-login.html, 02-dashboard.html,
  03-deals.html, index.html (палитра v1.1 deprecated)
- CLAUDE.md v1.0→v1.1: §0 (BRANDBOOK_v2 + DEVELOPER_HANDOFF в источниках),
  §2 (палитра Forest, Inter+JBM, Lucide), §5 п.6 (anti-pattern Inter
  снят — в Forest Inter наш основной шрифт), §6 (13 концептов в web/v8/)
- Реестр Открытые_вопросы_v8_3.md v1.12→v1.13: добавлена запись о
  ребрендинге + 4 точечных расхождений handoff vs ТЗ (статусы воронки,
  click-wrap чекбоксы, SSO fallback, axe violations)
- package.json/package-lock.json: name lidpotok→liderra

4 расхождения handoff vs ТЗ (НЕ применены, источник истины — ТЗ/schema):

1. 14 «обобщённых» статусов в BRANDBOOK_v2 §3.6 ≠ 14 slug'ов в
   schema.sql:2076 (совпадает 2 из 14: «Переговоры», «Оплачено»).
   Источник — schema/ТЗ §6.4 (реселлерская модель из аудита crm.bp-gr.ru,
   6 системных + 8 настраиваемых статусов).
2. 3-й click-wrap в v8_login.html («маркетинг-опционально») ≠ ТЗ §1.5/§4.1
   («согласие на ПДн», обязательное, OPEN-Ж-3).
3. SSO в v8_admin.html («локальный 2FA fallback») ≠ ТЗ OPEN-И-13
   (break-glass super_admin, локальный 2FA выключен).
4. Заявление «axe-core 4.10.2 — 0 violations» в README handoff — локально
   Pa11y 9.1.1 + axe нашёл 81 violation на 10/13 HTML (преимущественно
   color-contrast на декоративных separator'ах с --ink-disabled).
   Чисто: settings/errors/palette_options.

Что НЕ включено в коммит:
- лендинг/TZ_landing_v1_0.md — untracked, не моя работа в этой сессии
- .tmp/ — gitignored

Что осталось (для следующих сессий):
- Возможное переименование GitHub-репо CoralMinister/lidpotok → liderra
  (отдельное решение заказчика)
- Опционально: обратная связь Платону по 4 расхождениям handoff vs ТЗ

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 07:11:58 +03:00
Дмитрий 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