AI-EDT v0.2.33
Сравнение конфигураций тремя сторонами научилось применять принятые решения к проекту.
- Объединение по решениям
- Что считается признаком того, что объединение произошло
- Проверку выполняет окружение
- Проверено на стенде
Объединение по решениям
У compare_three_way появился параметр intent:
| Значение | Что делает |
|---|---|
REPORT |
по умолчанию, читает и ничего не меняет |
MERGE |
применяет решения из decisions к проекту |
MERGE_IGNORING_PROBLEMS |
идёт дальше проблемы, которую окружение назвало блокирующей |
Нераспознанное значение отклоняется с перечислением допустимых, а не читается как REPORT. Объединение без decisions отклоняется - применять нечего. MERGE_IGNORING_PROBLEMS - отдельное значение, а не флаг рядом с MERGE.
Под пресетом без права записи intent=MERGE отклоняется до того, как что-либо сравнивается: затвор проверяет способность write_module_source.
Что считается признаком того, что объединение произошло
IComparisonManager.startMerge возвращает Status.OK_STATUS в момент приёма задания: startMergeProcess -> startBatchMerge -> MergeProcessJob.schedule(). Из этого статуса не следует, что записано хоть что-нибудь.
ComparisonManager.performMerge ставит MERGE_PROCESS_FINISHED и следом вызывает discardSession, поэтому у завершённого объединения getStatus(handle) отдаёт null. Ожидание построено на этом: исчезновение сессии после принятого startMerge считается завершением, и поле merged берётся оттуда, а не из статуса планирования.
Терминальные состояния различаются: MERGE_PROCESS_DISCARDED и COMPARISON_MERGE_PROCESS_CANCELLED отдаются как отказ с пометкой, что не записано ничего. Объединение, пережившее отведённое время, не отменяется - ответ говорит, что работа продолжается и её исход отсюда не виден.
Проверку выполняет окружение
getMergeProblems(handle) законен только при MERGE_PROCESS_VALIDATION_FINISHED, MERGE_PROCESS_USING_EXTERNAL_TOOL_FINISHED и MERGE_PROCESS_USING_EXTERNAL_TOOL_CANCELED - до старта объединения он падает на Assert.isLegal. Собственная проверка блокирующих проблем перед стартом поэтому всегда видела ноль и всегда пропускала; она снята.
Гарантию даёт validateBatchMerge внутри самого задания: при непустом списке отказов главная фаза (performBatchMergeAsUserOperation) пропускается и запись не начинается. Проблемы читаются в единственный момент, когда доступны, и приходят вместе с отказом; поле problemsNote называет причину, если список прочитать не удалось - пустой список больше не может быть принят за «ничто не мешает».
Проверено на стенде
EDT 2026.2.0+289, проект-пробник, сравнение двух сторон.
| Проверка | Результат |
|---|---|
intent=MERGE_NOW |
отклонено с перечислением допустимых значений |
intent=MERGE без decisions |
merged=false, названа причина |
intent=MERGE, решение DO_NOT_MERGE |
merged=true, объект на месте |
intent=MERGE, решение GET_FROM_OTHER |
merged=true, .mdo проекта принял значение другой стороны |
Полное объединение заняло 2 секунды. Сборка - 1625 тестов.