@qilitt-mickey/vue3-temp-skill 1.1.72 → 1.1.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/bin/cli.js +1 -1
  2. package/dist/theme-vars.js +1 -1
  3. package/dist/theme.css +1 -1
  4. package/mapping/layout/shell-geometry.json +26 -26
  5. package/mapping/scenes/admin/content.json +3 -0
  6. package/mapping/scenes/admin/layout.json +4 -1
  7. package/package.json +1 -1
  8. package/parser/fixtures/changeset-fullpage-restore.json +259 -138
  9. package/parser/fixtures/changeset-gap-block.json +24 -0
  10. package/parser/fixtures/changeset-neg4-g8.json +15 -15
  11. package/parser/fixtures/changeset-neg6-g9-identity.json +39 -39
  12. package/parser/fixtures/changeset-neg8-g11-oracle.json +57 -57
  13. package/parser/fixtures/changeset-neg9-g6-token-chain.json +34 -0
  14. package/parser/fixtures/changeset-pos-g6-token-chain.json +35 -0
  15. package/parser/fixtures/changeset-pos-theme-neutral.json +264 -264
  16. package/parser/fixtures/changeset-pos.json +50 -43
  17. package/parser/fixtures/changeset-v32-fields.json +71 -63
  18. package/parser/fixtures/registry-g6-token-chain.json +10 -0
  19. package/parser/fixtures/registry-sample.json +15 -15
  20. package/parser/fixtures/verify/mockup-baseline-admin-list.html +27 -0
  21. package/parser/fixtures/verify/mockup-g6-content.html +12 -0
  22. package/parser/fixtures/verify/oracle.json +37 -37
  23. package/parser/generator.js +178 -178
  24. package/parser/index.js +2706 -2648
  25. package/parser/override.js +119 -119
  26. package/parser/regression.js +301 -293
  27. package/parser/watch.js +103 -103
  28. package/references/layout-theme.md +2 -0
  29. package/references/steps/maintenance.md +31 -31
  30. package/references/steps/regression.md +49 -49
  31. package/references/steps/step1-match.md +65 -64
  32. package/references/steps/step1b-audit.md +23 -23
  33. package/references/steps/step1c-registry.md +29 -29
  34. package/references/steps/step2-structure.md +73 -73
  35. package/references/steps/step3-style.md +5 -0
  36. package/references/steps/step3b-shell.md +63 -61
  37. package/references/steps/step5-gates.md +1 -0
  38. package/scripts/apply-final-gate.mjs +170 -170
  39. package/scripts/check.mjs +24 -0
  40. package/scripts/design-audit.mjs +1575 -1502
package/bin/cli.js CHANGED
@@ -34,7 +34,7 @@ const TRACK_FILE = path.join(HOME, ".vue3-temp-skill.json");
34
34
  // design-audit.mjs / check.mjs / apply-final-gate.mjs 必须随包分发:E11 交付完整性 / E12 设计层
35
35
  // 累积性(ledger 台账)/ 终态机读凭证(四闸串联,FINAL-GATE: PASS)是落地会话的运行时闸——
36
36
  // 缺了它们「只挑主题令牌落地 + 覆盖历史成果 + 以自述结束会话」无法被静态拦截
37
- // (实证:2026-09-24 孔雀绿轮,运行时副本无审计闸,残缺口变更集一路绿灯)。
37
+ // (失效模式:运行时副本缺审计闸时,残缺口变更集会一路绿灯)。
38
38
  const RUNTIME_SCRIPT_FILES = ["match.py", "modules.json", "design-audit.mjs", "check.mjs", "apply-final-gate.mjs"];
39
39
  const PKG_VERSION = JSON.parse(fs.readFileSync(path.join(SKILL_DIR, "package.json"), "utf-8")).version;
40
40
 
@@ -1,5 +1,5 @@
1
1
  // AUTO-GENERATED by vue3-temp-skill parser/generator.js — DO NOT EDIT
2
- // 链路 A 运行时入口:themeVars + overrideMapping(业务级覆写,V3.1 §3.4.4.3)
2
+ // 链路 A 运行时入口:themeVars + overrideMapping(业务级覆写)
3
3
  // 用法:import { themeVars, overrideMapping } from '@qilitt-mickey/vue3-temp-skill/dist/theme-vars.js';
4
4
  // const custom = overrideMapping(themeVars, { color: { brandPrimary: '#ff6600' } });
