Files
portal/docs/Plan_narrative_v8_4.md
T
Дмитрий 63b45217dc docs(narrative): v8.4 +§22 (CSP + prompt injection + антипаттерны)
§22.2 Транспортный уровень: CSP-строка расширена до полной политики
(script-src без 'unsafe-inline', object-src 'none', frame-ancestors
'none', report-uri /csp-report).

§22.11 «Защита от prompt injection в DOM» (новый, 4 уровня):
- 22.11.1 — полная CSP-политика с 13 директивами
- 22.11.2 — CI-линтер запрещает в DOM элементы с ID/class
  на префиксы claude-/gpt-/agent-/ai-
- 22.11.3 — DOMPurify-конфиг для всех v-html
- 22.11.4 — методология аудита third-party скриптов
  (31 keyword grep + SRI-хеши + ежеквартальный re-audit)
- 22.11.5 — что НЕ делаем (не блокируем легитимных AI-агентов)

Контекст — атака `claude-agent-stop-container/glow-border/animation-styles`,
найденная во ВСЕХ страницах crm.bp-gr.ru (партии 10, 12-15 аудита).

§22.12 «Антипаттерны оригинала» (новый):
- 22.12.1 — защита формы смены пароля (vs пароль в `<input type="text">`
  оригинала, партия 14.3.4)
- 22.12.2 — защита форм интеграций (vs API credentials в `<input type="text">`
  всех 5 карточек оригинала, партия 15.2.3)
- 22.12.3 — code review checklist (7 пунктов)

Шапка narrative обновлена. План v8.4: 7/13  (было 6/13).
cspell-words.txt: +санитизация, +санитизируются.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 14:32:13 +07:00

18 KiB
Raw Blame History

План переписывания narrative v8.3 → v8.4

Версия: 1.0 от 06.05.2026 Назначение: компактный план изменений в CRM_bp-gr_Инструкция_v8_3.md для перехода v8.3.1 → v8.4. Не сам narrative — только список «что менять, где взять источник». Адресат: Claude в следующей(их) сессии(ях) при правке narrative.


0. Контекст

Что накопилось со 04.05.2026 (v8.3.1):

  • 30 продуктовых решений сессии 04.05.2026 (CTO-1..11, Биз-1..9, Ю-1/6/7, Диз-2/4, DO-1/3/5, OPEN-К-2..8, OPEN-Д-1/5, OPEN-Ж-3, OPEN-И-1/2).
  • 4 решения сессии 06.05.2026 (Прил. Н реестр tooling, корневой CLAUDE.md, правила работы Claude v1.2).
  • 11 решений по дефолтам сессии 06.05.2026 (Биз-6/10..16, OPEN-К-1/7, OPEN-И-12 — см. реестр v1.10).
  • Результаты аудита crm.bp-gr.ru — Прил. М v1.1 (15 партий, в т. ч. партии 1215 от 05.05.2026).
  • 5 миграций schema.sql (v8.1 → v8.2 → v8.3 — см. CHANGELOG_schema.md).
  • Брендбук v1.1 (новая палитра Teal, шрифты Inter + JetBrains Mono, сетка 4px) — закрывает Диз-2.

Источник истины для каждого изменения — указан в колонке «Источник» ниже. Дублирования избегать — narrative ссылается на приложение, а не пересказывает его.


1. 13 разделов под правку

Прогресс на 06.05.2026 (вечер 2): 7 из 13 готово (§1, §14, §17, §18.4, §19.10, §22, §26).

