cd6875edbb
Разбор докладной 13.07.2026: AutopodborController::restoreMergeEvent воскрешал только карточку поглощённого конкурента (имя/сайт/справочники/телефоны/is_federal), но не его autopodbor_sources — и если у источника был created_project_id (по нему идут заявки/деньги), проект оставался приклеен к выжившей карточке под её именем. Добавлен снимок источников поглощённых конкурентов: nullable-колонка autopodbor_merge_events.absorbed_sources (миграция 2026_07_14_090000, идемпотентна), заполняется AutopodborCompetitorMerger::snapshotAbsorbedSources ДО переноса/ переименования при слиянии (включая имя проекта на момент склейки). restoreMergeEvent по этому снимку либо перевешивает исходную строку источника обратно на воскрешённую карточку, либо пересоздаёт её (если строка была удалена при разрешении коллизии dedup_key), и откатывает имя проекта. Старые записи журнала (до миграции) снимка не имеют — восстанавливаются как раньше (только карточка), ответ API помечается 'partial' => true с честным сообщением. db/schema.sql v8.65 + db/CHANGELOG_schema.md — запись синхронизирована. tests/Feature/Autopodbor/ + tests/Feature/Bot/ — 417/417 после migrate:fresh. Живая проверка на локальном стенде через Playwright (создание проекта → слияние → «Вернуть» → проект и источник вернулись на воскрешённую карточку) — подтверждено. Ветка worktree-jivo-bot-core, НЕ на боевом проде — выкат отдельным решением владельца. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>