拒绝两段Colors冲突,同时保留自定义图像规范
本页展示随包原生输入和验收参考。Stitch云端运行状态:未运行;下方CLI区域保留实际本地执行。表格与图片不代表产品已经生成的结果。
input.csv / practice-data.json
本课实际输入字段
| section | order | text |
|---|---|---|
| Colors | 1 | primary=#184A45 |
| Colors | 2 | primary=#673AB7 |
| Photography | 3 | 自然光,人物在画面左侧 |
读真实lint原文
reference.csv:作者验收映射,不是目标API回包
| officialVersion | duplicateHeadingExit | actualFinding | duplicateTopKeyExit | projectGate | conflictExpectedExit | fixedExpectedExit |
|---|---|---|---|---|---|---|
| 0.4.0 | 0 | section-order warning in this fixture | ||||
| 0.4.0 | warning in this fixture | 0 | ||||
| duplicate title/top key checker | 1 | 0 |
规则与输入文件原文
{
"inputRows": [
{
"section": "Colors",
"order": 1,
"text": "primary=#184A45"
},
{
"section": "Colors",
"order": 2,
"text": "primary=#673AB7"
},
{
"section": "Photography",
"order": 3,
"text": "自然光,人物在画面左侧"
}
],
"referenceRows": [
{
"officialVersion": "0.4.0",
"duplicateHeadingExit": 0,
"actualFinding": "section-order warning in this fixture"
},
{
"officialVersion": "0.4.0",
"duplicateTopKeyExit": 0,
"actualFinding": "warning in this fixture"
},
{
"projectGate": "duplicate title/top key checker",
"conflictExpectedExit": 1,
"fixedExpectedExit": 0
}
],
"invalidRows": [
{
"policy": "last Colors wins",
"error": "duplicate section rejected"
},
{
"policy": "remove Photography",
"error": "custom section needlessly lost"
}
],
"notes": [
"作者自制可编辑输入与验收参考,非官方CLI或云端返回。",
"完整合法基础稿采用官方frontmatter schema;仅按本课故意更改对应字段。"
],
"designMdTemplate": "---\nversion: alpha\nname: Field Kit\ncolors:\n primary: \"#184A45\"\n surface: \"#F7F4EC\"\ntypography:\n body-md:\n fontFamily: Arial\n fontSize: 16px\n fontWeight: 400\n lineHeight: 1.6\nrounded:\n sm: 8px\nspacing:\n sm: 8px\ncomponents:\n button-primary:\n backgroundColor: \"{colors.primary}\"\n textColor: \"#FFFFFF\"\n typography: \"{typography.body-md}\"\n rounded: \"{rounded.sm}\"\n padding: \"{spacing.sm}\"\n---\n## Overview\nField Kit的预约界面。\n## Colors\n主色用于主要操作。\n## Typography\n正文使用body-md。\n## Layout\n使用8px间距。\n## Shapes\n使用8px圆角。\n## Components\n主要按钮统一消费语义引用。\n",
"officialSchemaUrl": "https://github.com/google-labs-code/design.md/blob/main/docs/spec.md",
"files": {
"input.json": "[\n {\n \"section\": \"Colors\",\n \"order\": 1,\n \"text\": \"primary=#184A45\"\n },\n {\n \"section\": \"Colors\",\n \"order\": 2,\n \"text\": \"primary=#673AB7\"\n },\n {\n \"section\": \"Photography\",\n \"order\": 3,\n \"text\": \"自然光,人物在画面左侧\"\n }\n]\n",
"reference.json": "{\n \"identity\": \"作者验收参考,非模型返回\",\n \"rows\": [\n {\n \"section\": \"Colors\",\n \"count\": 1\n },\n {\n \"token\": \"primary\",\n \"approvedValue\": \"#184A45\"\n },\n {\n \"section\": \"Photography\",\n \"preserved\": true\n }\n ]\n}\n",
"invalid.json": "{\n \"identity\": \"作者构造负例,非实际错误回包\",\n \"rows\": [\n {\n \"policy\": \"last Colors wins\",\n \"error\": \"duplicate section rejected\"\n },\n {\n \"policy\": \"remove Photography\",\n \"error\": \"custom section needlessly lost\"\n }\n ]\n}\n",
"case.md": "# DESIGN.md重复章节:对照规范与0.4.0行为,给冲突另设检查门槛\n\nDESIGN.md重复章节在规范中要求避免,但本地官方CLI 0.4.0对本课重复标题与跨YAML顶层键样本仍退出0。本课先保留真实差异,再增加独立重复检查,防止仅凭退出码接受冲突颜色。\n\n## 保留冲突原稿\n\n使用两段Colors和独立Photography的DESIGN-conflict.md,另备批准主色#184A45。\n\n不要在检查前合并,先保留能复现问题的输入。\n\n## 固定发布版和规范\n\n记录实际npm版本0.4.0,并保存main规范所述重复章节/顶层key要求。\n\n规范要求和发布实现可能不同,二者分别记录。\n\n## 读真实lint原文\n\n本课实际0.4.0对重复标题退出0,仅有section-order warning;跨YAML顶层colors重复也是warning。\n\n不能写成CLI已经以error拒绝这两个样本。\n\n## 另设重复检查门槛\n\n运行作者check-duplicate.py检查本课标题唯一性和已知顶层组重复。\n\n这是本课交付门槛,覆盖范围写清,不冒称完整官方解析器。\n\n## 合并权威颜色说明\n\n按brand-approval.json保留一个Colors,删除冲突说法。\n\nPhotography是自定义上下文,应继续保留。\n\n## 重跑两层检查\n\n对修复文件分别运行官方lint和作者重复检查,保留各自stdout与退出码。\n\n官方零退出和项目门槛通过是两个不同结论。\n\n## 交付版本差异报告\n\n打包原稿、修复稿、规范链接和两层检查记录。\n\n升级CLI后重新执行,不能把0.4.0行为当永远不变。\n\n身份:输入与参考为作者材料;localCli有实测记录时仅证明对应CLI运行,目标云端与模型推理未执行。\n",
"DESIGN-conflict.md": "---\nversion: alpha\nname: Field Kit\ncolors:\n primary: \"#184A45\"\n surface: \"#F7F4EC\"\ntypography:\n body-md:\n fontFamily: Arial\n fontSize: 16px\n fontWeight: 400\n lineHeight: 1.6\nrounded:\n sm: 8px\nspacing:\n sm: 8px\ncomponents:\n button-primary:\n backgroundColor: \"{colors.primary}\"\n textColor: \"#FFFFFF\"\n typography: \"{typography.body-md}\"\n rounded: \"{rounded.sm}\"\n padding: \"{spacing.sm}\"\n---\n## Overview\nField Kit的预约界面。\n## Colors\n主色用于主要操作。\n## Typography\n正文使用body-md。\n## Layout\n使用8px间距。\n## Shapes\n使用8px圆角。\n## Components\n主要按钮统一消费语义引用。\n\n## Colors\n备选紫色#673AB7,不是批准版本。\n## Photography\n自然光,人物靠左。\n",
"DESIGN-fixed.md": "---\nversion: alpha\nname: Field Kit\ncolors:\n primary: \"#184A45\"\n surface: \"#F7F4EC\"\ntypography:\n body-md:\n fontFamily: Arial\n fontSize: 16px\n fontWeight: 400\n lineHeight: 1.6\nrounded:\n sm: 8px\nspacing:\n sm: 8px\ncomponents:\n button-primary:\n backgroundColor: \"{colors.primary}\"\n textColor: \"#FFFFFF\"\n typography: \"{typography.body-md}\"\n rounded: \"{rounded.sm}\"\n padding: \"{spacing.sm}\"\n---\n## Overview\nField Kit的预约界面。\n## Colors\n主色用于主要操作。\n## Typography\n正文使用body-md。\n## Layout\n使用8px间距。\n## Shapes\n使用8px圆角。\n## Components\n主要按钮统一消费语义引用。\n\n## Photography\n自然光,人物靠左。\n",
"brand-approval.json": "{\n \"identity\": \"作者品牌练习批准值\",\n \"primary\": \"#184A45\"\n}\n",
"check-duplicate.py": "import re,sys,collections\nfrom pathlib import Path\ns=Path(sys.argv[1]).read_text()\nheadings=[x.strip().lower() for x in re.findall(r\"^##\\s+(.+)$\",s,re.M)]\nduplicates=[x for x,n in collections.Counter(headings).items() if n>1]\n# Scope: exact H2 titles and unindented known YAML group keys in this lesson.\nkeys=re.findall(r\"^(colors|typography|rounded|spacing|components):\",s,re.M)\nduplicates += [\"yaml:\"+x for x,n in collections.Counter(keys).items() if n>1]\nprint({\"scope\":\"lesson duplicate titles and known top-level groups\",\"duplicates\":duplicates})\nraise SystemExit(1 if duplicates else 0)\n",
"duplicate-section.stdout.txt": "{\n \"findings\": [\n {\n \"severity\": \"info\",\n \"message\": \"Design system defines 2 colors, 1 typography scale, 1 rounding level, 1 spacing token, 1 component.\",\n \"rule\": \"token-summary\"\n },\n {\n \"severity\": \"warning\",\n \"message\": \"Section 'Components' appears before 'Colors', which is out of order. Expected order: Overview, Colors, Typography, Layout, Elevation & Depth, Shapes, Components, Do's and Don'ts\",\n \"rule\": \"section-order\"\n }\n ],\n \"summary\": {\n \"errors\": 0,\n \"warnings\": 1,\n \"infos\": 1\n }\n}\n",
"duplicate-section.stderr.txt": "",
"duplicate-top-key.stdout.txt": "{\n \"findings\": [\n {\n \"severity\": \"warning\",\n \"message\": \"Section 'colors' is defined in both frontmatter and code block 1.\"\n }\n ],\n \"summary\": {\n \"errors\": 0,\n \"warnings\": 1,\n \"infos\": 0\n }\n}\n",
"duplicate-top-key.stderr.txt": "",
"local-cli-receipt.json": "{\n \"status\": \"executed\",\n \"package\": \"@google/design.md\",\n \"version\": \"0.4.0\",\n \"cases\": [\n {\n \"case\": \"duplicate-section\",\n \"exitCode\": 0,\n \"stdoutSha256\": \"c5b16a41e3f3411951ab4da4235d92625f36bc68efe32e72ed0bdc7c0f573cec\"\n },\n {\n \"case\": \"duplicate-top-key\",\n \"exitCode\": 0,\n \"stdoutSha256\": \"d3599230038c9bafa2a53052501fb1304901317811f5e6a92c900eed05dd1465\"\n }\n ]\n}\n",
"project-duplicate-conflict.stdout.txt": "{'scope': 'lesson duplicate titles and known top-level groups', 'duplicates': ['colors']}\n",
"project-duplicate-fixed.stdout.txt": "{'scope': 'lesson duplicate titles and known top-level groups', 'duplicates': []}\n"
}
}官方CLI本地实测 · 0.4.0
以下stdout由当前包内同字节输入实际执行,退出码单独保留。Stitch云端生成未运行。
duplicate-section / exit 0
{
"findings": [
{
"severity": "info",
"message": "Design system defines 2 colors, 1 typography scale, 1 rounding level, 1 spacing token, 1 component.",
"rule": "token-summary"
},
{
"severity": "warning",
"message": "Section 'Components' appears before 'Colors', which is out of order. Expected order: Overview, Colors, Typography, Layout, Elevation & Depth, Shapes, Components, Do's and Don'ts",
"rule": "section-order"
}
],
"summary": {
"errors": 0,
"warnings": 1,
"infos": 1
}
}
project-duplicate-conflict / exit 1
{'scope': 'lesson duplicate titles and known top-level groups', 'duplicates': ['colors']}
project-duplicate-fixed / exit 0
{'scope': 'lesson duplicate titles and known top-level groups', 'duplicates': []}
应当保留的约束
| officialVersion | duplicateHeadingExit | actualFinding | duplicateTopKeyExit | projectGate | conflictExpectedExit | fixedExpectedExit |
|---|---|---|---|---|---|---|
| 0.4.0 | 0 | section-order warning in this fixture | ||||
| 0.4.0 | warning in this fixture | 0 | ||||
| duplicate title/top key checker | 1 | 0 |
故意构造的错误样例
| policy | error |
|---|---|
| last Colors wins | duplicate section rejected |
| remove Photography | custom section needlessly lost |
先保存真实产品输出,再逐项对照。actualOutput / actualResult 在未执行时保持 not_run,不能把这里的期望值复制成已测结果。