# § narrative Что менять Источник Объём Статус
1 §1 Обзор системы Добавить 6 конкурентных преимуществ (см. ниже §2.1). Обновить §1.5 «Как клиент попадает в систему» — упомянуть webhook/manual/CSV как 3 формата ingress. Прил. М §11.4 малый 06.05
2 §5 Источник данных — Webhook Уточнить §5.1 — что webhook — основной канал, manual + CSV дополнительные. Связь с §6 (CSV-импорт) как опциональный модуль. Outbound webhook как уникальное преимущество (7 линий доказательств). Прил. М §11.4 п.1, §13 (партия 15) средний
3 §7 Сущности и схема БД Добавить новые сущности: suppliers, project_suppliers, supplier_lead_costs, supplier_invoices (Ю-2); impersonation_tokens (Ю-1); saas_admin_users, saas_admin_audit_log (Прил. Г); pd_subject_requests (Прил. Д); incidents_log (OPEN-Д-5/И-1); crm_connections, crm_field_mappings (OPEN-И-2/11); reminders v8.3 (Биз-10); tenants.desired_daily_numbers (Биз-16); 5 новых полей в projects (daily_limit_target, effective_daily_limit_today, effective_limit_calculated_at, region_mask + region_mode, delivery_days_mask) — Прил. М §3.2; capabilities в suppliers (channel, supports_sender_name, supports_keyword, supports_csv_upload, supports_domains_list) — Прил. М §3.5.2. + outbound_webhook_subscriptions, outbound_webhook_deliveries (тех-долг §19.10 — добавлено 06.05). Обновить ER-карту в §7.2 — ссылка на Прил. Б+В v1.1. Прил. М §3, schema.sql v8.3 большой
4 §8 Воронка продаж и статусы Уточнить §8.5 «Кастомизация» — 8 системных + 6 настраиваемых, цвета через lead_statuses.color_hex, иконки через lead_statuses.icon_mdi (если внести). Free state machine — переход в любой статус (CTO-2). ТЗ §8.5, Прил. В средний
5 §9 Мои Проекты Расширить §9.2 «Структура таблицы» — добавить колонки: целевой лимит / эффективный лимит / регионы / дни обслуживания. §9.4 — действия над проектом: настройка регионов и расписания. §9.5 «Бизнес-правило окна обслуживания» — связь с effective_daily_limit_today через EffectiveLimitCalculator (партия 10.6). Прил. М §3.2, партия 10 большой
6 §12 Дашборд и аналитика §12.5 «Расширенная аналитика» — добавить экран «Конверсия проектов» с 17 колонками, monotone per column (значения от высокого к низкому), формат N (XX.XX%), без drill-down/экспорта. Соответствует партии 12.1 оригинала. Прил. М партия 12.1, ТЗ §12.5 средний
7 §14 Журнал действий (Activity Log) §14.2 «Отслеживаемые события» — расширить: смена ответственного, проекта, телефона, суммы (полный аудит мутаций). Это наше преимущество (оригинал не логирует — партия 12). Прил. М §11.4 п.2, партия 12 средний 06.05
8 §17 Напоминания и Push-уведомления §17.1 — формат «Тихих часов»: start_hour 0..23, end_hour 0..23, минимум 3 часа разницы, общий timezone тенанта (из партии 13.2.1). §17.2 — каналы: push + email. Без Telegram, без SMS (Биз-12 закрыт как Post-MVP). Прил. М партия 13.2.1, ТЗ §17 малый 06.05
9 §18.4 Профиль → Безопасность Новая вкладка «Безопасность»: Пароль / 2FA / История входов / Активные сессии / Подозрительная активность (партия 14). Это наше преимущество (у оригинала нет 2FA, нет журнала входов, нет sessions). 2FA доступна на всех тарифах (Биз-9). (в narrative — §18.4, не §18.5; §18.5 — настройки уведомлений.) Прил. М §2.19, ТЗ §22.4, Биз-9 средний 06.05
10 §19 Исходящий REST API §19.10 «Webhook events» — outbound webhook как уникальное преимущество. 7 линий доказательств отсутствия в оригинале (партия 15). Привязка к OPEN-И-2 — amoCRM в спринте 1415, Bitrix24/RetailCRM Post-MVP. Прил. М §13 партия 15, OPEN-И-2 средний 06.05
11 §22 Безопасность §22.2 — полная CSP. Новый §22.11 «Защита от prompt injection в DOM» (4 уровня: CSP, запрет AI-маркеров claude-/gpt-/agent-/ai- в нашем DOM через CI-линтер, DOMPurify санитизация, аудит сторонних виджетов). Новый §22.12 «Антипаттерны оригинала» (3 практики, которые не повторяем + code review checklist). Прил. М §2.19, §6, §9.4 средний 06.05
12 §23.10 Админка SaaS Колонка «Желаемое × факт сегодня» в /admin/tenants (Биз-16). Раздел поставщиков (§4.9 Прил. Г — Ю-2): дашборд маржи, реестр закупок, реестр счетов от поставщика. Журнал инцидентов (Прил. Д — OPEN-Д-5/И-1). Workflow pd_subject_requests (Прил. Д). Impersonation Ю-1 (одноразовый код email тенанту, 15 мин TTL, 5 попыток, сессия 1 час). Прил. Г, Прил. Д, Биз-16 большой
13 §26 Дизайн-система Полная замена под брендбук v1.1: палитра #3B82F6#0F6E56 (Teal 600); сетка 8px → 4px; добавить JetBrains Mono для кода; ссылка на CSS-переменные и Vuetify-тему lidpotokLight в брендбук §8. WCAG 2.1 AA — обновить таблицу контрастов под Teal. Маскирование credentials в формах интеграций (type="password" + toggle) — антипаттерн оригинала. brandbook.md v1.1, Прил. М §6.6 средний 06.05