5
5
  export const themeVars = {
package/dist/theme.css CHANGED
@@ -1,5 +1,5 @@
1
1
  /* AUTO-GENERATED by vue3-temp-skill parser/generator.js — DO NOT EDIT */
2
- /* 链路 A(基线注入)产物:全局令牌变量基线(V3.1 §4.5.3)。
2
+ /* 链路 A(基线注入)产物:全局令牌变量基线。
3
3
  * 仅空白新项目从零接入 Skill 主题体系时在样式入口引入一次;
4
4
  * 成熟模板项目(自有 design-tokens.scss 权威令牌源)不得引入,避免双令牌源冲突。 */
5
5
  :root {
@@ -1,26 +1,26 @@
1
- {
2
- "$comment": "布局规则 · 壳层几何令牌映射(admin 场景标准布局:vertical/horizontal/mix 三模式共用)。设计侧输出 layout_geometry.* 抽象字段或对 layout.* 语义 ID 的 style.width/height 即可转换。header 顶栏(navbar)、tabs 页签栏、sidebar 侧栏、content 内容区。",
3
- "meta": {
4
- "layer": "layout",
5
- "domain": "shell_geometry",
6
- "version": "1.0.0",
7
- "scene": "admin",
8
- "tech_stack": "vue3 + element-plus + vue3-web-temp"
9
- },
10
- "tokens": {
11
- "header_height": { "token": "--header-height → --vts-bar-height", "type": "size", "default": "48px", "desc": "顶栏高度;改后壳层 padding-top 自动跟随(--layout-header-offset)" },
12
- "tabs_height": { "token": "--tabs-height → --vts-tabs-height", "type": "size", "default": "32px", "desc": "多标签页签栏高度(≠ EP 内容区 Tabs --tabs-item-height)" },
13
- "sidebar_width": { "token": "--sidebar-width", "type": "size", "default": "208px", "desc": "侧栏展开宽度(sidebar.scss mixin 三布局共用)" },
14
- "sidebar_collapsed_width": { "token": "--sidebar-collapsed-width", "type": "size", "default": "64px", "desc": "侧栏折叠宽度" },
15
- "sidebar_collapse_bar_height": { "token": "--sidebar-collapse-bar-height", "type": "size", "default": "40px", "desc": "侧栏底部折叠条高度" },
16
- "layout_footer_height": { "token": "--layout-footer-height", "type": "size", "default": "48px", "desc": "页脚高度" },
17
- "tabs_item_height": { "token": "--tabs-item-height", "type": "size", "default": "46px", "desc": "EP 内容区 Tabs 项高(非壳层页签)" },
18
- "menu_item_height": { "token": "--el-menu-item-height", "type": "size", "default": "40px", "desc": "侧栏菜单项高度" }
19
- },
20
- "layout_modes": {
21
- "$comment": "标准布局枚举:现有三模式即标准布局(platform-config.json Layout 字段)。变体/定制布局按 V3.0 §五 分级派生。",
22
- "vertical": { "desc": "侧边导航(出厂默认)", "switch": "platform-config.json Layout=vertical", "sidebar": true },
23
- "horizontal": { "desc": "顶部导航(菜单入顶栏)", "switch": "Layout=horizontal", "sidebar": false },
24
- "mix": { "desc": "混合(一级菜单侧栏 + 二级顶部)", "switch": "Layout=mix", "sidebar": true }
25
- }
26
- }
1
+ {
2
+ "$comment": "布局规则 · 壳层几何令牌映射(admin 场景标准布局:vertical/horizontal/mix 三模式共用)。设计侧输出 layout_geometry.* 抽象字段或对 layout.* 语义 ID 的 style.width/height 即可转换。header 顶栏(navbar)、tabs 页签栏、sidebar 侧栏、content 内容区。",
3
+ "meta": {
4
+ "layer": "layout",
5
+ "domain": "shell_geometry",
6
+ "version": "1.0.0",
7
+ "scene": "admin",
8
+ "tech_stack": "vue3 + element-plus + vue3-web-temp"
9
+ },
10
+ "tokens": {
11
+ "header_height": { "token": "--header-height → --vts-bar-height", "type": "size", "default": "48px", "desc": "顶栏高度;改后壳层 padding-top 自动跟随(--layout-header-offset)" },
12
+ "tabs_height": { "token": "--tabs-height → --vts-tabs-height", "type": "size", "default": "32px", "desc": "多标签页签栏高度(≠ EP 内容区 Tabs --tabs-item-height)" },
13
+ "sidebar_width": { "token": "--sidebar-width", "type": "size", "default": "208px", "desc": "侧栏展开宽度(sidebar.scss mixin 三布局共用)" },
14
+ "sidebar_collapsed_width": { "token": "--sidebar-collapsed-width", "type": "size", "default": "64px", "desc": "侧栏折叠宽度" },
15
+ "sidebar_collapse_bar_height": { "token": "--sidebar-collapse-bar-height", "type": "size", "default": "40px", "desc": "侧栏底部折叠条高度" },
16
+ "layout_footer_height": { "token": "--layout-footer-height", "type": "size", "default": "48px", "desc": "页脚高度" },
17
+ "tabs_item_height": { "token": "--tabs-item-height", "type": "size", "default": "46px", "desc": "EP 内容区 Tabs 项高(非壳层页签)" },
18
+ "menu_item_height": { "token": "--el-menu-item-height", "type": "size", "default": "40px", "desc": "侧栏菜单项高度" }
19
+ },
20
+ "layout_modes": {
21
+ "$comment": "标准布局枚举:现有三模式即标准布局(platform-config.json Layout 字段)。变体/定制布局按布局分级规则派生。",
22
+ "vertical": { "desc": "侧边导航(出厂默认)", "switch": "platform-config.json Layout=vertical", "sidebar": true },
23
+ "horizontal": { "desc": "顶部导航(菜单入顶栏)", "switch": "Layout=horizontal", "sidebar": false },
24
+ "mix": { "desc": "混合(一级菜单侧栏 + 二级顶部)", "switch": "Layout=mix", "sidebar": true }
25
+ }
26
+ }
@@ -28,6 +28,9 @@
28
28
  "scroll": "data-content-mode='scroll':flex:0 0 auto; min-height:100%; overflow:visible(整页滚动)",
29
29
  "auto": ":has(.vts-page-card|.vts-page-fill) 自动定高;未标记且无钩子类 → 滚动页(向后兼容)。自动分支带 :not([data-content-mode]) 守卫,与显式声明互斥"
30
30
  },
31
+ "preconditions": [
32
+ "层间令牌链对账:本点位(.main-content)与 admin.layout.content(.app-main)是同一视觉间距的父子两层,同链令牌 --layout-content-padding → --vts-margin(basic/spacing.json content_padding)——同一间距只允许一个权威来源。style 声明几何字段(padding 族)时必须同步声明 suppress_inner(同链父层接管/清零口径:写明由哪层承载间距、另一层如何归零),否则父层设计值 + 本层令牌值叠加(如 24px + 8px = 32px/侧)。"
33
+ ],
31
34
  "$note": "⚠列表区保命通道(**结构层**,设计还原禁止改写):**滚动归属** = 页面根节点 data-content-mode(fixed/scroll 优先;未声明走 :has() 自动探测兜底,自动分支带 :not([data-content-mode]) 守卫与显式声明互斥——显式 scroll 的页面内含 .vts-page-card 时定高分支不得反压,否则整页滚动断裂)。**填满剩余高度** = 中性属性 data-fill(element-plus.scss 已实现:display:flex; flex:1 1 auto; min-height:0; overflow:hidden;data-fill=\"row\" 横向分栏),从页面根到表格/画布容器之间**每个需填满的层级节点**都要挂。⚠**结构/视觉解耦(本通道存在的意义)**:定高链只认属性不认类名 ⇒ 视觉容器可被设计层整体替换(el-card.vts-page-card → 通栏 div / 自绘容器),换容器时把 data-fill 平移到新容器及其「体」层即可,高度链不断、useTableSearch 几何实测照常、表格自滚动正常。双向禁止:① 改写壳层结构层规则(lay-content 的 .main-content[data-content-mode]、element-plus.scss 的 [data-fill])来换还原效果;② 以「保高度」为由拒绝设计改容器/内边距/去卡片。⚠壳层 lay-content 禁止硬编码 data-content-mode(若壳层代打 scroll 会压掉自动探测,导致 vts-page-card 列表页定高链断裂、useTableSearch 高度失准、列表区整体崩坏)。出厂 DOM 不带模式属性(中性),换设计只换页面根节点的声明值与 data-fill 挂载点。"
32
35
  },
