3.4 KiB
R-SAVE multi-flag save — finding (Plan 3 T1)
Дата: 2026-05-20
План: docs/superpowers/plans/2026-05-20-project-migration-redesign-plan-3-export.md Task 1
Цель: проверить, как multi-flag rt-project-save (srcrt=srcbl=srcmt=true) на портале crm.bp-gr.ru отдаёт 3 external_id (по одному на платформу) — гейт для T4 saveProjectMultiFlag.
Подход
Plan Task 1 предполагал live-write smoke: один POST /admin/visit/rt-project-save с тремя флагами + 3 cleanup-delete. Замена на read-only анализ существующих 443 проектов на портале — позволяет верифицировать mapping src↔platform без portal-write риска (orphaned test rows, auth-leak, rate-limit).
Probe-script (удалён после прогона): tinker → SupplierPortalClient::listProjects() → группировка по src-полю с гистограммой B[123]_* prefix имени.
Результат
src → count + name-prefix:
src |
count | prefix-histogram |
|---|---|---|
rt |
143 | B1_*: 143 (100%) |
bl |
150 | B2_*: 150 (100%) |
mt |
149 | B3_*: 149 (100%) |
dop2 |
1 | <no-prefix>: 1 (legacy outlier) |
Итого 442/443 строк (99.77%) подтверждают канонический mapping; dop2 — единичный legacy-проект без B-prefix, не пересекается с R-SAVE-флоу.
Mapping (для T4 saveProjectMultiFlag)
$srcToPlatform = [
'rt' => 'B1',
'bl' => 'B2',
'mt' => 'B3',
];
Multi-flag → 3 rows
Sample row (src=rt, name=B1_79029826282) показывает: src — single value, не массив. Значит каждый rt-проект на портале — одна платформа; multi-flag save (srcrt=srcbl=srcmt=true) создаёт 3 отдельных rt-проекта (по одному на src), которые матчатся в listProjects() по name+tag после save.
Решение
Вариант a (плана T4) подтверждён: после POST rt-project-save дочитать listProjects(), найти все строки с name == <our> && tag == <our>, замапить src → platform по таблице выше, собрать [platform => external_id]. Fallback б (3 раздельных save по платформам) не требуется.
Risk-disclaimer: read-only анализ показывает текущее state из существующих 442 строк. Multi-flag save не верифицирован end-to-end live (нет реального POST в этом findinge); allocate-side контракт srcrt/srcbl/srcmt нужно верифицировать на первом реальном prod-save (best-effort гарантия). Если первый saveProjectMultiFlag вернёт < 3 строк по name+tag — переключиться на вариант б в коде T4.
Связанные
- Plan 3 spec: docs/superpowers/specs/2026-05-20-project-migration-redesign-design.md §4.5, §8 R-SAVE.
- T4 реализация (далее):
SupplierPortalClient::saveProjectMultiFlag.