2. Сводки изменений по темам

2.1. 6 конкурентных преимуществ (для §1 и маркетинга)

  1. Outbound webhook к тенанту — оригинал только принимает.
  2. Полный аудит мутаций сделки — оригинал не логирует смену ответственного / проекта / телефона / суммы.
  3. Kanban-доска с drag-and-drop — у оригинала только табличный вид.
  4. Real-time push-уведомления — у оригинала обновления только перезагрузкой страницы.
  5. Дашборд с настраиваемыми виджетами — у оригинала фиксированный дашборд с 5 KPI.
  6. API для CRM-интеграций (amoCRM, Bitrix24)у оригинала нет.

Дополнительно как security-differentiator:

  1. 2FA + журнал входов + список сессий + recovery codes + история смены пароля — у оригинала отсутствует.

2.2. Антипаттерны оригинала (для §22)

Где Что Наша защита
/admin/user/account Пароль plaintext в <input type="text"> (партия 14.3.4) Отдельная защищённая форма «старый/новый/подтверждение», type="password", rate-limit
Карточки 5 интеграций API-ключи в <input type="text"> (партия 15.2) type="password" + toggle «👁», маскирование при сохранении
DOM каждой страницы Маркеры claude-agent-* (15 партий) CSP запрет на префиксы claude-*/gpt-*/agent-*, DOMPurify

2.3. Что больше не открыто (закрыто в v1.10)

Все эти решения зафиксированы в реестре, narrative должен это отразить (раньше было «обсуждается»):

  • Биз-6 — режим «по запросу» (15 партий аудита уже сделано).
  • Биз-10 — отдельная таблица reminders минимальный паритет.
  • Биз-11 — один кошелёк в рублях.
  • Биз-12 — телефония Post-MVP.
  • Биз-13 — magic-link 24ч на MVP.
  • Биз-14 — TTL 180 дней + cron disabled до Б-1.
  • Биз-15 — OSINT wizard не делаем на MVP.
  • Биз-16 — tenants.desired_daily_numbers INT NULL в спринте 1.
  • OPEN-К-1 — Cloud Boost grant отложен.
  • OPEN-К-7 — CVoS отложен.
  • OPEN-И-12 — Notion private / 1Password DevOps до DO-4.

2.4. Что остаётся открытым в narrative v8.4

  • Б-1 P0 — реквизиты ООО (от него зависят §22 Безопасность подвал, §23.10 footer контакты, §27 Чек-лист, упоминания в Прил. З и Прил. Ж).
  • Диз-1 P1 — HTML-прототипы 6 экранов в работе у Claude.
  • Диз-3, DO-2, DO-4 P1 — все ждут Б-1.

В narrative v8.4 эти 5 пунктов остаются как [?] или «ждёт Б-1».


