mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-06 11:18:56 +03:00
0d5d3451ff
cf-edit add-childObject was a low-level XML-manipulation operation
with no file-existence validation — callers could register a reference
to any Type.Name in Configuration.xml's ChildObjects without the
underlying file existing on disk. Platform then refused to load:
"Файл объекта не существует".
The 4 failing tests (add-objects, remove-object, add-default-role,
set-default-roles) all used this operation with fake references in
either main input or preRun, and had no way to pass verify-snapshots
because the cf-init-ed config had no actual object files.
User observation: this is the tests being wrong, not the skill.
meta-compile/role-compile/subsystem-compile already auto-register
every new object in Configuration.xml as part of their normal flow
(meta-compile.ps1:2949-3068, role-compile.ps1:667-747,
subsystem-compile.ps1:430-506). Nobody should be calling cf-edit
add-childObject to create a new object — they should be calling the
profile skill. cf-edit add-childObject is only for rare recovery
scenarios: rolled-back Configuration.xml with intact object files,
re-import from DB dump that clobbered the root but left srcfiles.
Changes:
1. cf-edit.ps1/py: Do-AddChildObject now checks that the target file
exists at {ConfigDir}/{PluralDir}/{Name}.xml before registering.
On miss, exits 1 with a message that names the expected path and
points the user at the right skill (/meta-compile, /role-compile,
or /subsystem-compile depending on type). TYPE_TO_DIR mapping for
all 44 metadata types covers irregular plurals (FilterCriteria,
BusinessProcesses, ChartsOfAccounts, ChartsOfCharacteristicTypes,
ChartsOfCalculationTypes).
2. Tests: 4 existing cases rewritten to build realistic fixtures via
meta-compile/role-compile preRun (both skills auto-register, so
the resulting Configuration.xml already references the preRun
objects). add-objects now exercises the round-trip recovery
scenario: meta-compile creates Catalog.Товары and Document.ПриходТоваров
(auto-registered) → cf-edit remove-childObject un-registers both
(files remain) → main run re-registers via add-childObject. This
tests exactly the rollback-recovery use case the operation exists for.
3. New add-missing-errors case: negative test with expectError:
"Object file not found". Verifies the new hard-error path.
4. verify-snapshots.mjs: added symmetric expectError handling (runner.mjs
already had it at line 514). If caseData.expectError is set,
expect skill to fail; check stderr substring match; skip db-load
and mark passed. Without this, negative tests would go red in
verify-snapshots even though runner.mjs accepts them.
5. SKILL.md / reference.md: documented the new constraint and the
redirection to profile skills. Kept mention of legitimate use case
(rollback recovery).
Bumped cf-edit.ps1/py v1.0→v1.1.
Verification:
- runner --filter cf-edit (PS1): 2/6 → 7/7 (6 positive + 1 negative)
- runner --filter cf-edit --runtime python: 7/7 (dual-port clean)
- verify-snapshots --skill cf-edit: 2/6 → 7/7
With this landed P3 from debug/snapshot-verify/NEXT-STEPS.md is closed.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
256 lines
9.7 KiB
XML
256 lines
9.7 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
|
|
<Configuration uuid="UUID-001">
|
|
<InternalInfo>
|
|
<xr:ContainedObject>
|
|
<xr:ClassId>UUID-002</xr:ClassId>
|
|
<xr:ObjectId>UUID-003</xr:ObjectId>
|
|
</xr:ContainedObject>
|
|
<xr:ContainedObject>
|
|
<xr:ClassId>UUID-004</xr:ClassId>
|
|
<xr:ObjectId>UUID-005</xr:ObjectId>
|
|
</xr:ContainedObject>
|
|
<xr:ContainedObject>
|
|
<xr:ClassId>UUID-006</xr:ClassId>
|
|
<xr:ObjectId>UUID-007</xr:ObjectId>
|
|
</xr:ContainedObject>
|
|
<xr:ContainedObject>
|
|
<xr:ClassId>UUID-008</xr:ClassId>
|
|
<xr:ObjectId>UUID-009</xr:ObjectId>
|
|
</xr:ContainedObject>
|
|
<xr:ContainedObject>
|
|
<xr:ClassId>UUID-010</xr:ClassId>
|
|
<xr:ObjectId>UUID-011</xr:ObjectId>
|
|
</xr:ContainedObject>
|
|
<xr:ContainedObject>
|
|
<xr:ClassId>UUID-012</xr:ClassId>
|
|
<xr:ObjectId>UUID-013</xr:ObjectId>
|
|
</xr:ContainedObject>
|
|
<xr:ContainedObject>
|
|
<xr:ClassId>UUID-014</xr:ClassId>
|
|
<xr:ObjectId>UUID-015</xr:ObjectId>
|
|
</xr:ContainedObject>
|
|
</InternalInfo>
|
|
<Properties>
|
|
<Name>TestConfig</Name>
|
|
<Synonym>
|
|
<v8:item>
|
|
<v8:lang>ru</v8:lang>
|
|
<v8:content>TestConfig</v8:content>
|
|
</v8:item>
|
|
</Synonym>
|
|
<Comment />
|
|
<NamePrefix />
|
|
<ConfigurationExtensionCompatibilityMode>Version8_3_24</ConfigurationExtensionCompatibilityMode>
|
|
<DefaultRunMode>ManagedApplication</DefaultRunMode>
|
|
<UsePurposes>
|
|
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
|
|
</UsePurposes>
|
|
<ScriptVariant>Russian</ScriptVariant>
|
|
<DefaultRoles>
|
|
<xr:Item xsi:type="xr:MDObjectRef">Role.ПолныеПрава</xr:Item>
|
|
<xr:Item xsi:type="xr:MDObjectRef">Role.Администратор</xr:Item>
|
|
</DefaultRoles>
|
|
<Vendor></Vendor>
|
|
<Version></Version>
|
|
<UpdateCatalogAddress />
|
|
<IncludeHelpInContents>false</IncludeHelpInContents>
|
|
<UseManagedFormInOrdinaryApplication>false</UseManagedFormInOrdinaryApplication>
|
|
<UseOrdinaryFormInManagedApplication>false</UseOrdinaryFormInManagedApplication>
|
|
<AdditionalFullTextSearchDictionaries />
|
|
<CommonSettingsStorage />
|
|
<ReportsUserSettingsStorage />
|
|
<ReportsVariantsStorage />
|
|
<FormDataSettingsStorage />
|
|
<DynamicListsUserSettingsStorage />
|
|
<URLExternalDataStorage />
|
|
<Content />
|
|
<DefaultReportForm />
|
|
<DefaultReportVariantForm />
|
|
<DefaultReportSettingsForm />
|
|
<DefaultReportAppearanceTemplate />
|
|
<DefaultDynamicListSettingsForm />
|
|
<DefaultSearchForm />
|
|
<DefaultDataHistoryChangeHistoryForm />
|
|
<DefaultDataHistoryVersionDataForm />
|
|
<DefaultDataHistoryVersionDifferencesForm />
|
|
<DefaultCollaborationSystemUsersChoiceForm />
|
|
<RequiredMobileApplicationPermissions />
|
|
<UsedMobileApplicationFunctionalities>
|
|
<app:functionality>
|
|
<app:functionality>Biometrics</app:functionality>
|
|
<app:use>true</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>Location</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>BackgroundLocation</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>BluetoothPrinters</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>WiFiPrinters</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>Contacts</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>Calendars</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>PushNotifications</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>LocalNotifications</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>InAppPurchases</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>PersonalComputerFileExchange</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>Ads</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>NumberDialing</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>CallProcessing</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>CallLog</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>AutoSendSMS</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>ReceiveSMS</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>SMSLog</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>Camera</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>Microphone</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>MusicLibrary</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>PictureAndVideoLibraries</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>AudioPlaybackAndVibration</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>BackgroundAudioPlaybackAndVibration</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>InstallPackages</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>OSBackup</app:functionality>
|
|
<app:use>true</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>ApplicationUsageStatistics</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>BarcodeScanning</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>BackgroundAudioRecording</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>AllFilesAccess</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>Videoconferences</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>NFC</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>DocumentScanning</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>SpeechToText</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>Geofences</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>IncomingShareRequests</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
<app:functionality>
|
|
<app:functionality>AllIncomingShareRequestsTypesProcessing</app:functionality>
|
|
<app:use>false</app:use>
|
|
</app:functionality>
|
|
</UsedMobileApplicationFunctionalities>
|
|
<StandaloneConfigurationRestrictionRoles />
|
|
<MobileApplicationURLs />
|
|
<AllowedIncomingShareRequestTypes />
|
|
<MainClientApplicationWindowMode>Normal</MainClientApplicationWindowMode>
|
|
<DefaultInterface />
|
|
<DefaultStyle />
|
|
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
|
<BriefInformation />
|
|
<DetailedInformation />
|
|
<Copyright />
|
|
<VendorInformationAddress />
|
|
<ConfigurationInformationAddress />
|
|
<DataLockControlMode>Managed</DataLockControlMode>
|
|
<ObjectAutonumerationMode>NotAutoFree</ObjectAutonumerationMode>
|
|
<ModalityUseMode>DontUse</ModalityUseMode>
|
|
<SynchronousPlatformExtensionAndAddInCallUseMode>DontUse</SynchronousPlatformExtensionAndAddInCallUseMode>
|
|
<InterfaceCompatibilityMode>TaxiEnableVersion8_2</InterfaceCompatibilityMode>
|
|
<DatabaseTablespacesUseMode>DontUse</DatabaseTablespacesUseMode>
|
|
<CompatibilityMode>Version8_3_24</CompatibilityMode>
|
|
<DefaultConstantsForm />
|
|
</Properties>
|
|
<ChildObjects>
|
|
<Language>Русский</Language>
|
|
<Role>ПолныеПрава</Role>
|
|
<Role>Администратор</Role>
|
|
</ChildObjects>
|
|
</Configuration>
|
|
</MetaDataObject> |