33
36
  "admin.content.page_header": {
@@ -557,7 +557,10 @@
557
557
  "custom_style_map": {
558
558
  "bg": "background-color"
559
559
  },
560
- "$note": "内容区高度链为壳层定高体系(vts-page-card/vts-page-fill),业务页面布局语义见 content.* 语义 ID"
560
+ "preconditions": [
561
+ "层间令牌链对账:本点位(.app-main)与 admin.content.container(.main-content)是同一视觉间距的父子两层,同链令牌 --layout-content-padding → --vts-margin(basic/spacing.json content_padding)——同一间距只允许一个权威来源。style 声明几何字段(padding 族)时必须同步声明 suppress_inner(同链子层接管/清零口径:写明由哪层承载间距、另一层如何归零),否则父层设计值 + 子层令牌值叠加(如 24px + 8px = 32px/侧 → 内容区边距显著大于效果图)。施工优先走令牌通道:在本条目或消费点作用域重映射 --layout-content-padding / --vts-margin,禁止绕过通道抢写物理 padding 后任由子层令牌保留非零值。"
562
+ ],
563
+ "$note": "内容区高度链为壳层定高体系(vts-page-card/vts-page-fill),业务页面布局语义见 content.* 语义 ID。⚠间距承载唯一性:.app-main(本条目)与 .main-content(admin.content.container)都消费内容区间距令牌链(--layout-content-padding → --vts-margin,出厂各 8px)——设计值 24px 落地时只允许其中一层承载 24px、另一层归零;两层各写一遍 24px 即物理叠加 48px/侧(「边距很大」的成因)。令牌通道重映射两层同变,物理属性抢写只变一层。"
561
564
  },
