По node.js тут не «не сохраняется», а общая ссылка: Data.push(dat) кладёт в массив один и тот же объект, который BAS держит в памяти, — поэтому после перезапуска правки уходят в исходный шаблон, а не в проект. Патч через Object.assign({}, dat) из #3 именно это и закрывает. У меня то же самое было: пока пушил копию, а не сам объект, изменения «исчезали» в каждом втором проекте.
Про «удаление элемента» — смотрите, что удаляется по индексу, а не по ссылке на строку: после удаления сдвигаются все остальные, и следующий шаг цикла бьёт не в тот элемент. Тест A/B/C/A из #5 правильный, по нему сразу видно, где ломается.

