diff --git a/.claude/skills/role-compile/scripts/role-compile.ps1 b/.claude/skills/role-compile/scripts/role-compile.ps1
index ccb6bc76..cd9d56b9 100644
--- a/.claude/skills/role-compile/scripts/role-compile.ps1
+++ b/.claude/skills/role-compile/scripts/role-compile.ps1
@@ -1,4 +1,4 @@
-# role-compile v1.26 — Compile 1C role from JSON
+# role-compile v1.27 — Compile 1C role from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[Parameter(Mandatory)]
diff --git a/.claude/skills/role-compile/scripts/role-compile.py b/.claude/skills/role-compile/scripts/role-compile.py
index 4a1428b5..39c2f411 100644
--- a/.claude/skills/role-compile/scripts/role-compile.py
+++ b/.claude/skills/role-compile/scripts/role-compile.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
-# role-compile v1.26 — Compile 1C role from JSON
+# role-compile v1.27 — Compile 1C role from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import json
@@ -1177,27 +1177,43 @@ def main():
if f'{role_name}' in raw_text:
reg_result = 'already'
else:
- # Find last ... and insert after it
- role_pattern = re.compile(r'([^<]*)')
- matches = list(role_pattern.finditer(raw_text))
new_role_tag = f'{role_name}'
+ block = re.search(r'.*?', raw_text, re.S)
- if matches:
- # Insert after last existing
- last_match = matches[-1]
- insert_pos = last_match.end()
- raw_text = raw_text[:insert_pos] + eol + f'\t\t\t{new_role_tag}' + raw_text[insert_pos:]
+ if block is None:
+ # Самозакрытый раскрываем первой записью; если тега нет вовсе —
+ # регистрировать некуда, и файл трогать нельзя. Раньше обе эти ветки писали
+ # исход 'added', не изменив ни байта: модель считала роль включённой в состав,
+ # а её там не было.
+ empty = re.search(r'', raw_text)
+ if empty is None:
+ reg_result = 'no-childobj'
+ else:
+ replacement = ('' + eol + f'\t\t\t{new_role_tag}'
+ + eol + '\t\t')
+ raw_text = raw_text[:empty.start()] + replacement + raw_text[empty.end():]
+ write_utf8_bom(config_xml_path, raw_text)
+ reg_result = 'added'
else:
- # No existing roles — insert before
- # Отступ вставки берём у закрывающего тега +1 уровень: подстановка
- # по голому '' удваивала бы уже присутствующий отступ
- # строки (получалось 5 табов вместо 3 — PS-порт через DOM даёт 3).
- raw_text = re.sub(r'([ \t]*)',
- lambda m: m.group(1) + '\t' + new_role_tag + eol + m.group(1) + '',
- raw_text, count=1)
+ role_pattern = re.compile(r'([^<]*)')
+ matches = list(role_pattern.finditer(raw_text))
- write_utf8_bom(config_xml_path, raw_text)
- reg_result = 'added'
+ if matches:
+ # Insert after last existing
+ last_match = matches[-1]
+ insert_pos = last_match.end()
+ raw_text = raw_text[:insert_pos] + eol + f'\t\t\t{new_role_tag}' + raw_text[insert_pos:]
+ else:
+ # No existing roles — insert before
+ # Отступ вставки берём у закрывающего тега +1 уровень: подстановка
+ # по голому '' удваивала бы уже присутствующий отступ
+ # строки (получалось 5 табов вместо 3 — PS-порт через DOM даёт 3).
+ raw_text = re.sub(r'([ \t]*)',
+ lambda m: m.group(1) + '\t' + new_role_tag + eol + m.group(1) + '',
+ raw_text, count=1)
+
+ write_utf8_bom(config_xml_path, raw_text)
+ reg_result = 'added'
else:
reg_result = 'no-config'
diff --git a/tests/skills/cases/role-compile/childobjects-missing.json b/tests/skills/cases/role-compile/childobjects-missing.json
new file mode 100644
index 00000000..0649260f
--- /dev/null
+++ b/tests/skills/cases/role-compile/childobjects-missing.json
@@ -0,0 +1,16 @@
+{
+ "name": "Configuration.xml без : регистрировать некуда, успех не объявляется",
+ "setup": "fixture:childobjects-missing",
+ "input": { "name": "Пустая" },
+ "validatePath": "Roles/Пустая",
+ "expect": {
+ "files": [
+ "Roles/Пустая.xml",
+ "Roles/Пустая/Ext/Rights.xml"
+ ],
+ "stdoutNotContains": [
+ "added to ChildObjects",
+ "already registered"
+ ]
+ }
+}
diff --git a/tests/skills/cases/role-compile/childobjects-selfclosed.json b/tests/skills/cases/role-compile/childobjects-selfclosed.json
new file mode 100644
index 00000000..1d958be9
--- /dev/null
+++ b/tests/skills/cases/role-compile/childobjects-selfclosed.json
@@ -0,0 +1,21 @@
+{
+ "name": "Самозакрытый : тег раскрывается, роль регистрируется",
+ "setup": "fixture:childobjects-selfclosed",
+ "input": { "name": "Пустая" },
+ "validatePath": "Roles/Пустая",
+ "expect": {
+ "files": [
+ "Roles/Пустая.xml",
+ "Roles/Пустая/Ext/Rights.xml"
+ ],
+ "stdoutContains": "Пустая added to ChildObjects",
+ "preserves": {
+ "file": "Configuration.xml",
+ "bom": true,
+ "eol": "crlf",
+ "encoding": "UTF-8",
+ "finalNewline": false,
+ "noCR13": true
+ }
+ }
+}
diff --git a/tests/skills/cases/role-compile/fixtures/childobjects-missing/Configuration.xml b/tests/skills/cases/role-compile/fixtures/childobjects-missing/Configuration.xml
new file mode 100644
index 00000000..a96210b5
--- /dev/null
+++ b/tests/skills/cases/role-compile/fixtures/childobjects-missing/Configuration.xml
@@ -0,0 +1,248 @@
+
+
+
+
+
+ 9cd510cd-abfc-11d4-9434-004095e12fc7
+ d41d3bac-c6c1-4a8d-afcd-81fc29f496d0
+
+
+ 9fcd25a0-4822-11d4-9414-008048da11f9
+ c8e78ba2-51c5-45bb-a0ef-8c3c7ff76053
+
+
+ e3687481-0a87-462c-a166-9f34594f9bba
+ 342f337b-45a8-422b-965d-11330d52b334
+
+
+ 9de14907-ec23-4a07-96f0-85521cb6b53b
+ a3448b91-cbda-4e31-a0f2-e32bc1884e7c
+
+
+ 51f2d5d8-ea4d-4064-8892-82951750031e
+ 41d207a0-776a-40af-bcd1-925d3acffb82
+
+
+ e68182ea-4237-4383-967f-90c1e3370bc7
+ d73b5446-4f92-46db-a779-91d4e78c664a
+
+
+ fb282519-d103-4dd3-bc12-cb271d631dfc
+ c5472dbb-d2be-4f93-a745-564e39298ef2
+
+
+
+ КрлфКонф
+
+
+ ru
+ КрлфКонф
+
+
+
+
+ Version8_3_24
+ ManagedApplication
+
+ PlatformApplication
+
+ Russian
+
+
+
+
+ false
+ false
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Biometrics
+ true
+
+
+ Location
+ false
+
+
+ BackgroundLocation
+ false
+
+
+ BluetoothPrinters
+ false
+
+
+ WiFiPrinters
+ false
+
+
+ Contacts
+ false
+
+
+ Calendars
+ false
+
+
+ PushNotifications
+ false
+
+
+ LocalNotifications
+ false
+
+
+ InAppPurchases
+ false
+
+
+ PersonalComputerFileExchange
+ false
+
+
+ Ads
+ false
+
+
+ NumberDialing
+ false
+
+
+ CallProcessing
+ false
+
+
+ CallLog
+ false
+
+
+ AutoSendSMS
+ false
+
+
+ ReceiveSMS
+ false
+
+
+ SMSLog
+ false
+
+
+ Camera
+ false
+
+
+ Microphone
+ false
+
+
+ MusicLibrary
+ false
+
+
+ PictureAndVideoLibraries
+ false
+
+
+ AudioPlaybackAndVibration
+ false
+
+
+ BackgroundAudioPlaybackAndVibration
+ false
+
+
+ InstallPackages
+ false
+
+
+ OSBackup
+ true
+
+
+ ApplicationUsageStatistics
+ false
+
+
+ BarcodeScanning
+ false
+
+
+ BackgroundAudioRecording
+ false
+
+
+ AllFilesAccess
+ false
+
+
+ Videoconferences
+ false
+
+
+ NFC
+ false
+
+
+ DocumentScanning
+ false
+
+
+ SpeechToText
+ false
+
+
+ Geofences
+ false
+
+
+ IncomingShareRequests
+ false
+
+
+ AllIncomingShareRequestsTypesProcessing
+ false
+
+
+
+
+
+ Normal
+
+
+ Language.Русский
+
+
+
+
+
+ Managed
+ NotAutoFree
+ DontUse
+ DontUse
+ TaxiEnableVersion8_2
+ DontUse
+ Version8_3_24
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/fixtures/childobjects-missing/Ext/ClientApplicationInterface.xml b/tests/skills/cases/role-compile/fixtures/childobjects-missing/Ext/ClientApplicationInterface.xml
new file mode 100644
index 00000000..b6691f68
--- /dev/null
+++ b/tests/skills/cases/role-compile/fixtures/childobjects-missing/Ext/ClientApplicationInterface.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ cbab57f2-a0f3-4f0a-89ea-4cb19570ab75
+
+
+
+
+ b553047f-c9aa-4157-978d-448ecad24248
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/fixtures/childobjects-missing/Languages/Русский.xml b/tests/skills/cases/role-compile/fixtures/childobjects-missing/Languages/Русский.xml
new file mode 100644
index 00000000..1ad6b469
--- /dev/null
+++ b/tests/skills/cases/role-compile/fixtures/childobjects-missing/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/fixtures/childobjects-selfclosed/Configuration.xml b/tests/skills/cases/role-compile/fixtures/childobjects-selfclosed/Configuration.xml
new file mode 100644
index 00000000..233c6a7d
--- /dev/null
+++ b/tests/skills/cases/role-compile/fixtures/childobjects-selfclosed/Configuration.xml
@@ -0,0 +1,249 @@
+
+
+
+
+
+ 9cd510cd-abfc-11d4-9434-004095e12fc7
+ d41d3bac-c6c1-4a8d-afcd-81fc29f496d0
+
+
+ 9fcd25a0-4822-11d4-9414-008048da11f9
+ c8e78ba2-51c5-45bb-a0ef-8c3c7ff76053
+
+
+ e3687481-0a87-462c-a166-9f34594f9bba
+ 342f337b-45a8-422b-965d-11330d52b334
+
+
+ 9de14907-ec23-4a07-96f0-85521cb6b53b
+ a3448b91-cbda-4e31-a0f2-e32bc1884e7c
+
+
+ 51f2d5d8-ea4d-4064-8892-82951750031e
+ 41d207a0-776a-40af-bcd1-925d3acffb82
+
+
+ e68182ea-4237-4383-967f-90c1e3370bc7
+ d73b5446-4f92-46db-a779-91d4e78c664a
+
+
+ fb282519-d103-4dd3-bc12-cb271d631dfc
+ c5472dbb-d2be-4f93-a745-564e39298ef2
+
+
+
+ КрлфКонф
+
+
+ ru
+ КрлфКонф
+
+
+
+
+ Version8_3_24
+ ManagedApplication
+
+ PlatformApplication
+
+ Russian
+
+
+
+
+ false
+ false
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Biometrics
+ true
+
+
+ Location
+ false
+
+
+ BackgroundLocation
+ false
+
+
+ BluetoothPrinters
+ false
+
+
+ WiFiPrinters
+ false
+
+
+ Contacts
+ false
+
+
+ Calendars
+ false
+
+
+ PushNotifications
+ false
+
+
+ LocalNotifications
+ false
+
+
+ InAppPurchases
+ false
+
+
+ PersonalComputerFileExchange
+ false
+
+
+ Ads
+ false
+
+
+ NumberDialing
+ false
+
+
+ CallProcessing
+ false
+
+
+ CallLog
+ false
+
+
+ AutoSendSMS
+ false
+
+
+ ReceiveSMS
+ false
+
+
+ SMSLog
+ false
+
+
+ Camera
+ false
+
+
+ Microphone
+ false
+
+
+ MusicLibrary
+ false
+
+
+ PictureAndVideoLibraries
+ false
+
+
+ AudioPlaybackAndVibration
+ false
+
+
+ BackgroundAudioPlaybackAndVibration
+ false
+
+
+ InstallPackages
+ false
+
+
+ OSBackup
+ true
+
+
+ ApplicationUsageStatistics
+ false
+
+
+ BarcodeScanning
+ false
+
+
+ BackgroundAudioRecording
+ false
+
+
+ AllFilesAccess
+ false
+
+
+ Videoconferences
+ false
+
+
+ NFC
+ false
+
+
+ DocumentScanning
+ false
+
+
+ SpeechToText
+ false
+
+
+ Geofences
+ false
+
+
+ IncomingShareRequests
+ false
+
+
+ AllIncomingShareRequestsTypesProcessing
+ false
+
+
+
+
+
+ Normal
+
+
+ Language.Русский
+
+
+
+
+
+ Managed
+ NotAutoFree
+ DontUse
+ DontUse
+ TaxiEnableVersion8_2
+ DontUse
+ Version8_3_24
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/fixtures/childobjects-selfclosed/Ext/ClientApplicationInterface.xml b/tests/skills/cases/role-compile/fixtures/childobjects-selfclosed/Ext/ClientApplicationInterface.xml
new file mode 100644
index 00000000..b6691f68
--- /dev/null
+++ b/tests/skills/cases/role-compile/fixtures/childobjects-selfclosed/Ext/ClientApplicationInterface.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ cbab57f2-a0f3-4f0a-89ea-4cb19570ab75
+
+
+
+
+ b553047f-c9aa-4157-978d-448ecad24248
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/fixtures/childobjects-selfclosed/Languages/Русский.xml b/tests/skills/cases/role-compile/fixtures/childobjects-selfclosed/Languages/Русский.xml
new file mode 100644
index 00000000..1ad6b469
--- /dev/null
+++ b/tests/skills/cases/role-compile/fixtures/childobjects-selfclosed/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/childobjects-missing/Configuration.xml b/tests/skills/cases/role-compile/snapshots/childobjects-missing/Configuration.xml
new file mode 100644
index 00000000..503c88f7
--- /dev/null
+++ b/tests/skills/cases/role-compile/snapshots/childobjects-missing/Configuration.xml
@@ -0,0 +1,248 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+ UUID-008
+ UUID-009
+
+
+ UUID-010
+ UUID-011
+
+
+ UUID-012
+ UUID-013
+
+
+ UUID-014
+ UUID-015
+
+
+
+ КрлфКонф
+
+
+ ru
+ КрлфКонф
+
+
+
+
+ Version8_3_24
+ ManagedApplication
+
+ PlatformApplication
+
+ Russian
+
+
+
+
+ false
+ false
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Biometrics
+ true
+
+
+ Location
+ false
+
+
+ BackgroundLocation
+ false
+
+
+ BluetoothPrinters
+ false
+
+
+ WiFiPrinters
+ false
+
+
+ Contacts
+ false
+
+
+ Calendars
+ false
+
+
+ PushNotifications
+ false
+
+
+ LocalNotifications
+ false
+
+
+ InAppPurchases
+ false
+
+
+ PersonalComputerFileExchange
+ false
+
+
+ Ads
+ false
+
+
+ NumberDialing
+ false
+
+
+ CallProcessing
+ false
+
+
+ CallLog
+ false
+
+
+ AutoSendSMS
+ false
+
+
+ ReceiveSMS
+ false
+
+
+ SMSLog
+ false
+
+
+ Camera
+ false
+
+
+ Microphone
+ false
+
+
+ MusicLibrary
+ false
+
+
+ PictureAndVideoLibraries
+ false
+
+
+ AudioPlaybackAndVibration
+ false
+
+
+ BackgroundAudioPlaybackAndVibration
+ false
+
+
+ InstallPackages
+ false
+
+
+ OSBackup
+ true
+
+
+ ApplicationUsageStatistics
+ false
+
+
+ BarcodeScanning
+ false
+
+
+ BackgroundAudioRecording
+ false
+
+
+ AllFilesAccess
+ false
+
+
+ Videoconferences
+ false
+
+
+ NFC
+ false
+
+
+ DocumentScanning
+ false
+
+
+ SpeechToText
+ false
+
+
+ Geofences
+ false
+
+
+ IncomingShareRequests
+ false
+
+
+ AllIncomingShareRequestsTypesProcessing
+ false
+
+
+
+
+
+ Normal
+
+
+ Language.Русский
+
+
+
+
+
+ Managed
+ NotAutoFree
+ DontUse
+ DontUse
+ TaxiEnableVersion8_2
+ DontUse
+ Version8_3_24
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/childobjects-missing/Ext/ClientApplicationInterface.xml b/tests/skills/cases/role-compile/snapshots/childobjects-missing/Ext/ClientApplicationInterface.xml
new file mode 100644
index 00000000..3c1161b2
--- /dev/null
+++ b/tests/skills/cases/role-compile/snapshots/childobjects-missing/Ext/ClientApplicationInterface.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ UUID-002
+
+
+
+
+ UUID-004
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/childobjects-missing/Languages/Русский.xml b/tests/skills/cases/role-compile/snapshots/childobjects-missing/Languages/Русский.xml
new file mode 100644
index 00000000..37c60d78
--- /dev/null
+++ b/tests/skills/cases/role-compile/snapshots/childobjects-missing/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/childobjects-missing/Roles/Пустая.xml b/tests/skills/cases/role-compile/snapshots/childobjects-missing/Roles/Пустая.xml
new file mode 100644
index 00000000..9ce71fac
--- /dev/null
+++ b/tests/skills/cases/role-compile/snapshots/childobjects-missing/Roles/Пустая.xml
@@ -0,0 +1,15 @@
+
+
+
+
+ Пустая
+
+
+ ru
+ Пустая
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/childobjects-missing/Roles/Пустая/Ext/Rights.xml b/tests/skills/cases/role-compile/snapshots/childobjects-missing/Roles/Пустая/Ext/Rights.xml
new file mode 100644
index 00000000..9a1537d2
--- /dev/null
+++ b/tests/skills/cases/role-compile/snapshots/childobjects-missing/Roles/Пустая/Ext/Rights.xml
@@ -0,0 +1,6 @@
+
+
+ false
+ true
+ false
+
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/childobjects-selfclosed/Configuration.xml b/tests/skills/cases/role-compile/snapshots/childobjects-selfclosed/Configuration.xml
new file mode 100644
index 00000000..013da012
--- /dev/null
+++ b/tests/skills/cases/role-compile/snapshots/childobjects-selfclosed/Configuration.xml
@@ -0,0 +1,251 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+ UUID-008
+ UUID-009
+
+
+ UUID-010
+ UUID-011
+
+
+ UUID-012
+ UUID-013
+
+
+ UUID-014
+ UUID-015
+
+
+
+ КрлфКонф
+
+
+ ru
+ КрлфКонф
+
+
+
+
+ Version8_3_24
+ ManagedApplication
+
+ PlatformApplication
+
+ Russian
+
+
+
+
+ false
+ false
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Biometrics
+ true
+
+
+ Location
+ false
+
+
+ BackgroundLocation
+ false
+
+
+ BluetoothPrinters
+ false
+
+
+ WiFiPrinters
+ false
+
+
+ Contacts
+ false
+
+
+ Calendars
+ false
+
+
+ PushNotifications
+ false
+
+
+ LocalNotifications
+ false
+
+
+ InAppPurchases
+ false
+
+
+ PersonalComputerFileExchange
+ false
+
+
+ Ads
+ false
+
+
+ NumberDialing
+ false
+
+
+ CallProcessing
+ false
+
+
+ CallLog
+ false
+
+
+ AutoSendSMS
+ false
+
+
+ ReceiveSMS
+ false
+
+
+ SMSLog
+ false
+
+
+ Camera
+ false
+
+
+ Microphone
+ false
+
+
+ MusicLibrary
+ false
+
+
+ PictureAndVideoLibraries
+ false
+
+
+ AudioPlaybackAndVibration
+ false
+
+
+ BackgroundAudioPlaybackAndVibration
+ false
+
+
+ InstallPackages
+ false
+
+
+ OSBackup
+ true
+
+
+ ApplicationUsageStatistics
+ false
+
+
+ BarcodeScanning
+ false
+
+
+ BackgroundAudioRecording
+ false
+
+
+ AllFilesAccess
+ false
+
+
+ Videoconferences
+ false
+
+
+ NFC
+ false
+
+
+ DocumentScanning
+ false
+
+
+ SpeechToText
+ false
+
+
+ Geofences
+ false
+
+
+ IncomingShareRequests
+ false
+
+
+ AllIncomingShareRequestsTypesProcessing
+ false
+
+
+
+
+
+ Normal
+
+
+ Language.Русский
+
+
+
+
+
+ Managed
+ NotAutoFree
+ DontUse
+ DontUse
+ TaxiEnableVersion8_2
+ DontUse
+ Version8_3_24
+
+
+
+ Пустая
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/childobjects-selfclosed/Ext/ClientApplicationInterface.xml b/tests/skills/cases/role-compile/snapshots/childobjects-selfclosed/Ext/ClientApplicationInterface.xml
new file mode 100644
index 00000000..3c1161b2
--- /dev/null
+++ b/tests/skills/cases/role-compile/snapshots/childobjects-selfclosed/Ext/ClientApplicationInterface.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ UUID-002
+
+
+
+
+ UUID-004
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/childobjects-selfclosed/Languages/Русский.xml b/tests/skills/cases/role-compile/snapshots/childobjects-selfclosed/Languages/Русский.xml
new file mode 100644
index 00000000..37c60d78
--- /dev/null
+++ b/tests/skills/cases/role-compile/snapshots/childobjects-selfclosed/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/childobjects-selfclosed/Roles/Пустая.xml b/tests/skills/cases/role-compile/snapshots/childobjects-selfclosed/Roles/Пустая.xml
new file mode 100644
index 00000000..9ce71fac
--- /dev/null
+++ b/tests/skills/cases/role-compile/snapshots/childobjects-selfclosed/Roles/Пустая.xml
@@ -0,0 +1,15 @@
+
+
+
+
+ Пустая
+
+
+ ru
+ Пустая
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/childobjects-selfclosed/Roles/Пустая/Ext/Rights.xml b/tests/skills/cases/role-compile/snapshots/childobjects-selfclosed/Roles/Пустая/Ext/Rights.xml
new file mode 100644
index 00000000..9a1537d2
--- /dev/null
+++ b/tests/skills/cases/role-compile/snapshots/childobjects-selfclosed/Roles/Пустая/Ext/Rights.xml
@@ -0,0 +1,6 @@
+
+
+ false
+ true
+ false
+
\ No newline at end of file