562
565
  "admin.layout.footer": {
563
566
  "type": "module",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qilitt-mickey/vue3-temp-skill",
3
- "version": "1.1.72",
3
+ "version": "1.1.75",
4
4
  "type": "module",
5
5
  "description": "Vue 3 企业级中后台项目开发规范技能包 — core-kernel 架构、按需功能模块",
6
6
  "bin": {
@@ -1,138 +1,259 @@
1
- {
2
- "$comment": "端到端示例 · 整页场景还原(对照效果图逐模块提取的完整交付样例,模拟设计技能真实产出)。G8 模式闸正例:mode=restore + scheme + oracle(含 mockup) + coverage(含 registry) 齐备,且通过 G9 身份闸(registry-sample.json 属 default×admin,与变更集一致)与 G10 dims 兑现闸(sample#1-4/sample#6 适用项的 dims 全部给出;sample#5 选择列为条件项、效果图未标注不适用)。覆盖率计数以登记表当场重算为准(applicable=5:4 条恒存在 + 1 条效果图命中)。覆盖:global 主题 + 壳层全模块 + 列表页全字段 + 表格细粒度点位(操作列形态/状态Tag/金额对齐/缩略图)+ pending 新点位。值口径演示:主题色用语义值(钴蓝-N/错误色)、尺寸用数值字面量(28px/40px 等,设计侧 v1.0 协议第 3 条合法通道)、灰阶用临时主题 hex + notes 申报。业务功能差异(新增运单按钮功能、demo 演示按钮去留)不在本变更集范围,走项目侧业务闭环开发(双层交付)。真实 186 条登记表(references/.../scenes/admin/restore-registry.json)见 M 步与项目侧实测;本夹具的 registry 指向 6 条回归夹具表,避免回归依赖跨技能实物。运行:node parser/index.js match <本文件>(cwd 为 skill 根)。",
3
- "schema": "design.changeset/1.0",
4
- "changeset_version": "1.0.0",
5
- "mapping_version": "1.0.0",
6
- "scene": "admin",
7
- "scheme": "default",
8
- "mode": "restore",
9
- "layout_type": "vertical",
10
- "global": {
11
- "brand_primary": "钴蓝-5",
12
- "sidebar_bg": "钴蓝-10"
13
- },
14
- "changes": [
15
- { "id": "admin.layout.sidebar", "style": { "bg": "钴蓝-10" } },
16
- { "id": "admin.layout.sidebar.logo_area", "style": { "bg": "钴蓝-10", "title_color": "#FFFFFF" } },
17
- {
18
- "id": "admin.layout.sidebar.menu",
19
- "style": {
20
- "menu_bg": "钴蓝-10",
21
- "menu_text": "钴蓝-2",
22
- "menu_hover_bg": "钴蓝-8",
23
- "menu_title_hover": "#FFFFFF",
24
- "sub_menu_bg": "钴蓝-9",
25
- "sub_menu_active_text": "#FFFFFF",
26
- "menu_active_bg": "钴蓝-5",
27
- "menu_active_indicator": "钴蓝-5"
28
- }
29
- },
30
- { "id": "admin.layout.header", "style": { "bg": "#FFFFFF" } },
31
- {
32
- "id": "admin.layout.header.lang_switch",
33
- "form": "inline_switch",
34
- "suppress": ["icon_only", "dropdown_popper"],
35
- "style": { "icon_size": "16px", "gap": "8px", "text_font_size": "14px" }
36
- },
37
- {
38
- "id": "admin.layout.header.user_profile",
39
- "style": { "avatar_width": "28px", "avatar_height": "28px", "avatar_radius": "全圆角", "name_font_size": "14px", "name_font_weight": "中等" }
40
- },
41
- { "id": "admin.layout.tabs", "form": "chrome", "style": { "bg": "#FFFFFF" } },
42
- {
43
- "id": "admin.content.table.header_cell",
44
- "style": { "height": "48px", "padding": "16px", "bg": "#FAFAFA", "font_weight": "中等", "text_align": "左对齐", "nowrap": "不换行" },
45
- "layer": { "height": "host", "padding": "host", "bg": "host", "font_weight": "host", "text_align": "inner", "nowrap": "inner" },
46
- "suppress_inner": true
47
- },
48
- {
49
- "id": "admin.content.table.cell",
50
- "style": { "padding": "16px", "padding_y": "8px", "vertical_align": "middle" },
51
- "layer": { "padding": "host", "padding_y": "inner", "vertical_align": "inner" },
52
- "suppress_inner": true
53
- },
54
- {
55
- "id": "admin.content.table.cell_status",
56
- "form": "filled",
57
- "style": { "bg": "#E8F3FF", "text_color": "钴蓝-5", "radius": "小圆角" }
58
- },
59
- { "id": "component.tag.status", "form": "filled", "style": { "height": "24px", "radius": "小圆角", "bg_color": "#F6FFED" } },
60
- {
61
- "id": "admin.content.page_header",
62
- "style": { "title_size": "20px", "title_weight": "加粗", "desc_color": "钴蓝-3", "actions_gap": "8px" }
63
- },
64
- {
65
- "id": "admin.content.filter_area",
66
- "style": { "radius": "小圆角", "padding_y": "宽松", "padding_x": "宽松", "bg": "#FFFFFF", "border_bottom": "1px solid #F0F0F0" }
67
- },
68
- {
69
- "id": "admin.content.table.operation_bar",
70
- "style": { "gap": "8px", "padding_y": "紧凑" }
71
- },
72
- {
73
- "id": "admin.content.table.operation_column",
74
- "form": "text_link",
75
- "style": { "link_color": "钴蓝-5", "danger_color": "错误色", "align": "center", "divider_color": "#F0F0F0" }
76
- },
77
- { "id": "admin.content.table.area", "style": { "header_bg": "#FAFAFA", "row_hover_bg": "#FAFAFA", "radius": "小圆角" } },
78
- { "id": "admin.content.table.cell_amount", "style": { "align": "right", "font_variant_numeric": "等宽数字" } },
79
- { "id": "admin.content.table.cell_thumb", "style": { "thumb_width": "40px", "thumb_height": "40px", "thumb_radius": "小圆角" } },
80
- { "id": "component.button.danger", "style": { "bg_color": "错误色", "border_color": "错误色", "text_color": "#FFFFFF" } },
81
- { "id": "admin.content.pagination", "style": { "active_bg": "钴蓝-5", "active_color": "#FFFFFF" } }
82
- ],
83
- "oracle": {
84
- "mockup": "verify/回归夹具-列表页-钴蓝.html",
85
- "sids": [
86
- "admin.layout.sidebar",
87
- "admin.layout.sidebar.logo_area",
88
- "admin.layout.sidebar.menu",
89
- "admin.layout.header",
90
- "admin.layout.header.lang_switch",
91
- "admin.layout.header.user_profile",
92
- "admin.layout.tabs",
93
- "admin.content.page_header",
94
- "admin.content.filter_area",
95
- "admin.content.table.operation_bar",
96
- "admin.content.table.operation_column",
97
- "admin.content.table.area",
98
- "admin.content.table.header_cell",
99
- "admin.content.table.cell",
100
- "admin.content.table.cell_status",
101
- "admin.content.table.cell_amount",
102
- "admin.content.table.cell_thumb",
103
- "component.tag.status",
104
- "component.button.danger",
105
- "admin.content.pagination"
106
- ]
107
- },
108
- "coverage": {
109
- "registry": "parser/fixtures/registry-sample.json",
110
- "registrable": 6,
111
- "applicable": 5,
112
- "covered": 5,
113
- "gaps": []
114
- },
115
- "pending": [
116
- {
117
- "proposed_id": "admin.content.page_header.greeting",
118
- "function": "页面标题下的说明副标题(一句话描述页面用途)",
119
- "parent": "admin.content.page_header"
120
- },
121
- {
122
- "proposed_id": "admin.content.table.cell_status_badge",
123
- "function": "表格状态列的带图标状态胶囊(图标+文字+浅色底)",
124
- "parent": "admin.content.table.area"
125
- },
126
- {
127
- "proposed_id": "admin.content.table.cell_route_arrow",
128
- "function": "表格线路列的起点到终点箭头展示(如 上海→北京)",
129
- "parent": "admin.content.table.area"
130
- },
131
- {
132
- "proposed_id": "admin.content.table.cell_link",
133
- "function": "表格内可点击的链接文字单元(如运单号)",
134
- "parent": "admin.content.table.area"
135
- }
136
- ],
137
- "notes": "整页场景还原样例(对照效果图逐模块提取)。效果图定制冲突项:侧栏底色用钴蓝-10(极深)而非模板默认 #001529,以用户效果图为准;顶栏保持白底。灰阶临时色申报:白 #FFFFFF、浅灰 #FAFAFA、边框灰 #F0F0F0 为中性色(不属任何主题梯度),按临时主题 hex 直写,全主题通用。页面存在业务结构改动(标题区按钮数量与功能、demo 演示内容去留),需项目侧双层交付:页面结构层走业务闭环开发重建,视觉语义层按本变更集落地。问候语(下午好,张伟)文案属业务层,本变更集只声明其载体形态与样式。"
138
- }
1
+ {
2
+ "$comment": "端到端示例 · 整页场景还原(对照效果图逐模块提取的完整交付样例,模拟设计技能真实产出)。G8 模式闸正例:mode=restore + scheme + oracle(含 mockup) + coverage(含 registry) 齐备,且通过 G9 身份闸(registry-sample.json 属 default×admin,与变更集一致)与 G10 dims 兑现闸(sample#1-4/sample#6 适用项的 dims 全部给出;sample#5 选择列为条件项、效果图未标注不适用)。覆盖率计数以登记表当场重算为准(applicable=5:4 条恒存在 + 1 条效果图命中)。覆盖:global 主题 + 壳层全模块 + 列表页全字段 + 表格细粒度点位(操作列形态/状态Tag/金额对齐/缩略图)+ pending 新点位。值口径演示:主题色用语义值(钴蓝-N/错误色)、尺寸用数值字面量(28px/40px 等,设计侧 v1.0 协议第 3 条合法通道)、灰阶用临时主题 hex + notes 申报。业务功能差异(新增运单按钮功能、demo 演示按钮去留)不在本变更集范围,走项目侧业务闭环开发(双层交付)。真实 186 条登记表(references/.../scenes/admin/restore-registry.json)见 M 步与项目侧实测;本夹具的 registry 指向 6 条回归夹具表,避免回归依赖跨技能实物。运行:node parser/index.js match <本文件>(cwd 为 skill 根)。",
3
+ "schema": "design.changeset/1.0",
4
+ "changeset_version": "1.0.0",
5
+ "mapping_version": "1.0.0",
6
+ "scene": "admin",
7
+ "scheme": "default",
8
+ "mode": "restore",
9
+ "layout_type": "vertical",
10
+ "global": {
11
+ "brand_primary": "钴蓝-5",
12
+ "sidebar_bg": "钴蓝-10"
13
+ },
14
+ "changes": [
15
+ {
16
+ "id": "admin.layout.sidebar",
17
+ "style": {
18
+ "bg": "钴蓝-10"
19
+ }
20
+ },
21
+ {
22
+ "id": "admin.layout.sidebar.logo_area",
23
+ "style": {
24
+ "bg": "钴蓝-10",
25
+ "title_color": "#FFFFFF"
26
+ }
27
+ },
28
+ {
29
+ "id": "admin.layout.sidebar.menu",
30
+ "style": {
31
+ "menu_bg": "钴蓝-10",
32
+ "menu_text": "钴蓝-2",
33
+ "menu_hover_bg": "钴蓝-8",
34
+ "menu_title_hover": "#FFFFFF",
35
+ "sub_menu_bg": "钴蓝-9",
36
+ "sub_menu_active_text": "#FFFFFF",
37
+ "menu_active_bg": "钴蓝-5",
38
+ "menu_active_indicator": "钴蓝-5"
39
+ }
40
+ },
41
+ {
42
+ "id": "admin.layout.header",
43
+ "style": {
44
+ "bg": "#FFFFFF"
45
+ }
46
+ },
47
+ {
48
+ "id": "admin.layout.header.lang_switch",
49
+ "form": "inline_switch",
50
+ "suppress": [
51
+ "icon_only",
52
+ "dropdown_popper"
53
+ ],
54
+ "style": {
55
+ "icon_size": "16px",
56
+ "gap": "8px",
57
+ "text_font_size": "14px"
58
+ }
59
+ },
60
+ {
61
+ "id": "admin.layout.header.user_profile",
62
+ "style": {
63
+ "avatar_width": "28px",
64
+ "avatar_height": "28px",
65
+ "avatar_radius": "全圆角",
66
+ "name_font_size": "14px",
67
+ "name_font_weight": "中等"
68
+ }
69
+ },
70
+ {
71
+ "id": "admin.layout.tabs",
72
+ "form": "chrome",
73
+ "style": {
74
+ "bg": "#FFFFFF"
75
+ }
76
+ },
77
+ {
78
+ "id": "admin.content.table.header_cell",
79
+ "style": {
80
+ "height": "48px",
81
+ "padding": "16px",
82
+ "bg": "#FAFAFA",
83
+ "font_weight": "中等",
84
+ "text_align": "左对齐",
85
+ "nowrap": "不换行"
86
+ },
87
+ "layer": {
88
+ "height": "host",
89
+ "padding": "host",
90
+ "bg": "host",
91
+ "font_weight": "host",
92
+ "text_align": "inner",
93
+ "nowrap": "inner"
94
+ },
95
+ "suppress_inner": true
96
+ },
97
+ {
98
+ "id": "admin.content.table.cell",
99
+ "style": {
100
+ "padding": "16px",
101
+ "padding_y": "8px",
102
+ "vertical_align": "middle"
103
+ },
104
+ "layer": {
105
+ "padding": "host",
106
+ "padding_y": "inner",
107
+ "vertical_align": "inner"
108
+ },
109
+ "suppress_inner": true
110
+ },
111
+ {
112
+ "id": "admin.content.table.cell_status",
113
+ "form": "filled",
114
+ "style": {
115
+ "bg": "#E8F3FF",
116
+ "text_color": "钴蓝-5",
117
+ "radius": "小圆角"
118
+ }
119
+ },
120
+ {
121
+ "id": "component.tag.status",
122
+ "form": "filled",
123
+ "style": {
124
+ "height": "24px",
125
+ "radius": "小圆角",
126
+ "bg_color": "#F6FFED"
127
+ }
128
+ },
129
+ {
130
+ "id": "admin.content.page_header",
131
+ "style": {
132
+ "title_size": "20px",
133
+ "title_weight": "加粗",
134
+ "desc_color": "钴蓝-3",
135
+ "actions_gap": "8px"
136
+ }
137
+ },
138
+ {
139
+ "id": "admin.content.filter_area",
140
+ "style": {
141
+ "radius": "小圆角",
142
+ "padding_y": "宽松",
143
+ "padding_x": "宽松",
144
+ "bg": "#FFFFFF",
145
+ "border_bottom": "1px solid #F0F0F0"
146
+ }
147
+ },
148
+ {
149
+ "id": "admin.content.table.operation_bar",
150
+ "style": {
151
+ "gap": "8px",
152
+ "padding_y": "紧凑"
153
+ }
154
+ },
155
+ {
156
+ "id": "admin.content.table.operation_column",
157
+ "form": "text_link",
158
+ "style": {
159
+ "link_color": "钴蓝-5",
160
+ "danger_color": "错误色",
161
+ "align": "center",
162
+ "divider_color": "#F0F0F0"
163
+ }
164
+ },
165
+ {
166
+ "id": "admin.content.table.area",
167
+ "style": {
168
+ "header_bg": "#FAFAFA",
169
+ "row_hover_bg": "#FAFAFA",
170
+ "radius": "小圆角"
171
+ }
172
+ },
173
+ {
174
+ "id": "admin.content.table.cell_amount",
175
+ "style": {
176
+ "align": "right",
177
+ "font_variant_numeric": "等宽数字"
178
+ }
179
+ },
180
+ {
181
+ "id": "admin.content.table.cell_thumb",
182
+ "style": {
183
+ "thumb_width": "40px",
184
+ "thumb_height": "40px",
185
+ "thumb_radius": "小圆角"
186
+ }
187
+ },
188
+ {
189
+ "id": "component.button.danger",
190
+ "style": {
191
+ "bg_color": "错误色",
192
+ "border_color": "错误色",
193
+ "text_color": "#FFFFFF"
194
+ }
195
+ },
196
+ {
197
+ "id": "admin.content.pagination",
198
+ "style": {
199
+ "active_bg": "钴蓝-5",
200
+ "active_color": "#FFFFFF"
201
+ }
202
+ }
203
+ ],
204
+ "oracle": {
205
+ "mockup": "verify/mockup-baseline-admin-list.html",
206
+ "sids": [
207
+ "admin.layout.sidebar",
208
+ "admin.layout.sidebar.logo_area",
209
+ "admin.layout.sidebar.menu",
210
+ "admin.layout.header",
211
+ "admin.layout.header.lang_switch",
212
+ "admin.layout.header.user_profile",
213
+ "admin.layout.tabs",
214
+ "admin.content.page_header",
215
+ "admin.content.filter_area",
216
+ "admin.content.table.operation_bar",
217
+ "admin.content.table.operation_column",
218
+ "admin.content.table.area",
219
+ "admin.content.table.header_cell",
220
+ "admin.content.table.cell",
221
+ "admin.content.table.cell_status",
222
+ "admin.content.table.cell_amount",
223
+ "admin.content.table.cell_thumb",
224
+ "component.tag.status",
225
+ "component.button.danger",
226
+ "admin.content.pagination"
227
+ ]
228
+ },
229
+ "coverage": {
230
+ "registry": "parser/fixtures/registry-sample.json",
231
+ "registrable": 6,
232
+ "applicable": 5,
233
+ "covered": 5,
234
+ "gaps": []
235
+ },
236
+ "pending": [
237
+ {
238
+ "proposed_id": "admin.content.page_header.greeting",
239
+ "function": "页面标题下的说明副标题(一句话描述页面用途)",
240
+ "parent": "admin.content.page_header"
241
+ },
242
+ {
243
+ "proposed_id": "admin.content.table.cell_status_badge",
244
+ "function": "表格状态列的带图标状态胶囊(图标+文字+浅色底)",
245
+ "parent": "admin.content.table.area"
246
+ },
247
+ {
248
+ "proposed_id": "admin.content.table.cell_route_arrow",
249
+ "function": "表格线路列的起点到终点箭头展示(如 上海→北京)",
250
+ "parent": "admin.content.table.area"
251
+ },
252
+ {
253
+ "proposed_id": "admin.content.table.cell_link",
254
+ "function": "表格内可点击的链接文字单元(如运单号)",
255
+ "parent": "admin.content.table.area"
256
+ }
257
+ ],
258
+ "notes": "整页场景还原样例(对照效果图逐模块提取)。效果图定制冲突项:侧栏底色用钴蓝-10(极深)而非模板默认 #001529,以用户效果图为准;顶栏保持白底。灰阶临时色申报:白 #FFFFFF、浅灰 #FAFAFA、边框灰 #F0F0F0 为中性色(不属任何主题梯度),按临时主题 hex 直写,全主题通用。页面存在业务结构改动(标题区按钮数量与功能、demo 演示内容去留),需项目侧双层交付:页面结构层走业务闭环开发重建,视觉语义层按本变更集落地。问候语(下午好,张伟)文案属业务层,本变更集只声明其载体形态与样式。"
259
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "changes": [
3
+ {
4
+ "id": "portal.content.banner.carousel",
5
+ "style": {
6
+ "bg": "#7C3AED"
7
+ }
8
+ },
9
+ {
10
+ "id": "admin.layout.header.user_profile",
11
+ "style": {
12
+ "avatar_radius": "全圆角",
13
+ "unknown_field": "应进字段级待补充"
14
+ }
15
+ }
16
+ ],
17
+ "schema": "design.changeset/1.0",
18
+ "mode": "design",
19
+ "changeset_version": "1.0.0",
20
+ "mapping_version": "1.0.0",
21
+ "scene": "admin",
22
+ "$comment": "match 缺口阻断负例:含词典未登记点位(L3)与字段级未命中维度——缺口清单非空必须 exit 1(缺口只有补齐或回流两种合法出口)。",
23
+ "notes": "负例用途:模拟「词典能力缺口被静默放行」的失效模式。"
24
+ }
@@ -1,15 +1,15 @@
1
- {
2
- "$comment": "G8 模式闸负例:mode=restore 但缺 oracle 与 coverage(伪还原变更集,2026-09-20 事故的机检复现件)。预期:match 打印「G8 模式闸」并 exit 1。与 changeset-pos.json 的区别仅此——mode=restore 却没带基线三件套。",
3
- "schema": "design.changeset/1.0",
4
- "changeset_version": "1.0.0",
5
- "mapping_version": "1.0.0",
6
- "scene": "admin",
7
- "mode": "restore",
8
- "layout_type": "vertical",
9
- "global": { "brand_primary": "钴蓝-5" },
10
- "changes": [
11
- { "id": "admin.layout.sidebar.menu", "style": { "menu_bg": "钴蓝-9", "menu_active_bg": "钴蓝-5" } },
12
- { "id": "component.button.primary", "style": { "bg_color": "钴蓝-5" } }
13
- ],
14
- "notes": "伪还原变更集:只换主题色就宣称场景还原——没有 oracle 验收基线(还原度不可证明)、没有 coverage 登记表记账(组内子项静默丢失不可数)。G8 之前这类变更集只收软提示、一路绿灯,落地后用户看到「只变了主题、布局细节零变化」。"
15
- }
1
+ {
2
+ "$comment": "G8 模式闸负例:mode=restore 但缺 oracle 与 coverage(伪还原变更集机检复现件)。预期:match 打印「G8 模式闸」并 exit 1。与 changeset-pos.json 的区别仅此——mode=restore 却没带基线三件套。",
3
+ "schema": "design.changeset/1.0",
4
+ "changeset_version": "1.0.0",
5
+ "mapping_version": "1.0.0",
6
+ "scene": "admin",
7
+ "mode": "restore",
8
+ "layout_type": "vertical",
9
+ "global": { "brand_primary": "钴蓝-5" },
10
+ "changes": [
11
+ { "id": "admin.layout.sidebar.menu", "style": { "menu_bg": "钴蓝-9", "menu_active_bg": "钴蓝-5" } },
12
+ { "id": "component.button.primary", "style": { "bg_color": "钴蓝-5" } }
13
+ ],
14
+ "notes": "伪还原变更集:只换主题色就宣称场景还原——没有 oracle 验收基线(还原度不可证明)、没有 coverage 登记表记账(组内子项静默丢失不可数)。G8 之前这类变更集只收软提示、一路绿灯,落地后用户看到「只变了主题、布局细节零变化」。"
15
+ }