Техническое задание: Обобщённый движок изменения YAML без потери данных для v0.2
Исторический документ из ревизии 61e75e9. План отражает работы, предложенные в этой ревизии, и не является актуальной инструкцией по реализации. Исходный документ.
1. Цель
Расширить закрытый движок изменений структурными операциями над отображениями и последовательностями, сохранив контракт отказа при неопределённости и побайтового сохранения данных.
Текущий движок ориентирован на relations, id, anchor и строковые скаляры. OKF v0.2 использует вложенные отображения и последовательности, логические и целочисленные значения, даты, дату со временем и поточные формы. Сейчас затрагиваемые узлы в поточной форме полностью отвергаются.
Не нужно изменять поточную форму изнутри: разрешена атомарная замена всего значения коллекции, если его границы и принадлежность доказаны.
3. Закрытые базовые операции
Добавить:
замену, вставку и удаление записи корневого отображения;
замену, вставку и удаление записи вложенного отображения;
замену всего значения отображения или последовательности;
обеспечение наличия, обновление и удаление элемента последовательности по уникальному селектору;
преобразование отдельного отображения в последовательность из одного элемента;
точное определение принадлежности диапазона записи отображения или значения коллекции;
вывод строк, логических и целочисленных значений, дат, даты со временем, отображений и последовательностей;
повторный семантический разбор и проверку неизменности байтов вне диапазонов исправлений.
Правила выбора:
sources[] по id; запись без ID выбирается только по точному значению;
verified[] по (by, at);
parameters[] по name;
вложенное отображение по уникальному скалярному ключу.
Произвольный путь по исходному YAML не должен становиться публичным API.
4. Контракт отказа при неопределённости
Дубли затрагиваемых ключей или селекторов → Ambiguous.
Происхождение из псевдонима или слияния → Ambiguous.
Якорь, тег, сложный ключ или элементы оформления без определённой принадлежности → Unsupported.