fix(skd-validate): видимый пропуск XSD, булево без схем, корень со строчной

По итогам прогона задачи «платформа пишет: нарушен порядок» субагентом
в проекте без схем: навык отвечал «Validation OK», и модель докладывала
бы, что схема в порядке.

- Итоговая строка говорит, что XSD-проверка не выполнялась и почему:
  «XSD not checked: no schemas (/v8-xsd-fetch)» / «template outside a dump».
- xs:boolean только true/false/1/0 — собственная проверка значений, без
  схем; в XSD-проходе та же ошибка второй раз не выводится.
- Корень dataCompositionSchema (строчная): PS молча пропускал (-ne без
  регистра), py считал ошибкой. Платформа такой файл загружает, а
  конфигуратор пишет DataCompositionSchema — теперь предупреждение в
  обоих портах. Фикстура drilldown-base приведена к виду конфигуратора.
- SKILL.md: когда скачивать схемы, как читать подсказки, когда
  нарушение — дефект навыка.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018dc2yLQfw6wppbopM1Y4Ps
This commit is contained in:
Nick Shirokov
2026-09-29 19:16:11 +03:00
co-authored by Claude Opus 5.5
parent 21ebd814de
commit 292b6c97de
15 changed files with 225 additions and 52 deletions
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<dataCompositionSchema xmlns="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DataCompositionSchema xmlns="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<dataSource>
<name>Источник</name>
<dataSourceType>Local</dataSourceType>
@@ -94,4 +94,4 @@
<dcsset:name>Основной</dcsset:name>
<dcsset:settings />
</settingsVariant>
</dataCompositionSchema>
</DataCompositionSchema>
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<dataCompositionSchema xmlns="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DataCompositionSchema xmlns="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<dataSource>
<name>Источник</name>
<dataSourceType>Local</dataSourceType>
@@ -118,4 +118,4 @@
<dcsset:name>Основной</dcsset:name>
<dcsset:settings />
</settingsVariant>
</dataCompositionSchema>
</DataCompositionSchema>
@@ -0,0 +1,22 @@
{
"name": "Булево True/False без схем — ловит собственная проверка значений",
"setup": "fixture:xsd-bad-220",
"preRun": [
{
"writeFile": {
"path": ".v8-project.json",
"content": {
"xsdPath": "нет-такого-каталога"
}
}
}
],
"params": {
"templatePath": "Reports/Отчет/Templates/Схема/Ext/Template.xml"
},
"expect": {
"stdoutContains": "<value xsi:type=\"xs:boolean\">False</value> — boolean must be true or false (lowercase)"
},
"noSnapshot": "результат — только вывод",
"expectError": true
}
@@ -0,0 +1,97 @@
<?xml version="1.0" encoding="utf-8"?>
<dataCompositionSchema xmlns="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<dataSource>
<name>Источник</name>
<dataSourceType>Local</dataSourceType>
</dataSource>
<dataSet xsi:type="DataSetQuery">
<name>Основной</name>
<field xsi:type="DataSetFieldField">
<dataPath>Ресурс1</dataPath>
<field>Ресурс1</field>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>Ресурс2</dataPath>
<field>Ресурс2</field>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>Счет</dataPath>
<field>Счет</field>
</field>
<dataSource>Источник</dataSource>
<query>ВЫБРАТЬ 1</query>
</dataSet>
<template>
<name>Макет1</name>
<template xmlns:dcsat="http://v8.1c.ru/8.1/data-composition-system/area-template" xsi:type="dcsat:AreaTemplate">
<dcsat:item xsi:type="dcsat:TableRow">
<dcsat:tableCell>
<dcsat:item xsi:type="dcsat:Field">
<dcsat:value xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Заголовок</v8:content>
</v8:item>
</dcsat:value>
</dcsat:item>
</dcsat:tableCell>
</dcsat:item>
</template>
</template>
<template>
<name>Макет3</name>
<template xmlns:dcsat="http://v8.1c.ru/8.1/data-composition-system/area-template" xsi:type="dcsat:AreaTemplate">
<dcsat:item xsi:type="dcsat:TableRow">
<dcsat:tableCell>
<dcsat:item xsi:type="dcsat:Field">
<dcsat:value xsi:type="dcscor:Parameter">Счет</dcsat:value>
</dcsat:item>
<dcsat:appearance>
<dcscor:item>
<dcscor:parameter>Шрифт</dcscor:parameter>
<dcscor:value xsi:type="v8ui:Font" faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100" />
</dcscor:item>
</dcsat:appearance>
</dcsat:tableCell>
<dcsat:tableCell>
<dcsat:item xsi:type="dcsat:Field">
<dcsat:value xsi:type="dcscor:Parameter">Рес1</dcsat:value>
</dcsat:item>
<dcsat:appearance>
<dcscor:item>
<dcscor:parameter>Шрифт</dcscor:parameter>
<dcscor:value xsi:type="v8ui:Font" faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100" />
</dcscor:item>
</dcsat:appearance>
</dcsat:tableCell>
<dcsat:tableCell>
<dcsat:item xsi:type="dcsat:Field">
<dcsat:value xsi:type="dcscor:Parameter">Рес2</dcsat:value>
</dcsat:item>
<dcsat:appearance>
<dcscor:item>
<dcscor:parameter>Шрифт</dcscor:parameter>
<dcscor:value xsi:type="v8ui:Font" faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100" />
</dcscor:item>
</dcsat:appearance>
</dcsat:tableCell>
</dcsat:item>
</template>
<parameter xmlns:dcsat="http://v8.1c.ru/8.1/data-composition-system/area-template" xsi:type="dcsat:ExpressionAreaTemplateParameter">
<dcsat:name>Счет</dcsat:name>
<dcsat:expression>Представление(Счет)</dcsat:expression>
</parameter>
<parameter xmlns:dcsat="http://v8.1c.ru/8.1/data-composition-system/area-template" xsi:type="dcsat:ExpressionAreaTemplateParameter">
<dcsat:name>Рес1</dcsat:name>
<dcsat:expression>Ресурс1</dcsat:expression>
</parameter>
<parameter xmlns:dcsat="http://v8.1c.ru/8.1/data-composition-system/area-template" xsi:type="dcsat:ExpressionAreaTemplateParameter">
<dcsat:name>Рес2</dcsat:name>
<dcsat:expression>Ресурс2</dcsat:expression>
</parameter>
</template>
<settingsVariant>
<dcsset:name>Основной</dcsset:name>
<dcsset:settings />
</settingsVariant>
</dataCompositionSchema>
@@ -49,7 +49,7 @@
<valueType>
<v8:Type>xs:boolean</v8:Type>
</valueType>
<value xsi:type="xs:boolean">False</value>
<value xsi:type="xs:boolean">false</value>
<useRestriction>false</useRestriction>
</parameter>
<settingsVariant>
@@ -9,6 +9,7 @@
<field xsi:type="DataSetFieldField">
<dataPath>Число</dataPath>
<field>Число</field>
<presentationExpression>Формат(Число, "ЧГ=")</presentationExpression>
<valueType>
<v8:Type>xs:decimal</v8:Type>
<v8:NumberQualifiers>
@@ -17,7 +18,6 @@
<v8:AllowedSign>Any</v8:AllowedSign>
</v8:NumberQualifiers>
</valueType>
<presentationExpression>Формат(Число, "ЧГ=")</presentationExpression>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>Флаг</dataPath>
@@ -32,6 +32,9 @@
<calculatedField>
<dataPath>Удвоенное</dataPath>
<expression>Число * 2</expression>
<useRestriction>
<group>true</group>
</useRestriction>
<valueType>
<v8:Type>xs:decimal</v8:Type>
<v8:NumberQualifiers>
@@ -40,16 +43,13 @@
<v8:AllowedSign>Any</v8:AllowedSign>
</v8:NumberQualifiers>
</valueType>
<useRestriction>
<group>true</group>
</useRestriction>
</calculatedField>
<parameter>
<name>П</name>
<valueType>
<v8:Type>xs:boolean</v8:Type>
</valueType>
<value xsi:type="xs:boolean">False</value>
<value xsi:type="xs:boolean">false</value>
<useRestriction>false</useRestriction>
</parameter>
<settingsVariant>
@@ -73,6 +73,13 @@
<dcsset:right xsi:type="xs:boolean">true</dcsset:right>
</dcsset:item>
</dcsset:filter>
<dcsset:dataParameters>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>П</dcscor:parameter>
<dcscor:value xsi:type="xs:boolean">false</dcscor:value>
<dcsset:userSettingID>0eb70b37-3a01-40a0-81c1-98028ef06a05</dcsset:userSettingID>
</dcscor:item>
</dcsset:dataParameters>
<dcsset:outputParameters>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>Заголовок</dcscor:parameter>
@@ -84,13 +91,6 @@
</dcscor:value>
</dcscor:item>
</dcsset:outputParameters>
<dcsset:dataParameters>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>П</dcscor:parameter>
<dcscor:value xsi:type="xs:boolean">false</dcscor:value>
<dcsset:userSettingID>0930043f-cf2a-42c1-ae8c-4accf2fd2604</dcsset:userSettingID>
</dcscor:item>
</dcsset:dataParameters>
<dcsset:item xsi:type="dcsset:StructureItemGroup">
<dcsset:order>
<dcsset:item xsi:type="dcsset:OrderItemAuto"/>
@@ -0,0 +1,10 @@
{
"name": "Корень dataCompositionSchema со строчной — предупреждение: платформа загружает, конфигуратор пишет с заглавной",
"setup": "fixture:root-lowercase",
"params": { "templatePath": "Template.xml" },
"expect": {
"stdoutContains": "[WARN] Root element is 'dataCompositionSchema' — the platform loads it, but the Designer writes 'DataCompositionSchema'",
"stdoutNotContains": "[ERROR]"
},
"noSnapshot": "результат — только вывод"
}
@@ -1,5 +1,5 @@
{
"name": "XSD точной версии: подсказки по порядку и сжатый текст без пространств имён",
"name": "XSD точной версии: подсказки по порядку; False — один раз, собственной проверкой",
"setup": "fixture:xsd-bad-220",
"requires": ".v8-xsd/2.20",
"preRun": [
@@ -20,10 +20,14 @@
"stdoutContains": [
"[ERROR] XSD 2.20, line 20: field/presentationExpression: must come before <valueType>",
"[ERROR] XSD 2.20, line 43: calculatedField/useRestriction: must come before <valueType>",
"[ERROR] XSD 2.20, line 52: parameter/value:",
"[ERROR] XSD 2.20, line 87: settings/dataParameters: must come before <outputParameters>"
"[ERROR] XSD 2.20, line 87: settings/dataParameters: must come before <outputParameters>",
"<value xsi:type=\"xs:boolean\">False</value> — boolean must be true or false (lowercase)",
"=== Result: 4 errors"
],
"stdoutNotContains": "http://v8.1c.ru"
"stdoutNotContains": [
"http://v8.1c.ru",
"parameter/value"
]
},
"noSnapshot": "результат — только вывод; схемы 1С не должны попасть в эталон"
}
@@ -1,5 +1,5 @@
{
"name": "Шаблон вне выгрузки — версия формата неизвестна, проверка не выполняется",
"name": "Шаблон вне выгрузки — версия формата неизвестна, пометка в итоговой строке",
"setup": "fixture:xsd-no-anchor",
"preRun": [
{
@@ -24,7 +24,7 @@
"-Detailed"
],
"expect": {
"stdoutContains": "[OK] XSD: format version unknown (template outside a dump) — not checked",
"stdoutContains": "checks; XSD not checked: template outside a dump) ===",
"stdoutNotContains": [
"[ERROR]",
"[WARN]"
@@ -1,6 +1,6 @@
{
"name": "Каталога схем нет, -Detailed — строка о пропуске",
"setup": "fixture:xsd-bad-220",
"name": "Каталога схем нет, -Detailed — пометка в итоговой строке",
"setup": "fixture:xsd-good-220",
"preRun": [
{
"writeFile": {
@@ -18,7 +18,7 @@
"-Detailed"
],
"expect": {
"stdoutContains": "[OK] XSD: no schemas in project — not checked",
"stdoutContains": "checks; XSD not checked: no schemas (/v8-xsd-fetch)) ===",
"stdoutNotContains": [
"[ERROR]",
"[WARN]"
@@ -1,6 +1,6 @@
{
"name": "Каталога схем нет — проверки нет, строк XSD в выводе нет",
"setup": "fixture:xsd-bad-220",
"name": "Каталога схем нет — проверки нет, итоговая строка говорит об этом",
"setup": "fixture:xsd-good-220",
"preRun": [
{
"writeFile": {
@@ -15,8 +15,14 @@
"templatePath": "Reports/Отчет/Templates/Схема/Ext/Template.xml"
},
"expect": {
"stdoutContains": "=== Validation OK",
"stdoutNotContains": "XSD"
"stdoutContains": [
"=== Validation OK: Template.xml (",
"checks; XSD not checked: no schemas (/v8-xsd-fetch)) ==="
],
"stdoutNotContains": [
"[ERROR]",
"[WARN]"
]
},
"noSnapshot": "результат — только вывод"
}
@@ -1,6 +1,6 @@
{
"name": "В каталоге схем только старшие версии — предупреждение, проверка не выполняется",
"setup": "fixture:xsd-bad-220",
"setup": "fixture:xsd-good-220",
"preRun": [
{
"writeFile": {