§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>
18 KiB
План переписывания 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 партий, в т. ч. партии 12–15 от 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 в спринте 14–15, 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 и маркетинга)
- Outbound webhook к тенанту — оригинал только принимает.
- Полный аудит мутаций сделки — оригинал не логирует смену ответственного / проекта / телефона / суммы.
- Kanban-доска с drag-and-drop — у оригинала только табличный вид.
- Real-time push-уведомления — у оригинала обновления только перезагрузкой страницы.
- Дашборд с настраиваемыми виджетами — у оригинала фиксированный дашборд с 5 KPI.
- API для CRM-интеграций (amoCRM, Bitrix24) — у оригинала нет.
Дополнительно как security-differentiator:
- 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 часов чистого времени = 3–4 сессии по 1.5–2 часа каждая.
Альтернатива: narrative v8.4 не делать целиком, а ограничиться §26 + §1 в одну сессию — это закрывает самые видимые расхождения (палитра + конкурентные преимущества). Остальное оставить в виде ссылок на Прил. М v1.1 «детализация — в Прил. М §X.Y».
5. Что Claude должен помнить при переписывании
- Не переписывать с нуля — изменения локальные. Каждый раздел дополняется/правится, не replace полностью.
- Сохранять кросс-ссылки — все упоминания «см. раздел X» → проверить, что раздел существует и актуален в v8.4.
- Никаких дублирований — детали в Прил. М (анализ оригинала), Прил. Г (админка), Прил. Д (152-ФЗ), brandbook.md (визуал). Narrative — высокоуровневое описание + ссылка.
- Никаких новых сущностей без отражения в schema.sql — если добавляется таблица в §7, она должна уже быть в
db/schema.sqlv8.3 (CHANGELOG_schema.md). - Лента изменений — в шапке narrative блок «Что нового в v8.4 относительно v8.3» с маппингом «было → стало», как в реестре.
- Соответствие правилам — Pravila_raboty_Claude_v1_1.md v1.2 §4.5 (массовые правки → self-review в конце).
- 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.md→README_АРХИВ_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.