Files
cc-1c-skills/.claude/skills/cf-edit/reference.md
T
Nick Shirokov 0d5d3451ff fix(cf-edit): reject add-childObject when object file is missing
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>
2026-04-11 20:18:05 +03:00

3.9 KiB
Raw Blame History

cf-edit — справочник операций

modify-property

Свойства для редактирования:

Скалярные

Name, Version, Vendor, Comment, NamePrefix, UpdateCatalogAddress

LocalString (многоязычные)

Synonym, BriefInformation, DetailedInformation, Copyright, VendorInformationAddress, ConfigurationInformationAddress

Enum

Свойство Допустимые значения
CompatibilityMode Version8_3_20 ... Version8_3_27, DontUse
ConfigurationExtensionCompatibilityMode то же
DefaultRunMode ManagedApplication, OrdinaryApplication, Auto
ScriptVariant Russian, English
DataLockControlMode Managed, Automatic, AutomaticAndManaged
ObjectAutonumerationMode NotAutoFree, AutoFree
ModalityUseMode DontUse, Use, UseWithWarnings
SynchronousPlatformExtensionAndAddInCallUseMode DontUse, Use, UseWithWarnings
InterfaceCompatibilityMode Taxi, TaxiEnableVersion8_2, Version8_2
DatabaseTablespacesUseMode DontUse, Use
MainClientApplicationWindowMode Normal, Fullscreen, Kiosk

Ref

DefaultLanguage — значение вида Language.Русский

Формат batch

"Version=1.0.0.1 ;; Vendor=Фирма 1С ;; Synonym=Тестовая конфигурация"

add-childObject / remove-childObject

Формат: Type.Name — XML-тип и имя объекта через точку.

Важно про add-childObject: операция регистрирует в <ChildObjects> Configuration.xml только объект, файл которого уже существует на диске (например Catalogs/Товары.xml). Если файла нет — скрипт падает с exit 1 и подсказкой. Для создания нового объекта используй профильный навык — /meta-compile (Catalog, Document, Enum, Report, регистры и т.д.), /role-compile (Role), /subsystem-compile (Subsystem). Они создают файл И регистрируют его в Configuration.xml за один вызов.

Когда add-childObject всё-таки нужен: откатили Configuration.xml (или перезаписали из выгрузки БД), а файлы объектов остались — нужно восстановить ссылки в <ChildObjects>.

При добавлении объект вставляется в каноническую позицию:

  1. Находит последний элемент того же типа → вставляет после
  2. Если тип отсутствует → находит последний элемент предшествующего типа → вставляет после
  3. Внутри одного типа — алфавитный порядок

Batch: "Catalog.Товары ;; Document.Заказ ;; Enum.ВидыОплат"

add-defaultRole / remove-defaultRole / set-defaultRoles

Имя роли: ПолныеПрава или Role.ПолныеПрава (префикс Role. добавляется автоматически).

set-defaultRoles полностью заменяет список ролей.

DefinitionFile (JSON)

[
  { "operation": "modify-property", "value": "Version=2.0.0.1 ;; Vendor=Test" },
  { "operation": "add-childObject", "value": "Catalog.Товары ;; Document.Заказ" },
  { "operation": "add-defaultRole", "value": "ПолныеПрава" }
]

Авто-валидация

После сохранения автоматически запускается cf-validate (если не указан -NoValidate).