From 1ccd56606b63261492c37b523b490eb0658095ed Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sat, 29 Aug 2026 18:24:21 +0300 Subject: [PATCH] =?UTF-8?q?fix(cfe-borrow):=20=D0=B2=D0=B5=D1=80=D0=BD?= =?UTF-8?q?=D1=83=D1=82=D1=8C=20=D0=B2=D1=81=D1=82=D0=B0=D0=B2=D0=BA=D1=83?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=B8=D0=BC=D1=81=D1=82=D0=B2=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D1=85=20=D1=80=D0=B5=D0=BA=D0=B2=D0=B8=D0=B7?= =?UTF-8?q?=D0=B8=D1=82=D0=BE=D0=B2=20=D0=B2=20=D1=81=D0=B2=D0=BE=D0=B9=20?= =?UTF-8?q?ChildObjects?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit При переводе сохранения объекта на семью Detect-XmlStyle/Finalize-XmlText из блока выпал вызов Insert-IntoOwnChildObjects: заимствованные реквизиты собираются текстом и вставляются в собственный ChildObjects объекта, а не через InnerXml (тот ломает пространства имён). Без вызова слияние реквизитов при заимствовании по глубокому пути молча теряло их. Вызов стоит до Finalize-XmlText, чтобы схлопывание пустых тегов накрывало и вставленные реквизиты — как было в исходном порядке. Тестами не ловится: путь Merge-AttributesIntoObject не покрыт ни одним кейсом, поэтому удаление прошло 29/29 и верификацию платформой. Проверено изолированным прогоном связки: реквизит вставлен, самозакрытый ChildObjects раскрыт, пустые теги плотные, XML валиден. Покрытие этого пути — отдельная задача. Попутно: кейс type-name-russian расширен на add-childObject — русское имя вида проверялось только в sort и remove. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01QoAJmoNbgWKobA7JGgN5S3 --- .../type-name-russian/Configuration.xml | 1 + .../cases/cf-edit/type-name-russian.json | 24 +++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/tests/skills/cases/cf-edit/snapshots/type-name-russian/Configuration.xml b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Configuration.xml index c008f0688..33d6af761 100644 --- a/tests/skills/cases/cf-edit/snapshots/type-name-russian/Configuration.xml +++ b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Configuration.xml @@ -248,6 +248,7 @@ Русский Альфа Гамма + Бета Омега Каппа Яблоко diff --git a/tests/skills/cases/cf-edit/type-name-russian.json b/tests/skills/cases/cf-edit/type-name-russian.json index 090048d21..1a1f670f3 100644 --- a/tests/skills/cases/cf-edit/type-name-russian.json +++ b/tests/skills/cases/cf-edit/type-name-russian.json @@ -1,15 +1,29 @@ { - "name": "Имя вида принимается по-русски: sort-childObjects «Справочники» и remove-childObject «Справочник.Бета»", + "name": "Имя вида принимается по-русски во всех операциях с видами: sort, remove, add", "setup": "fixture:unsorted-childobjects", "input": [ - { "operation": "sort-childObjects", "value": "Справочники" }, - { "operation": "remove-childObject", "value": "Справочник.Бета" } + { + "operation": "sort-childObjects", + "value": "Справочники" + }, + { + "operation": "remove-childObject", + "value": "Справочник.Бета" + }, + { + "operation": "add-childObject", + "value": "Справочник.Бета" + } ], "expect": { - "stdoutContains": ["Sorted: Catalog (3)", "Removed: Catalog.Бета"], + "stdoutContains": [ + "Sorted: Catalog (3)", + "Removed: Catalog.Бета", + "Added: Catalog.Бета" + ], "fileContains": { "file": "Configuration.xml", - "text": "Альфа\r\n\t\t\tГамма" + "text": "Альфа\r\n\t\t\tГамма\r\n\t\t\tБета" } } }