Skip to content

AI-EDT v0.2.33

Choose a tag to compare

@github-actions github-actions released this 20 Aug 06:18
· 74 commits to main since this release

Сравнение конфигураций тремя сторонами научилось применять принятые решения к проекту.

Объединение по решениям

У 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 тестов.