Files
portal/docs/discovery/2026-05-20-rsave-multiflag-finding.md
T

3.4 KiB
Raw Blame History

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) показывает: srcsingle 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.

Связанные