diff --git a/tests/skills/cases/cfe-borrow/snapshots/format-221/.fixture-stamp b/tests/skills/cases/cfe-borrow/snapshots/format-221/.fixture-stamp
new file mode 100644
index 00000000..8a227cb8
--- /dev/null
+++ b/tests/skills/cases/cfe-borrow/snapshots/format-221/.fixture-stamp
@@ -0,0 +1,3 @@
+-FormatVersion 2.21 -CompatibilityMode Version8_3_27
+8fb85bbe61436bce439c6daf6d6f56a66ff080bd
+65b07ff47fc3c8c18c080c7a1f9e94ca705a7aff
\ No newline at end of file
diff --git a/tests/skills/cases/cfe-borrow/snapshots/format-221/Configuration.xml b/tests/skills/cases/cfe-borrow/snapshots/format-221/Configuration.xml
index 2a84f2ed..698d4709 100644
--- a/tests/skills/cases/cfe-borrow/snapshots/format-221/Configuration.xml
+++ b/tests/skills/cases/cfe-borrow/snapshots/format-221/Configuration.xml
@@ -230,6 +230,10 @@
AllIncomingShareRequestsTypesProcessing
false
+
+ TextToSpeech
+ false
+
diff --git a/tests/skills/cases/cfe-init/snapshots/format-221/.fixture-stamp b/tests/skills/cases/cfe-init/snapshots/format-221/.fixture-stamp
new file mode 100644
index 00000000..8a227cb8
--- /dev/null
+++ b/tests/skills/cases/cfe-init/snapshots/format-221/.fixture-stamp
@@ -0,0 +1,3 @@
+-FormatVersion 2.21 -CompatibilityMode Version8_3_27
+8fb85bbe61436bce439c6daf6d6f56a66ff080bd
+65b07ff47fc3c8c18c080c7a1f9e94ca705a7aff
\ No newline at end of file
diff --git a/tests/skills/cases/cfe-init/snapshots/format-221/Configuration.xml b/tests/skills/cases/cfe-init/snapshots/format-221/Configuration.xml
index 47648c8a..3080965f 100644
--- a/tests/skills/cases/cfe-init/snapshots/format-221/Configuration.xml
+++ b/tests/skills/cases/cfe-init/snapshots/format-221/Configuration.xml
@@ -230,6 +230,10 @@
AllIncomingShareRequestsTypesProcessing
false
+
+ TextToSpeech
+ false
+
diff --git a/tests/skills/cases/form-add/snapshots/format-221/.fixture-stamp b/tests/skills/cases/form-add/snapshots/format-221/.fixture-stamp
new file mode 100644
index 00000000..8a227cb8
--- /dev/null
+++ b/tests/skills/cases/form-add/snapshots/format-221/.fixture-stamp
@@ -0,0 +1,3 @@
+-FormatVersion 2.21 -CompatibilityMode Version8_3_27
+8fb85bbe61436bce439c6daf6d6f56a66ff080bd
+65b07ff47fc3c8c18c080c7a1f9e94ca705a7aff
\ No newline at end of file
diff --git a/tests/skills/cases/form-add/snapshots/format-221/Configuration.xml b/tests/skills/cases/form-add/snapshots/format-221/Configuration.xml
index 2a84f2ed..698d4709 100644
--- a/tests/skills/cases/form-add/snapshots/format-221/Configuration.xml
+++ b/tests/skills/cases/form-add/snapshots/format-221/Configuration.xml
@@ -230,6 +230,10 @@
AllIncomingShareRequestsTypesProcessing
false
+
+ TextToSpeech
+ false
+
diff --git a/tests/skills/cases/form-compile/snapshots/format-221/.fixture-stamp b/tests/skills/cases/form-compile/snapshots/format-221/.fixture-stamp
new file mode 100644
index 00000000..8a227cb8
--- /dev/null
+++ b/tests/skills/cases/form-compile/snapshots/format-221/.fixture-stamp
@@ -0,0 +1,3 @@
+-FormatVersion 2.21 -CompatibilityMode Version8_3_27
+8fb85bbe61436bce439c6daf6d6f56a66ff080bd
+65b07ff47fc3c8c18c080c7a1f9e94ca705a7aff
\ No newline at end of file
diff --git a/tests/skills/cases/form-compile/snapshots/format-221/Configuration.xml b/tests/skills/cases/form-compile/snapshots/format-221/Configuration.xml
index 2a84f2ed..698d4709 100644
--- a/tests/skills/cases/form-compile/snapshots/format-221/Configuration.xml
+++ b/tests/skills/cases/form-compile/snapshots/format-221/Configuration.xml
@@ -230,6 +230,10 @@
AllIncomingShareRequestsTypesProcessing
false
+
+ TextToSpeech
+ false
+
diff --git a/tests/skills/cases/meta-compile/snapshots/format-221-pal/.fixture-stamp b/tests/skills/cases/meta-compile/snapshots/format-221-pal/.fixture-stamp
new file mode 100644
index 00000000..8a227cb8
--- /dev/null
+++ b/tests/skills/cases/meta-compile/snapshots/format-221-pal/.fixture-stamp
@@ -0,0 +1,3 @@
+-FormatVersion 2.21 -CompatibilityMode Version8_3_27
+8fb85bbe61436bce439c6daf6d6f56a66ff080bd
+65b07ff47fc3c8c18c080c7a1f9e94ca705a7aff
\ No newline at end of file
diff --git a/tests/skills/cases/meta-compile/snapshots/format-221-pal/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/format-221-pal/Configuration.xml
index 639d97c2..807ab692 100644
--- a/tests/skills/cases/meta-compile/snapshots/format-221-pal/Configuration.xml
+++ b/tests/skills/cases/meta-compile/snapshots/format-221-pal/Configuration.xml
@@ -230,6 +230,10 @@
AllIncomingShareRequestsTypesProcessing
false
+
+ TextToSpeech
+ false
+
diff --git a/tests/skills/cases/meta-edit/snapshots/format-221/.fixture-stamp b/tests/skills/cases/meta-edit/snapshots/format-221/.fixture-stamp
new file mode 100644
index 00000000..8a227cb8
--- /dev/null
+++ b/tests/skills/cases/meta-edit/snapshots/format-221/.fixture-stamp
@@ -0,0 +1,3 @@
+-FormatVersion 2.21 -CompatibilityMode Version8_3_27
+8fb85bbe61436bce439c6daf6d6f56a66ff080bd
+65b07ff47fc3c8c18c080c7a1f9e94ca705a7aff
\ No newline at end of file
diff --git a/tests/skills/cases/meta-edit/snapshots/format-221/Configuration.xml b/tests/skills/cases/meta-edit/snapshots/format-221/Configuration.xml
index 3c8c93fb..246b5ad9 100644
--- a/tests/skills/cases/meta-edit/snapshots/format-221/Configuration.xml
+++ b/tests/skills/cases/meta-edit/snapshots/format-221/Configuration.xml
@@ -230,6 +230,10 @@
AllIncomingShareRequestsTypesProcessing
false
+
+ TextToSpeech
+ false
+
diff --git a/tests/skills/cases/mxl-compile/format-221.json b/tests/skills/cases/mxl-compile/format-221.json
index 845658d0..d912fef2 100644
--- a/tests/skills/cases/mxl-compile/format-221.json
+++ b/tests/skills/cases/mxl-compile/format-221.json
@@ -28,5 +28,6 @@
"file": "Template.xml",
"text": "xmlns=\"http://v8.1c.ru/8.2/data/spreadsheet\" xmlns:pal=\"http://v8.1c.ru/8.1/data/ui/colors/palette\" xmlns:style="
}
- }
+ },
+ "noSnapshot": "фикстура-конфигурация нужна только чтобы навык увидел версию 2.21; её UUID попадают в снэпшот, а у этого навыка normalizeUuids=false — эталон дрожал бы на каждой пересборке фикстуры. Предмет кейса проверяет fileContains."
}
diff --git a/tests/skills/cases/mxl-compile/snapshots/format-221/Configuration.xml b/tests/skills/cases/mxl-compile/snapshots/format-221/Configuration.xml
deleted file mode 100644
index bf135d15..00000000
--- a/tests/skills/cases/mxl-compile/snapshots/format-221/Configuration.xml
+++ /dev/null
@@ -1,265 +0,0 @@
-
-
-
-
-
- 9cd510cd-abfc-11d4-9434-004095e12fc7
- 0b4fac2a-6776-4bfc-af10-ad5377cef392
-
-
- 9fcd25a0-4822-11d4-9414-008048da11f9
- 8392c8a2-cb48-45d2-bb6f-27c67bf9608b
-
-
- e3687481-0a87-462c-a166-9f34594f9bba
- 68b934bb-706b-484e-ba96-523db5c1a1c6
-
-
- 9de14907-ec23-4a07-96f0-85521cb6b53b
- 990bbd21-975b-478a-aab0-020172faff72
-
-
- 51f2d5d8-ea4d-4064-8892-82951750031e
- 30407c9e-f7a1-43d6-8d8e-4aca82398bd0
-
-
- e68182ea-4237-4383-967f-90c1e3370bc7
- 19be8397-1ee6-4a8c-b4c7-02aae4bb6372
-
-
- fb282519-d103-4dd3-bc12-cb271d631dfc
- cb1279b3-b562-4a00-83d4-1d407c27a0c4
-
-
-
- TestConfig
-
-
- ru
- TestConfig
-
-
-
-
- Version8_3_27
- 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
-
-
-
-
-
- NavigationLeft
- Auto
- Normal
- OpenDataInDialogs
-
-
-
-
- Language.Русский
-
-
-
-
-
- Managed
- NotAutoFree
- DontUse
- DontUse
- TaxiEnableVersion8_2
- DontUse
- DontUse
- Version8_3_27
-
-
-
- Русский
-
-
-
\ No newline at end of file
diff --git a/tests/skills/cases/mxl-compile/snapshots/format-221/Ext/ClientApplicationInterface.xml b/tests/skills/cases/mxl-compile/snapshots/format-221/Ext/ClientApplicationInterface.xml
deleted file mode 100644
index 8fd4bb9e..00000000
--- a/tests/skills/cases/mxl-compile/snapshots/format-221/Ext/ClientApplicationInterface.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
- cbab57f2-a0f3-4f0a-89ea-4cb19570ab75
-
-
-
-
- b553047f-c9aa-4157-978d-448ecad24248
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/tests/skills/cases/mxl-compile/snapshots/format-221/Languages/Русский.xml b/tests/skills/cases/mxl-compile/snapshots/format-221/Languages/Русский.xml
deleted file mode 100644
index 62536e1d..00000000
--- a/tests/skills/cases/mxl-compile/snapshots/format-221/Languages/Русский.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
- Русский
-
-
- ru
- Русский
-
-
-
- ru
-
-
-
\ No newline at end of file
diff --git a/tests/skills/cases/mxl-compile/snapshots/format-221/Template.xml b/tests/skills/cases/mxl-compile/snapshots/format-221/Template.xml
deleted file mode 100644
index a0f71e7f..00000000
--- a/tests/skills/cases/mxl-compile/snapshots/format-221/Template.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
- ru
- ru
-
- ru
- Русский
- Русский
-
-
-
- 3
-
-
- 0
-
-
- 0
-
- 2
-
-
- ru
- Тест
-
-
-
-
-
-
- true
- 1
- 1
- 1
-
- Шапка
-
- Rows
- 0
- 0
- -1
- -1
-
-
-
-
- 10
-
-
- 0
- Text
-
-
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/format-221/.fixture-stamp b/tests/skills/cases/role-compile/snapshots/format-221/.fixture-stamp
new file mode 100644
index 00000000..8a227cb8
--- /dev/null
+++ b/tests/skills/cases/role-compile/snapshots/format-221/.fixture-stamp
@@ -0,0 +1,3 @@
+-FormatVersion 2.21 -CompatibilityMode Version8_3_27
+8fb85bbe61436bce439c6daf6d6f56a66ff080bd
+65b07ff47fc3c8c18c080c7a1f9e94ca705a7aff
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/format-221/Configuration.xml b/tests/skills/cases/role-compile/snapshots/format-221/Configuration.xml
index d45d1074..f7497a58 100644
--- a/tests/skills/cases/role-compile/snapshots/format-221/Configuration.xml
+++ b/tests/skills/cases/role-compile/snapshots/format-221/Configuration.xml
@@ -230,6 +230,10 @@
AllIncomingShareRequestsTypesProcessing
false
+
+ TextToSpeech
+ false
+
diff --git a/tests/skills/cases/subsystem-compile/snapshots/format-221/.fixture-stamp b/tests/skills/cases/subsystem-compile/snapshots/format-221/.fixture-stamp
new file mode 100644
index 00000000..8a227cb8
--- /dev/null
+++ b/tests/skills/cases/subsystem-compile/snapshots/format-221/.fixture-stamp
@@ -0,0 +1,3 @@
+-FormatVersion 2.21 -CompatibilityMode Version8_3_27
+8fb85bbe61436bce439c6daf6d6f56a66ff080bd
+65b07ff47fc3c8c18c080c7a1f9e94ca705a7aff
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-compile/snapshots/format-221/Configuration.xml b/tests/skills/cases/subsystem-compile/snapshots/format-221/Configuration.xml
index 64da9d46..c5e72b04 100644
--- a/tests/skills/cases/subsystem-compile/snapshots/format-221/Configuration.xml
+++ b/tests/skills/cases/subsystem-compile/snapshots/format-221/Configuration.xml
@@ -230,6 +230,10 @@
AllIncomingShareRequestsTypesProcessing
false
+
+ TextToSpeech
+ false
+
diff --git a/tests/skills/cases/subsystem-edit/snapshots/format-221/.fixture-stamp b/tests/skills/cases/subsystem-edit/snapshots/format-221/.fixture-stamp
new file mode 100644
index 00000000..8a227cb8
--- /dev/null
+++ b/tests/skills/cases/subsystem-edit/snapshots/format-221/.fixture-stamp
@@ -0,0 +1,3 @@
+-FormatVersion 2.21 -CompatibilityMode Version8_3_27
+8fb85bbe61436bce439c6daf6d6f56a66ff080bd
+65b07ff47fc3c8c18c080c7a1f9e94ca705a7aff
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-edit/snapshots/format-221/Configuration.xml b/tests/skills/cases/subsystem-edit/snapshots/format-221/Configuration.xml
index a1d79ea1..1ad84737 100644
--- a/tests/skills/cases/subsystem-edit/snapshots/format-221/Configuration.xml
+++ b/tests/skills/cases/subsystem-edit/snapshots/format-221/Configuration.xml
@@ -230,6 +230,10 @@
AllIncomingShareRequestsTypesProcessing
false
+
+ TextToSpeech
+ false
+
diff --git a/tests/skills/cases/template-add/snapshots/format-221/.fixture-stamp b/tests/skills/cases/template-add/snapshots/format-221/.fixture-stamp
new file mode 100644
index 00000000..8a227cb8
--- /dev/null
+++ b/tests/skills/cases/template-add/snapshots/format-221/.fixture-stamp
@@ -0,0 +1,3 @@
+-FormatVersion 2.21 -CompatibilityMode Version8_3_27
+8fb85bbe61436bce439c6daf6d6f56a66ff080bd
+65b07ff47fc3c8c18c080c7a1f9e94ca705a7aff
\ No newline at end of file
diff --git a/tests/skills/cases/template-add/snapshots/format-221/Configuration.xml b/tests/skills/cases/template-add/snapshots/format-221/Configuration.xml
index f39850aa..399e270f 100644
--- a/tests/skills/cases/template-add/snapshots/format-221/Configuration.xml
+++ b/tests/skills/cases/template-add/snapshots/format-221/Configuration.xml
@@ -230,6 +230,10 @@
AllIncomingShareRequestsTypesProcessing
false
+
+ TextToSpeech
+ false
+
diff --git a/tests/skills/cases/xdto-compile/snapshots/format-221/.fixture-stamp b/tests/skills/cases/xdto-compile/snapshots/format-221/.fixture-stamp
new file mode 100644
index 00000000..8a227cb8
--- /dev/null
+++ b/tests/skills/cases/xdto-compile/snapshots/format-221/.fixture-stamp
@@ -0,0 +1,3 @@
+-FormatVersion 2.21 -CompatibilityMode Version8_3_27
+8fb85bbe61436bce439c6daf6d6f56a66ff080bd
+65b07ff47fc3c8c18c080c7a1f9e94ca705a7aff
\ No newline at end of file
diff --git a/tests/skills/cases/xdto-compile/snapshots/format-221/Configuration.xml b/tests/skills/cases/xdto-compile/snapshots/format-221/Configuration.xml
index 4c3fd43c..0c25fb36 100644
--- a/tests/skills/cases/xdto-compile/snapshots/format-221/Configuration.xml
+++ b/tests/skills/cases/xdto-compile/snapshots/format-221/Configuration.xml
@@ -230,6 +230,10 @@
AllIncomingShareRequestsTypesProcessing
false
+
+ TextToSpeech
+ false
+
diff --git a/tests/skills/runner.mjs b/tests/skills/runner.mjs
index 524bc709..45f3596d 100644
--- a/tests/skills/runner.mjs
+++ b/tests/skills/runner.mjs
@@ -5,6 +5,7 @@
import { execFileSync, execFile } from 'child_process';
import { existsSync, mkdirSync, mkdtempSync, rmSync, readFileSync, writeFileSync,
readdirSync, statSync, cpSync, copyFileSync } from 'fs';
+import { createHash } from 'crypto';
import { join, resolve, dirname, relative, basename, extname } from 'path';
import { tmpdir, cpus } from 'os';
@@ -127,6 +128,17 @@ function ensureSetup(setupName, runtime, skillCasesDir) {
// (<=8_3_26 → 5, >=8_3_27 → 9). Отсюда две 2.20-фикстуры с разными режимами.
// Фикстура 2.18 (8.3.25) держит границу между свойствами: TypeReductionMode там уже есть,
// а LineNumberLength ещё нет — он появился только в 2.20.
+ // Отпечаток фикстуры: аргументы плюс содержимое ОБОИХ портов cf-init. Порты берём оба,
+ // чтобы каталог, собранный одним рантаймом, не пережил правку другого.
+ const fixtureStamp = (args) => {
+ const parts = [args.join(' ')];
+ for (const ext of ['.ps1', '.py']) {
+ const p = resolve(REPO_ROOT, '.claude/skills/cf-init/scripts/cf-init' + ext);
+ parts.push(existsSync(p) ? createHash('sha1').update(readFileSync(p)).digest('hex') : 'нет');
+ }
+ return parts.join('\n');
+ };
+
const EMPTY_CONFIGS = {
'empty-config': [],
'empty-config-218': ['-FormatVersion', '2.18', '-CompatibilityMode', 'Version8_3_24'],
@@ -137,12 +149,21 @@ function ensureSetup(setupName, runtime, skillCasesDir) {
};
if (EMPTY_CONFIGS[setupName]) {
const cached = join(CACHE, setupName);
- if (existsSync(cached)) return cached;
+ // Кэш инвалидируется по содержимому cf-init: без этого правка навыка не доходила до
+ // фикстуры — старый каталог жил вечно, снэпшоты записывались с ним, и расхождение
+ // всплывало только на машине с пустым кэшем (поймано на маке, свойство TextToSpeech).
+ const stamp = join(cached, '.fixture-stamp');
+ const want = fixtureStamp(EMPTY_CONFIGS[setupName]);
+ if (existsSync(cached)) {
+ if (existsSync(stamp) && readFileSync(stamp, 'utf8') === want) return cached;
+ rmSync(cached, { recursive: true, force: true });
+ }
mkdirSync(cached, { recursive: true });
const script = resolveScript('cf-init/scripts/cf-init', runtime);
try {
execSkillRaw(runtime, script, ['-Name', 'TestConfig', '-OutputDir', cached, ...EMPTY_CONFIGS[setupName]]);
+ writeFileSync(stamp, want, 'utf8');
} catch (e) {
rmSync(cached, { recursive: true, force: true });
throw new Error(`Failed to create ${setupName} fixture: ${e.message}`);