Skip to content

bug(build): transactional snapshot/rollback ConfigDumpInfo.xml on failed build #24

Description

@korolevpavel

Окружение

Проверено на официальном GitHub release asset v0.5.2-pre.1:

  • macOS arm64;
  • локальная файловая ИБ;
  • format: DESIGNER;
  • builder: DESIGNER;
  • исходники Designer XML.

Проблема

build запускает Designer с:

/LoadConfigFromFiles <source> -updateConfigDumpInfo

Даже если загрузка завершается ошибкой либо command timeout становится pending до safe point update_db_cfg, платформа уже успевает переписать tracked ConfigDumpInfo.xml.

В минимальном сценарии изменялся один объект/модуль, но после неуспешного build получен глобальный diff ConfigDumpInfo.xml — десятки тысяч добавленных и удалённых строк с новыми configVersion несвязанных объектов.

Runner сообщает, что выполнение остановлено до update_db_cfg, однако:

  • исходный ConfigDumpInfo.xml не восстанавливается;
  • backup/recovery artifact не возвращается;
  • повторный запуск начинается с уже загрязнённого source tree.

Аналогичный глобальный служебный churn возникает после успешного full load, хотя содержательный source diff ограничен несколькими объектами.

Ожидаемое поведение

Неуспешная операция

Перед /LoadConfigFromFiles -updateConfigDumpInfo сохранить byte-exact snapshot файла.

Если load:

  • завершился ошибкой;
  • был отменён;
  • получил timeout до следующего safe completion point;
  • не дошёл до успешного update_db_cfg;

runner должен автоматически восстановить исходный файл либо вернуть явный recovery artifact и typed recovery status.

Успешная операция

Нужен opt-in target-scoped режим, например:

build:
  configDumpInfoStrategy: preserve-unrelated

Он должен оставлять platform-generated current records только для реально загруженных metadata roots и их дочерних entries, сохраняя baseline records остальных объектов.

Никакие UUID или configVersion не должны конструироваться вручную: источники merge — только baseline и успешный platform output.

Критерии готовности

  • failed load оставляет ConfigDumpInfo.xml byte-identical baseline либо возвращает применимый recovery artifact;
  • timeout между load и update_db_cfg покрыт тестом;
  • JSON result сообщает backup, recovery action и число изменённых CDFI entries;
  • scoped strategy отклоняет неожиданные/unrelated entries;
  • сохраняются BOM, EOL и terminal-newline policy исходного файла;
  • повтор операции идемпотентен;
  • небольшой target-scoped build не оставляет глобальный configVersion churn.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions