
Nick ShirokovandClaude Opus 4.8
57e99d144e
fix(skills): round-trip сохранение EOL/BOM/encoding в py edit-портах (#44/#46/#47)
Py-порты (lxml) при точечном редактировании существующего 1С-XML переписывали
весь файл: CRLF→LF, encoding="UTF-8"→"utf-8", добавляли финальный перенос,
плодили литерал (сериализация \r из tail'ов). Результат — широкий шумовой
diff и скрытый лишний текст-узел при exit 0 и зелёной валидации. PS1-порты
(XmlDocument) багу не подвержены — эталон.
Фикс во всех 13 round-trip re-serialize py-навыках: перед записью детектится
стиль существующего файла (BOM / EOL / регистр encoding / финальный перенос) и
восстанавливается при сохранении; переносы канонизируются к LF (убирает ),
затем приводятся к EOL источника. Новый файл (путь не существует) → прежнее
поведение, снапшоты не двигаются. Навыки: cf-edit, meta-edit, meta-remove,
interface-edit, subsystem-edit, skd-edit, form-edit, form-add, help-add,
template-add, template-remove, form-remove, cfe-borrow. Версии py+ps1 подняты
синхронно.
Harness (tests/skills/runner.mjs): снята маска в normalizeXmlContent
(порты её больше не порождают → гвардия ловит регресс); добавлен expect.preserves
— raw-байтовая проверка BOM/EOL/encoding/финального переноса/отсутствия
в обход нормализации. Регрессионные round-trip кейсы на CRLF+BOM+UTF-8 фикстурах
для cf-edit/meta-edit/subsystem-edit.
Верификация: py 556/556, ps1 556/556; платформа 1С 8.3.24 (verify-snapshots)
cf-edit 12/12, meta-edit/subsystem-edit round-trip загружаются; негатив-тест
подтверждает, что harness ловит дефект на старом коде.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 16:53:00 +03:00
..
2026-07-19 16:53:00 +03:00
2026-07-11 15:32:42 +03:00
2026-05-01 16:43:39 +03:00
2026-07-11 15:32:42 +03:00
2026-07-11 15:11:25 +03:00
2026-07-11 15:11:25 +03:00
2026-05-01 20:54:57 +03:00
2026-07-19 14:35:56 +03:00
2026-07-11 15:11:25 +03:00
2026-03-29 17:40:26 +03:00
2026-03-29 17:40:26 +03:00
2026-06-30 18:33:10 +03:00
2026-03-29 17:40:26 +03:00
2026-03-29 17:40:26 +03:00
2026-06-30 18:33:10 +03:00
2026-06-30 18:33:10 +03:00
2026-03-29 17:40:26 +03:00
2026-03-29 17:40:26 +03:00
2026-06-30 11:42:07 +03:00
2026-03-29 17:40:26 +03:00
2026-03-29 17:40:26 +03:00
2026-03-29 17:30:03 +03:00
2026-04-25 15:26:54 +03:00
2026-03-29 17:30:03 +03:00
2026-06-30 17:34:20 +03:00
2026-07-11 15:11:25 +03:00
2026-07-18 12:21:12 +03:00
2026-07-11 15:11:25 +03:00
2026-07-09 17:24:24 +03:00
2026-07-09 17:24:24 +03:00
2026-07-11 15:11:25 +03:00
2026-07-11 15:11:25 +03:00
2026-07-11 15:11:25 +03:00
2026-07-11 15:11:25 +03:00
2026-07-11 15:11:25 +03:00
2026-07-11 15:11:25 +03:00
2026-07-11 19:11:53 +03:00
2026-07-11 15:11:25 +03:00
2026-07-19 16:53:00 +03:00
2026-07-11 15:11:25 +03:00
2026-07-11 15:11:25 +03:00
2026-07-19 15:47:59 +03:00
2026-07-17 19:46:54 +03:00
2026-03-28 15:38:06 +03:00
2026-07-17 19:46:54 +03:00
2026-03-28 15:38:06 +03:00
2026-07-11 15:11:25 +03:00
2026-07-11 15:11:25 +03:00
2026-07-11 15:11:25 +03:00
2026-06-24 14:22:45 +03:00
2026-06-01 16:41:56 +03:00
2026-06-24 14:22:45 +03:00
2026-07-07 14:14:40 +03:00
2026-06-01 16:12:28 +03:00
2026-07-11 15:11:25 +03:00
2026-07-19 16:53:00 +03:00
2026-07-11 15:11:25 +03:00
2026-07-11 15:11:25 +03:00
2026-06-24 14:22:45 +03:00
2026-06-24 14:22:45 +03:00
2026-03-28 15:38:06 +03:00