diff --git a/tests/skills/cases/form-compile/dup-command-names.json b/tests/skills/cases/form-compile/dup-command-names.json
new file mode 100644
index 00000000..12d9127d
--- /dev/null
+++ b/tests/skills/cases/form-compile/dup-command-names.json
@@ -0,0 +1,26 @@
+{
+ "name": "Дубликат имени команды → [ERROR] exit 1",
+ "preRun": [
+ {
+ "script": "meta-compile/scripts/meta-compile",
+ "input": { "type": "DataProcessor", "name": "ТестДубльКом" },
+ "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
+ },
+ {
+ "script": "form-add/scripts/form-add",
+ "args": { "-ObjectPath": "{workDir}/DataProcessors/ТестДубльКом.xml", "-FormName": "Форма" }
+ }
+ ],
+ "params": { "outputPath": "DataProcessors/ТестДубльКом/Forms/Форма/Ext/Form.xml" },
+ "expectError": "Duplicate command name",
+ "input": {
+ "title": "Дубль команды",
+ "attributes": [
+ { "name": "Объект", "type": "DataProcessorObject.ТестДубльКом", "main": true }
+ ],
+ "commands": [
+ { "name": "Выполнить", "action": "Выполнить" },
+ { "name": "Выполнить", "action": "ВыполнитьЕщё" }
+ ]
+ }
+}
diff --git a/tests/skills/cases/form-compile/dup-element-names.json b/tests/skills/cases/form-compile/dup-element-names.json
new file mode 100644
index 00000000..cf13f80a
--- /dev/null
+++ b/tests/skills/cases/form-compile/dup-element-names.json
@@ -0,0 +1,26 @@
+{
+ "name": "Дубликат имени элемента → [ERROR] exit 1",
+ "preRun": [
+ {
+ "script": "meta-compile/scripts/meta-compile",
+ "input": { "type": "DataProcessor", "name": "ТестДубльЭл" },
+ "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
+ },
+ {
+ "script": "form-add/scripts/form-add",
+ "args": { "-ObjectPath": "{workDir}/DataProcessors/ТестДубльЭл.xml", "-FormName": "Форма" }
+ }
+ ],
+ "params": { "outputPath": "DataProcessors/ТестДубльЭл/Forms/Форма/Ext/Form.xml" },
+ "expectError": "Duplicate element name",
+ "input": {
+ "title": "Дубль элемента",
+ "attributes": [
+ { "name": "Объект", "type": "DataProcessorObject.ТестДубльЭл", "main": true }
+ ],
+ "elements": [
+ { "input": "Поле", "name": "Дубль", "path": "Объект" },
+ { "check": "Флаг", "name": "Дубль" }
+ ]
+ }
+}
diff --git a/tests/skills/cases/form-compile/namespace-collision-ok.json b/tests/skills/cases/form-compile/namespace-collision-ok.json
new file mode 100644
index 00000000..b68e79d4
--- /dev/null
+++ b/tests/skills/cases/form-compile/namespace-collision-ok.json
@@ -0,0 +1,26 @@
+{
+ "name": "Имя реквизита == имя элемента — легально (раздельные неймспейсы)",
+ "preRun": [
+ {
+ "script": "meta-compile/scripts/meta-compile",
+ "input": { "type": "DataProcessor", "name": "ТестНеймспейс" },
+ "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
+ },
+ {
+ "script": "form-add/scripts/form-add",
+ "args": { "-ObjectPath": "{workDir}/DataProcessors/ТестНеймспейс.xml", "-FormName": "Форма" }
+ }
+ ],
+ "params": { "outputPath": "DataProcessors/ТестНеймспейс/Forms/Форма/Ext/Form.xml" },
+ "validatePath": "DataProcessors/ТестНеймспейс/Forms/Форма/Ext/Form.xml",
+ "input": {
+ "title": "Неймспейсы",
+ "attributes": [
+ { "name": "Объект", "type": "DataProcessorObject.ТестНеймспейс", "main": true },
+ { "name": "Сумма", "type": "number(15,2)" }
+ ],
+ "elements": [
+ { "input": "Сумма", "name": "Сумма", "path": "Сумма" }
+ ]
+ }
+}
diff --git a/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/Configuration.xml b/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/Configuration.xml
new file mode 100644
index 00000000..842c33a9
--- /dev/null
+++ b/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/Configuration.xml
@@ -0,0 +1,252 @@
+
+
+
+
+
+ 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
+
+
+
+ TestConfig
+
+
+ ru
+ TestConfig
+
+
+
+
+ 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/form-compile/snapshots/namespace-collision-ok/DataProcessors/ТестНеймспейс.xml b/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/DataProcessors/ТестНеймспейс.xml
new file mode 100644
index 00000000..0cd993bc
--- /dev/null
+++ b/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/DataProcessors/ТестНеймспейс.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+
+ ТестНеймспейс
+
+
+ ru
+ Тест неймспейс
+
+
+
+ false
+ DataProcessor.ТестНеймспейс.Form.Форма
+
+ false
+
+
+
+
+
+
+
+
diff --git a/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/DataProcessors/ТестНеймспейс/Ext/ManagerModule.bsl b/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/DataProcessors/ТестНеймспейс/Ext/ManagerModule.bsl
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/DataProcessors/ТестНеймспейс/Ext/ObjectModule.bsl b/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/DataProcessors/ТестНеймспейс/Ext/ObjectModule.bsl
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/DataProcessors/ТестНеймспейс/Forms/Форма.xml b/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/DataProcessors/ТестНеймспейс/Forms/Форма.xml
new file mode 100644
index 00000000..dffeea01
--- /dev/null
+++ b/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/DataProcessors/ТестНеймспейс/Forms/Форма.xml
@@ -0,0 +1,22 @@
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/DataProcessors/ТестНеймспейс/Forms/Форма/Ext/Form.xml b/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/DataProcessors/ТестНеймспейс/Forms/Форма/Ext/Form.xml
new file mode 100644
index 00000000..8d850885
--- /dev/null
+++ b/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/DataProcessors/ТестНеймспейс/Forms/Форма/Ext/Form.xml
@@ -0,0 +1,42 @@
+
+
diff --git a/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/DataProcessors/ТестНеймспейс/Forms/Форма/Ext/Form/Module.bsl b/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/DataProcessors/ТестНеймспейс/Forms/Форма/Ext/Form/Module.bsl
new file mode 100644
index 00000000..8ead4cec
--- /dev/null
+++ b/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/DataProcessors/ТестНеймспейс/Forms/Форма/Ext/Form/Module.bsl
@@ -0,0 +1,19 @@
+#Область ОбработчикиСобытийФормы
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовФормы
+
+#КонецОбласти
+
+#Область ОбработчикиКомандФормы
+
+#КонецОбласти
+
+#Область ОбработчикиОповещений
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git a/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/Ext/ClientApplicationInterface.xml b/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/Ext/ClientApplicationInterface.xml
new file mode 100644
index 00000000..3c1161b2
--- /dev/null
+++ b/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/Ext/ClientApplicationInterface.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ UUID-002
+
+
+
+
+ UUID-004
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/Languages/Русский.xml b/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/Languages/Русский.xml
new file mode 100644
index 00000000..37c60d78
--- /dev/null
+++ b/tests/skills/cases/form-compile/snapshots/namespace-collision-ok/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/form-edit/dup-element-existing.json b/tests/skills/cases/form-edit/dup-element-existing.json
new file mode 100644
index 00000000..a39a2016
--- /dev/null
+++ b/tests/skills/cases/form-edit/dup-element-existing.json
@@ -0,0 +1,35 @@
+{
+ "name": "Добавление элемента с уже существующим именем → [ERROR] exit 1",
+ "preRun": [
+ {
+ "script": "meta-compile/scripts/meta-compile",
+ "input": { "type": "DataProcessor", "name": "ТестЕдитДубль" },
+ "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
+ },
+ {
+ "script": "form-add/scripts/form-add",
+ "args": { "-ObjectPath": "{workDir}/DataProcessors/ТестЕдитДубль.xml", "-FormName": "Форма" }
+ },
+ {
+ "script": "form-compile/scripts/form-compile",
+ "input": {
+ "title": "Тест",
+ "attributes": [
+ { "name": "Объект", "type": "DataProcessorObject.ТестЕдитДубль", "main": true },
+ { "name": "Поле1", "type": "string(100)" }
+ ],
+ "elements": [
+ { "input": "Поле1", "path": "Поле1", "title": "Поле 1" }
+ ]
+ },
+ "args": { "-JsonPath": "{inputFile}", "-OutputPath": "{workDir}/DataProcessors/ТестЕдитДубль/Forms/Форма/Ext/Form.xml" }
+ }
+ ],
+ "params": { "formPath": "DataProcessors/ТестЕдитДубль/Forms/Форма/Ext/Form.xml" },
+ "expectError": true,
+ "input": {
+ "elements": [
+ { "input": "Поле1", "path": "Поле1", "title": "Дубль имени" }
+ ]
+ }
+}
diff --git a/tests/skills/cases/form-validate/dup-element-name.json b/tests/skills/cases/form-validate/dup-element-name.json
new file mode 100644
index 00000000..d0866c8f
--- /dev/null
+++ b/tests/skills/cases/form-validate/dup-element-name.json
@@ -0,0 +1,6 @@
+{
+ "name": "Ошибка: дублирующееся имя элемента",
+ "setup": "fixture:broken-duplicate-name",
+ "params": { "formPath": "DataProcessors/Bad/Forms/Форма" },
+ "expectError": true
+}
diff --git a/tests/skills/cases/form-validate/fixtures/broken-duplicate-name/DataProcessors/Bad/Forms/Форма/Ext/Form.xml b/tests/skills/cases/form-validate/fixtures/broken-duplicate-name/DataProcessors/Bad/Forms/Форма/Ext/Form.xml
new file mode 100644
index 00000000..6fff2cec
--- /dev/null
+++ b/tests/skills/cases/form-validate/fixtures/broken-duplicate-name/DataProcessors/Bad/Forms/Форма/Ext/Form.xml
@@ -0,0 +1,31 @@
+
+