Files
cc-1c-skills/tests/skills/cases/template-add/html-page-not-in-descriptor.json
T
Nick ShirokovandClaude Opus 5 69175a7a63 fix(template-add): не терять содержимое страницы при добавлении языка
Ревью вскрыло два дефекта во вчерашней ветке добавления языка — оба
воспроизведены руками.

1. Миграция старой раскладки шла ДО проверки дубля языка. При дефолтном -Lang ru
   (самый вероятный способ повторно позвать навык на старом макете) Template.html
   уже был перенесён, затем срабатывал отказ «страница ru уже существует» — и
   дескриптор не записывался вовсе. Макет оставался разобранным: страница есть,
   дескриптора нет, платформа такую раскладку снова молча игнорирует. Печатавшийся
   при этом [WARN] «создан дескриптор» был неправдой.

2. Файл страницы писался безусловно, а проверялся только список <Page> в
   дескрипторе. При рассинхроне (страница на диске есть, в дескрипторе нет —
   в том числе после дефекта 1) содержимое затиралось пустым скелетом с кодом 0.

Теперь ветка сначала разбирает состояние целиком и только потом пишет, файл
страницы не перезаписывается никогда: существующая страница подхватывается, в
дескриптор дописывается <Page>. Старая раскладка с -Lang ru — это не коллизия,
а ровно тот случай, ради которого миграция и нужна. Состояние, где есть и
Template.html, и Template/ru.html, навык не разруливает сам: отказ до изменений.

Плюс валидация -Lang: код языка идёт и в текст XML, и в имя файла, поэтому пустое
значение давало файл «.html» с пустым <Page></Page>, а разделитель пути — запись
мимо Ext/Template. Оба отказа платформы были бы тихими.

Четыре новых кейса закрывают каждый сценарий; паритет портов сверен побайтово.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 17:41:25 +03:00

47 lines
1.2 KiB
JSON

{
"name": "Страница есть на диске, но не в дескрипторе: содержимое не затирается",
"preRun": [
{
"script": "epf-init/scripts/init",
"args": {
"-Name": "МояОбработка",
"-SrcDir": "{workDir}"
}
},
{
"script": "template-add/scripts/add-template",
"args": {
"-ObjectName": "МояОбработка",
"-TemplateName": "МакетHTML",
"-TemplateType": "HTML",
"-SrcDir": "{workDir}"
}
},
{
"writeFile": {
"path": "МояОбработка/Templates/МакетHTML/Ext/Template/en.html",
"content": "РУЧНАЯ_АНГЛИЙСКАЯ_СТРАНИЦА"
}
}
],
"params": {
"objectName": "МояОбработка",
"templateName": "МакетHTML",
"templateType": "HTML"
},
"args_extra": [
"-Lang",
"en"
],
"expect": {
"stdoutContains": [
"[WARN]",
"уже лежала на диске"
],
"fileContains": {
"file": "МояОбработка/Templates/МакетHTML/Ext/Template/en.html",
"text": "РУЧНАЯ_АНГЛИЙСКАЯ_СТРАНИЦА"
}
}
}