3. Что не трогать в narrative v8.4

  • §2 Архитектура — стек уже корректен (Yandex Cloud в Прил. К).
  • §3 Мультитенантность — RLS включён (CTO-5), всё описано.
  • §4 Жизненный цикл клиента — без изменений.
  • §6 CSV-импорт — без изменений.
  • §10 Мои Сделки — без изменений (см. дизайн-бриф для UX, но narrative корректен).
  • §11 Kanban — без изменений.
  • §13 Отчёты — без изменений (CTO-6/7 уже отражены).
  • §15 Шаблоны комментариев — без изменений (5 базовых).
  • §16 Теги — без изменений.
  • §20 SaaS-биллинг — без изменений (CTO-1..3, Биз-1..2 отражены).
  • §21 Лид-биллинг — без изменений (CTO-2 отражён).
  • §24, §25 — без изменений.
  • §27 Чек-лист — обновится только после Б-1 (реквизиты, контакты).
  • §28 Приложения — таблица оставлена как историческая запись с пометкой 📜 (см. v1.7 реестра).

4. Порядок переписывания (рекомендация)

Очередь Раздел Почему
1 §26 Дизайн-система Малый объём, простое замещение, разблокирует frontend (правильные токены).
2 §1 Обзор системы Малый объём, видно сразу при чтении narrative. Маркетинговая ценность.
3 §17 Тихие часы Малый объём, чёткие правки.
4 §18.5 Безопасность Малый объём, чёткие правки.
5 §14 Activity Log Средний, частично уже описано.
6 §19 REST API + outbound webhook Средний, дополнения.
7 §5 Webhook + источники Средний, уточнение.
8 §22 Безопасность Средний, расширение разделов.
9 §8 Воронка Средний, кастомизация.
10 §12 Дашборд Средний, экран «Конверсия проектов».
11 §23.10 Админка SaaS Большой, привязка к Прил. Г.
12 §9 Мои Проекты Большой, новые поля + расширения.
13 §7 Сущности и БД Большой, ссылки на Прил. М §3 + schema.sql v8.3. Самый трудоёмкий.

Оценка: 13 разделов × ~30 минут на средний раздел ≈ 6.5 часов чистого времени = 34 сессии по 1.5–2 часа каждая.

Альтернатива: narrative v8.4 не делать целиком, а ограничиться §26 + §1 в одну сессию — это закрывает самые видимые расхождения (палитра + конкурентные преимущества). Остальное оставить в виде ссылок на Прил. М v1.1 «детализация — в Прил. М §X.Y».


5. Что Claude должен помнить при переписывании

  1. Не переписывать с нуля — изменения локальные. Каждый раздел дополняется/правится, не replace полностью.
  2. Сохранять кросс-ссылки — все упоминания «см. раздел X» → проверить, что раздел существует и актуален в v8.4.
  3. Никаких дублирований — детали в Прил. М (анализ оригинала), Прил. Г (админка), Прил. Д (152-ФЗ), brandbook.md (визуал). Narrative — высокоуровневое описание + ссылка.
  4. Никаких новых сущностей без отражения в schema.sql — если добавляется таблица в §7, она должна уже быть в db/schema.sql v8.3 (CHANGELOG_schema.md).
  5. Лента изменений — в шапке narrative блок «Что нового в v8.4 относительно v8.3» с маппингом «было → стало», как в реестре.
  6. Соответствие правиламPravila_raboty_Claude_v1_1.md v1.2 §4.5 (массовые правки → self-review в конце).
  7. Self-review обязательно (правило §4.6): метрики, версии в шапке, кросс-ссылки на актуальные имена.

6. Артефакты после v8.4

После завершения переписывания должны появиться:

  • docs/CRM_bp-gr_Инструкция_v8_4.md — переписанный narrative (либо переименование v8_3 → v8_4 + правки in-place).
  • Обновление docs/README_АРХИВ_v8_3.mdREADME_АРХИВ_v8_4.md (или v8.4) с обновлённой таблицей версий.
  • Обновление CLAUDE.md §0 «Источник истины» — ссылка на v8.4.
  • Обновление реестра docs/Открытые_вопросы_v8_3.md — одна строка в шапке.
  • Удалить этот файл (Plan_narrative_v8_4.md) после завершения переписывания — план становится неактуальным.

Конец Plan_narrative_v8_4.md v1.0 от 06.05.2026.