@qilitt-mickey/vue3-temp-skill 1.1.76 → 1.2.2

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 (86) hide show
  1. package/README.md +99 -82
  2. package/SKILL.md +65 -28
  3. package/bin/cli.js +5 -6
  4. package/mapping/admin.json +60 -0
  5. package/package.json +5 -13
  6. package/references/adapters/_new-adapter.md +88 -0
  7. package/references/adapters/vue-antdv.md +110 -0
  8. package/references/adapters/vue-element-plus.md +132 -0
  9. package/references/design-apply.md +259 -122
  10. package/scripts/check-landing.mjs +419 -0
  11. package/scripts/modules.json +2 -2
  12. package/dist/mapping-type.d.ts +0 -33
  13. package/dist/theme-vars.js +0 -62
  14. package/dist/theme-vars.ts +0 -113
  15. package/dist/theme.css +0 -73
  16. package/mapping/basic/color.json +0 -35
  17. package/mapping/basic/radius.json +0 -17
  18. package/mapping/basic/semantic-values.json +0 -72
  19. package/mapping/basic/spacing.json +0 -21
  20. package/mapping/basic/typography.json +0 -21
  21. package/mapping/component/button.json +0 -90
  22. package/mapping/component/card.json +0 -31
  23. package/mapping/component/input.json +0 -42
  24. package/mapping/component/overlay.json +0 -79
  25. package/mapping/component/pagination.json +0 -34
  26. package/mapping/component/table.json +0 -42
  27. package/mapping/component/tag.json +0 -48
  28. package/mapping/layout/breakpoint.json +0 -20
  29. package/mapping/layout/shell-geometry.json +0 -26
  30. package/mapping/scenes/admin/content.json +0 -497
  31. package/mapping/scenes/admin/layout.json +0 -577
  32. package/parser/fixtures/changeset-fullpage-restore.json +0 -259
  33. package/parser/fixtures/changeset-gap-block.json +0 -24
  34. package/parser/fixtures/changeset-legacy.json +0 -11
  35. package/parser/fixtures/changeset-neg1.json +0 -8
  36. package/parser/fixtures/changeset-neg2.json +0 -10
  37. package/parser/fixtures/changeset-neg3.json +0 -22
  38. package/parser/fixtures/changeset-neg4-g8.json +0 -15
  39. package/parser/fixtures/changeset-neg5-g8-stub.json +0 -26
  40. package/parser/fixtures/changeset-neg6-g9-identity.json +0 -39
  41. package/parser/fixtures/changeset-neg7-g10-dims.json +0 -57
  42. package/parser/fixtures/changeset-neg8-g11-oracle.json +0 -57
  43. package/parser/fixtures/changeset-neg9-g6-token-chain.json +0 -34
  44. package/parser/fixtures/changeset-pos-g6-token-chain.json +0 -35
  45. package/parser/fixtures/changeset-pos-theme-neutral.json +0 -264
  46. package/parser/fixtures/changeset-pos-theme-nometa.json +0 -260
  47. package/parser/fixtures/changeset-pos.json +0 -50
  48. package/parser/fixtures/changeset-registry-gap.json +0 -29
  49. package/parser/fixtures/changeset-v32-fields.json +0 -71
  50. package/parser/fixtures/fake-project/src/styles/app.scss +0 -5
  51. package/parser/fixtures/fake-project/src/views/list.vue +0 -13
  52. package/parser/fixtures/registry-bad.json +0 -11
  53. package/parser/fixtures/registry-g6-token-chain.json +0 -10
  54. package/parser/fixtures/registry-sample.json +0 -15
  55. package/parser/fixtures/verify/actual-clean.json +0 -35
  56. package/parser/fixtures/verify/actual.json +0 -33
  57. package/parser/fixtures/verify/mockup-baseline-admin-list.html +0 -27
  58. package/parser/fixtures/verify/mockup-g6-content.html +0 -12
  59. package/parser/fixtures/verify/mockup-neutral.html +0 -26
  60. package/parser/fixtures/verify/mockup-nometa.html +0 -26
  61. package/parser/fixtures/verify/oracle.json +0 -37
  62. package/parser/fixtures/verify/snapshot-latest.json +0 -103
  63. package/parser/generator.js +0 -178
  64. package/parser/index.js +0 -2706
  65. package/parser/loader.js +0 -66
  66. package/parser/override.js +0 -119
  67. package/parser/regression.js +0 -301
  68. package/parser/validator.js +0 -206
  69. package/parser/watch.js +0 -103
  70. package/references/steps/maintenance.md +0 -31
  71. package/references/steps/regression.md +0 -49
  72. package/references/steps/step0-preflight.md +0 -58
  73. package/references/steps/step1-match.md +0 -67
  74. package/references/steps/step1b-audit.md +0 -23
  75. package/references/steps/step1c-registry.md +0 -29
  76. package/references/steps/step2-structure.md +0 -73
  77. package/references/steps/step3-style.md +0 -38
  78. package/references/steps/step3b-shell.md +0 -63
  79. package/references/steps/step3c-priority.md +0 -26
  80. package/references/steps/step4-l3.md +0 -14
  81. package/references/steps/step5-gates.md +0 -65
  82. package/references/steps/step6-verify.md +0 -77
  83. package/scripts/apply-final-gate.mjs +0 -170
  84. package/scripts/check.mjs +0 -207
  85. package/scripts/design-audit.mjs +0 -1707
  86. package/scripts/validate.mjs +0 -106
package/README.md CHANGED
@@ -1,118 +1,131 @@
1
1
  # vue3-temp-skill
2
2
 
3
- Vue 3 企业级项目开发技能包。面向 vue3-web-temp 及其派生项目,把产品点子快速做成可演示、可验证、可继续演进的 Demo,同时约束代码质量。
3
+ Vue 3 企业级中后台项目开发技能包。两条链路:
4
4
 
5
- ## 文档分工
5
+ - **常规开发** —— 能力组路由(列表页 / 表单 / API / 权限 / 可视化 …)
6
+ - **视觉契约落地** —— 读设计侧契约,照抄生成三份 CSS
6
7
 
7
- | 文档 | 读者 | 内容 |
8
- |------|------|------|
9
- | `SKILL.md` | AI | 何时做什么、禁止什么、工作流约束 |
10
- | `README.md`(本文件) | 维护者 / 人类开发者 | 安装、脚本命令、本地调试、发布 |
11
- | `references/*.md` | AI(写代码时) | 标准样板、专项细则、硬失败表 |
12
- | `scripts/modules.json` | 匹配器 + 维护者 | 能力组关键词、同批加载、闸门项 |
8
+ 与设计侧 `project-ui-design` 构成双端体系。
13
9
 
14
10
  ## 这是什么
15
11
 
16
- `/vue3-temp-skill <需求>` → 项目探查 → 能力路由 → 按约定实现 → `code-quality` 闸门。
17
-
18
- - **始终加载** `core-kernel`
19
- - **按需** `project-inventory`(查依赖 / 装包 / 查 Re* 名录)
20
- - **按需** `addon-enable` — 只有目标项目确实存在排除项、占位插件或缺失接线时才读
21
- - **生成后闸门** `code-quality`:清单 + `pnpm lint:fix` + `pnpm type-check` + 结果块
12
+ ### 链路一 · 常规开发
22
13
 
23
- ## 使用方式
24
-
25
- ```
26
- /vue3-temp-skill <你的需求描述>
14
+ ```text
15
+ /vue3-temp-skill <自然语言需求>
16
+ → 项目探查(package.json / 路由 / Re* / Hooks / API)
17
+ → 能力路由(match.py "需求" --json,按 load_files 读)
18
+ → 业务闭环实现(页面 + 路由 + API + 类型 + mock)
19
+ → code-quality 清单 + lint / type-check
27
20
  ```
28
21
 
29
- 示例:
22
+ ### 链路二 · 视觉契约落地
23
+
24
+ ```text
25
+ 输入:<项目根>/.design/visual-contract-<场景>-<页型>.json
26
+ → ① 落地自检(六项:契约存在/完整/CSS生成/CSS引入/角色挂载/布局挂载)
27
+ → ② 读契约(唯一输入,只读一次)
28
+ → ③ 选 adapter(按 package.json 判定所用组件库)
29
+ → ④ 生成 ui-tokens.css(:root 变量)
30
+ → ⑤ 生成 ui-roles.css(.role-* 规则)
31
+ → ⑥ 生成 ui-layout.css(.ui-page 网格)
32
+ → ⑦ 挂载(.ui-page / .ui-region-* / .role-*)
33
+ → ⑧ 重跑自检确认六项全过 → 目视对照
34
+ ```
30
35
 
31
- - `/vue3-temp-skill 帮我开发一个客户管理模块,按名称、状态查询`
32
- - `/vue3-temp-skill 远程搜索下拉,支持分页与回写`
33
- - `/vue3-temp-skill 编辑页加数据变更对比`
34
- - `/vue3-temp-skill 关系图谱,力导向布局`
35
- - `/vue3-temp-skill 移动端客户列表用 Vant`
36
+ **AI 在链路二的工作是翻译,不是判断。** 契约写什么就生成什么——落点层级已由 `host[]` / `inner[]` 两个数组物理二分,落地端不推断属性该落哪一层。
36
37
 
37
- ## 模块一览
38
+ **落地自检是交付前置条件**(`npm run check:landing`):
38
39
 
39
- | 类型 | 能力组 |
40
- |------|------|
41
- | 始终 | core-kernel |
42
- | 闸门 | code-quality |
43
- | 高频 | page-crud、page-detail、data-service、forms、access、theme-layout、shared-ui |
44
- | 专项 | table-advanced、visualization、workflow、files-and-editors、realtime-and-mobile、data-compare、i18n |
45
- | 工程 | project-setup(project-inventory + addon-enable) |
40
+ | 检查项 | 断点含义 |
41
+ |---|---|
42
+ | `contract-found` | `.design/` 下没有契约 → 设计侧没落盘 |
43
+ | `contract-valid` | 契约字段缺失 |
44
+ | `css-generated` | 三份 CSS 未生成 |
45
+ | `css-imported` | **生成了但没被 import** → 浏览器不加载 |
46
+ | `roles-mounted` | **CSS 有规则但模板没挂类** → 死样式,只有个别角色生效 |
47
+ | `layout-mounted` | 没挂 `.ui-page` → 骨架仍是项目原样 |
46
48
 
47
- 能力组定义、关键词和参考文件由 `scripts/modules.json` 维护。
49
+ **任何一项断掉都会表现为「CSS 写了但页面没变化」。先跑自检定位断点,不要目视猜。**
48
50
 
49
- ## 维护者:扩展能力组
51
+ ## 视觉契约的核心机制
50
52
 
51
- 新增能力时先判断能否并入已有组;确需扩展时编辑 `scripts/modules.json`(关键词、`load` 映射),再运行 `npm run validate` 校验。
53
+ | 机制 | 说明 |
54
+ |---|---|
55
+ | **照抄不判断** | 不判断落点层级、不合并声明、不补角色库没有的角色、不改契约值 |
56
+ | **布局由 CSS 网格决定** | 项目布局组件退化为占位容器(只提供插槽);设计布局与项目布局不一致时,差异只体现在 `ui-layout.css` 的取值上 |
57
+ | **角色类独立命名空间** | `role-` 前缀独立类 + 独立文件,天然不与组件库同类规则竞争;确需提权走 adapter 唯一通道 |
58
+ | **令牌全站联动** | 契约令牌编译为 CSS 变量;改一个令牌值,全站引用它的地方同步变化 |
59
+ | **契约不含技术栈信息** | 只有 CSS 属性、令牌引用、区域与角色;组件库差异(深度选择器语法、穿透前缀、落点文件)全在 adapter |
52
60
 
53
- ## 脚本与 npm 命令
61
+ ## 文档分工
54
62
 
55
- ### 运行时(AI / 本地调试)
63
+ | 文件 | 读者 | 内容 |
64
+ |------|------|------|
65
+ | `SKILL.md` | AI | 触发方式、目标、能力组路由、工作流、视觉契约落地要点、红线 |
66
+ | `README.md`(本文件) | 维护者 / 开发者 | 安装、命令、扩展、新增 adapter、与模板的关系 |
67
+ | `references/*.md` | AI | 40+ 专项能力 reference(业务开发用) |
68
+ | `references/design-apply.md` | AI | **视觉契约落地协议**:六步流程 + 三列映射表 + 翻译规则 |
69
+ | `references/adapters/*.md` | AI | Vue 组件库适配:深度选择器语法 / 穿透前缀 / 落点文件 |
70
+ | `mapping/<场景>.json` | AI + 维护者 | 区域名 ↔ 项目现状对照(scope / var / fallback 三列) |
56
71
 
57
- | 脚本 | 职责 |
58
- |------|------|
59
- | `scripts/match.py` | 能力路由器:输入需求,输出 JSON(`load_files`、同批加载、闸门项) |
60
- | `parser/index.js` | 设计变更集解析器:`build` 校验编译 / `match` 三级匹配 / `list` 词典清单 / `query` 单条详情(design-apply 能力组) |
61
- | `parser/watch.js` / `npm run mapping:watch` | 开发态监听 mapping/ 变更自动重编译 dist/ |
62
- | `parser/override.js` | 业务级映射覆写 API(链路 A 配套,`overrideMapping` / `overrideMappings`) |
72
+ ## 安装
63
73
 
64
- **匹配器调用(本地环境):**
74
+ Node.js >= 22.12.0
65
75
 
66
76
  ```bash
67
- # Windows 优先
68
- py -3 scripts/match.py "客户列表查询跳转详情" --json
69
-
70
- # 通用
71
- python scripts/match.py "客户列表查询跳转详情" --json
72
- python scripts/match.py --batch # 15 个典型场景回归
77
+ npx @qilitt-mickey/vue3-temp-skill@latest install all
73
78
  ```
74
79
 
75
- **npm 封装:**
80
+ 一键安装到本机检测到的全部 AI 编程工具;也可显式指定:
76
81
 
77
82
  ```bash
78
- npm run match # python scripts/match.py
79
- npm run match:batch # 批量回归
83
+ npx @qilitt-mickey/vue3-temp-skill@latest install cursor
84
+ npx @qilitt-mickey/vue3-temp-skill@latest install all --project ./my-app
85
+ npx @qilitt-mickey/vue3-temp-skill@latest update
80
86
  ```
81
87
 
82
- ### 维护者(不随技能安装分发)
88
+ | 目标 | 级别 |
89
+ |------|------|
90
+ | cursor / qoder / claude / universal / windsurf / trae | 全局(个人目录) |
91
+ | copilot / gemini | 项目级(需 `--project <dir>`) |
83
92
 
84
- | 脚本 / 命令 | 职责 |
85
- |-------------|------|
86
- | `scripts/validate.mjs` / `npm run validate` | 结构校验:frontmatter、路由引用、交叉引用 |
87
- | `scripts/check.mjs` / `npm run check` | 发布前检查:validate + match 批量回归 |
88
- | `scripts/cli.mjs` | 统一入口:`--validate` / `--route` / `--list` |
89
- | `npm run release` | 先 check,再升版本、提交、发布 npm |
93
+ 安装器复制运行时文件:`references/`(含 `adapters/`)、`scripts/`(`match.py` + `modules.json`)、`mapping/`、`SKILL.md`、`README.md`。`release.js` 留在技能包仓库供维护使用。
90
94
 
91
- ```bash
92
- node scripts/cli.mjs --list
93
- node scripts/cli.mjs --route "客户列表跳转详情"
94
- node scripts/cli.mjs --validate
95
- npm run check
96
- ```
95
+ 开发期调试可直接从源码目录安装:`node bin/cli.js install claude`。
97
96
 
98
- ## 安装
97
+ ## 命令
99
98
 
100
- Node.js >= 22.12.0
99
+ | 命令 | 职责 |
100
+ |------|------|
101
+ | `node bin/cli.js install <target>` | 安装器统一入口:`install` / `update` / `uninstall` / `list` |
102
+ | `npm run check:landing` | **契约落地自检**(六项):判断「契约 → 样式 → 挂载」断在哪一环 |
103
+ | `python scripts/match.py "需求" --json` | 能力路由:按需求返回应加载的 reference 清单 |
104
+ | `npm run release`(`:minor` / `:major`) | 结构检查 → 升版本 → 提交 → 发布 npm |
101
105
 
102
- ```bash
103
- npx @qilitt-mickey/vue3-temp-skill@latest install all
104
- ```
106
+ ## 扩展
105
107
 
106
- 安装器复制 AI 运行时文件:`match.py`、`modules.json`、`mapping/`(语义 ID 词典)、`parser/`(变更集解析器)。validate / check / cli / release 留在技能包仓库供维护使用。
108
+ | 要加什么 | 怎么做 | 哪些文件不动 |
109
+ |---|---|---|
110
+ | 新业务能力 | 在 `references/` 加一份专项 md + 在 `scripts/modules.json` 登记 | 其余全部 |
111
+ | 新组件库适配 | 照 `references/adapters/_new-adapter.md` 写一份 Vue 组件库 adapter | 契约、`design-apply.md`、其他 adapter |
112
+ | 新场景的变量映射 | 加 `mapping/<场景>.json` | adapter 与契约 |
113
+ | 项目自身能力 | 写进 `references/project-inventory.md` | 全部 |
107
114
 
108
- | 目标 | 说明 |
109
- |------|------|
110
- | 个人 Skill 目录 | 安装器写入当前 AI 环境支持的 Skill 目录 |
111
- | 项目级说明 | 部分环境支持写入项目内说明文件 |
115
+ **新增 adapter 的判据**:写完后同一份契约应能不改一行内容地落到用该组件库的项目。若需要改契约,说明 adapter 越界了。
116
+
117
+ **关于跨前端框架**:契约格式本身不含技术栈信息,因此可以交给不同框架的项目技能消费。但**本技能只服务 Vue 3**,adapter 只覆盖 Vue 组件库——支持 React / Angular 等框架时,由对应框架的项目技能自带 adapter,契约无需改动。
112
118
 
113
- 具体路径因 AI 环境而异,安装完成后以安装器输出为准。
119
+ ## 与设计侧的关系
120
+
121
+ | 契约 | 说明 |
122
+ |------|------|
123
+ | 视觉契约 | 设计侧唯一交付物,协议 `ui.visual-contract/1.0`;只有 CSS 属性、令牌引用、区域与角色 |
124
+ | 落点路径 | 设计侧写 `<项目根>/.design/`,本技能从同一路径读——目录通用,与 AI 工具无关 |
125
+ | 三列映射表 | 本技能侧的 `mapping/<场景>.json`,把契约的区域名对到项目现状的承载类名 |
126
+ | adapter | 承接组件库差异,本技能侧维护;设计侧不感知 |
114
127
 
115
- ## 与模版的关系
128
+ ## 与模板的关系
116
129
 
117
130
  本 Skill 约定对齐 **vue3-web-temp** 精简脚手架:
118
131
 
@@ -123,7 +136,11 @@ npx @qilitt-mickey/vue3-temp-skill@latest install all
123
136
  | 本包 `references/` | AI + 开发者 | **标准样板**、专项细则、addon 安装表 |
124
137
  | 本包 `addon-enable.md` | AI + 开发者 | **出厂已删依赖的逐文件恢复代码** |
125
138
 
126
- - 模板仓库:布局壳 + `Re*` 源码 + 多种已接线能力;具体依赖和构建状态以目标项目当前源码为准
127
- - **标准样板**:在本包 `references/`;模板 `views/` 主要用于确认真实接线,不直接复制演示文案
128
- - 壳层、组件和 API 以当前项目源码为准;规范文档只补充实现方法
129
- - HTTP:仅经 `@/utils/http`;版本以目标项目 `package.json` 和锁文件为准
139
+ ## 工具中立
140
+
141
+ 本包与任何 AI 工具无关。`references/` / `scripts/` / `mapping/` / `SKILL.md` 内不出现任何特定 AI 工具的名称或专有路径;`bin/cli.js` 的多工具安装清单是**分发特性**,不是内容绑定。
142
+
143
+ ## 发布
144
+
145
+ - 维护侧:`npm run release` 自动完成结构检查、升版本与发布(支持 `--dry-run` / `--no-push`)
146
+ - 用户侧:发布后经 `npx @qilitt-mickey/vue3-temp-skill@latest update` 更新已安装目标
package/SKILL.md CHANGED
@@ -1,15 +1,13 @@
1
1
  ---
2
2
  name: "vue3-temp-skill"
3
- description: "Vue 3 企业级项目开发技能。面向 vue3-web-temp 及其派生项目,帮助产品经理和前端快速把点子做成可演示、可验证、可继续演进的 Demo;同时约束真实模板复用和代码质量。"
3
+ description: "Vue 3 企业级项目开发技能。面向 vue3-web-temp 及其派生项目,帮助产品经理和前端快速把点子做成可演示、可验证、可继续演进的 Demo;同时约束真实模板复用、代码质量,并支持把设计侧的视觉契约照抄落地。"
4
4
  scope: project
5
5
  agent_created: true
6
- tags: [vue3, typescript, element-plus, pinia, vite, unocss, crud, demo, code-quality]
6
+ tags: [vue3, typescript, element-plus, pinia, vite, unocss, crud, demo, code-quality, visual-contract]
7
7
  ---
8
8
 
9
9
  # Vue 3 项目开发技能
10
10
 
11
- > **体系版本:1.0.0**(双 Skill 唯一版本声明点之一;设计侧 project-ui-design 同版)。版本恒定策略:双侧始终同版,不随内容修改递增,仅协议破坏性变更时双侧同步升版。mapping/*.json 的 `meta.version` 与变更集校验均恒为 `1.0.0`,不单独演进。
12
-
13
11
  ## 目标
14
12
 
15
13
  把产品点子快速落到真实 Vue 3 项目中,先形成客户可看的完整 Demo,再保留后续正式开发所需的代码边界。页面可以使用 mock 和最小数据,但不得使用模板演示噪音、虚构项目能力或堆叠无法维护的代码。
@@ -26,13 +24,20 @@ tags: [vue3, typescript, element-plus, pinia, vite, unocss, crud, demo, code-qua
26
24
  - 做一个订单仪表盘,含统计卡片和趋势图
27
25
  - 给现有 Demo 增加附件上传、导出或审批流
28
26
  - 把一个页面从 mock 改成真实 API
29
- - 「按这份设计方案改造全系统」/ 落地设计技能产出的设计文件(用户可能是小白,只会给文件路径或拖入文件;见 §3b)
27
+ - 「按这份设计契约改造全系统」(用户可能是小白,只会给文件路径或拖入文件;见 §3b)
30
28
 
31
29
  ## 运行时只保留三件事
32
30
 
33
31
  1. **项目探查**:读取目标项目的 `package.json`、路由、页面、`Re*` 组件、Hooks、API 和样式;以源码事实为准。
34
32
  2. **能力路由**:运行 `scripts/match.py "需求" --json`,**仅**按输出中的 `load_files` 阅读 reference;禁止自行展开全部 `references/`。无 Python 时按下方能力组表手动匹配。
35
- 3. **质量闸门**:代码完成后读取 `references/code-quality.md`,执行清单和项目命令。设计变更集落地后追加**设计层闭环审计**:`node scripts/design-audit.mjs --project <落地项目> --container-width <内容区实际宽>`(ERROR 必须清零;无落地项目时自动跳过)。**会话结束前必须跑通终态凭证闸**:`node scripts/apply-final-gate.mjs --project <落地项目> --container-width <内容区实际宽>`(串联 changeset-selfcheck → parser match → parser audit → design-audit 四闸,`FINAL-GATE: PASS` 才算交付完成,凭证写入 `.design/ledger.json`)。
33
+ 3. **视觉契约落地**:输入是设计侧的视觉契约 JSON 时,走 `design-apply` 协议——**先跑落地自检,再照抄生成三份样式文件**,见 §3 输入分流。
34
+
35
+ ```bash
36
+ node <技能>/scripts/check-landing.mjs --project <项目根>
37
+ ```
38
+
39
+ **六项全过(exit 0)是交付前置条件**:契约存在 → 契约完整 → 三份 CSS 生成 → 被 import → 角色类挂载 100% → 布局类挂载。
40
+ **任何一项断掉,都会出现「CSS 写了但页面没变化」——先修断点,不要目视猜。**
36
41
 
37
42
  ## 能力组路由
38
43
 
@@ -51,7 +56,7 @@ tags: [vue3, typescript, element-plus, pinia, vite, unocss, crud, demo, code-qua
51
56
  | `files-and-editors` | 附件、预览、下载、富文本、二维码 | `file-management.md`、`download-export.md`、`rich-text.md`、`qrcode-barcode.md` |
52
57
  | `realtime-and-mobile` | WebSocket、移动端、微信、验证码、动效 | 对应专项 reference |
53
58
  | `data-compare` | 编辑页变更对比和汇总 | `data-compare.md` |
54
- | `design-apply` | 设计变更集落地:语义 ID 三级匹配、结构/形态/两层样式转换、锚点与结构施工、覆写提权、渲染态验收、合规闸门。**主入口 `design-apply.md`(红线+契约+步骤索引),各步骤明细见 `references/steps/`——做到哪一步读哪一份** | `design-apply.md`、`steps/`、`mapping/`、`parser/`、`scripts/design-audit.mjs`、`scripts/apply-final-gate.mjs` |
59
+ | `design-apply` | **视觉契约落地**:落地自检 → 读契约 → 选 adapter → 生成三份 CSS → 挂载 → 覆盖验证。**主入口 `design-apply.md`,adapter 见 `adapters/`(做到哪一步读哪一份)** | `design-apply.md`、`adapters/`、`mapping/`、`scripts/check-landing.mjs` |
55
60
 
56
61
  ## 工作流
57
62
 
@@ -65,7 +70,7 @@ tags: [vue3, typescript, element-plus, pinia, vite, unocss, crud, demo, code-qua
65
70
 
66
71
  - 先读 `references/core-kernel.md`。
67
72
  - 运行 `scripts/match.py "需求" --json`,按 `load_files` 阅读。
68
- - 读取目标项目当前 `package.json` 和锁文件;不要根据“core/addon”标签猜依赖是否存在。
73
+ - 读取目标项目当前 `package.json` 和锁文件;不要根据"core/addon"标签猜依赖是否存在。
69
74
  - 扫描已有 `Re*`、Hooks、`src/api`、路由和相关页面;已有封装优先于技能示例。
70
75
 
71
76
  ### 3. 实现闭环
@@ -76,40 +81,70 @@ tags: [vue3, typescript, element-plus, pinia, vite, unocss, crud, demo, code-qua
76
81
  - Demo 可以最小化数据和接口,但目录、类型、命名和组件边界要能承接后续开发。
77
82
  - 新依赖先检查目标项目;缺失时说明精确版本、原因和构建接线,确认后再安装。
78
83
  - 只有目标项目确实存在排除项、占位插件或缺失接线时,才读取 `addon-enable.md` 恢复配置。
79
- - **输入为设计文件时**:用户给出设计技能(project-ui-design)产出的 JSON 文件(无论叫"设计方案/设计文件/变更集")→ 不走常规闭环,改走 `design-apply.md` 协议——先跑 `node parser/index.js audit` 复核锚点(挂载点/死通道),再按「结构先行(`structure_ops`)、样式两层转换、必要时覆写提权(`priority`)」落地,最后过变更集合规闸门。变更集新增三类声明维度:`apply_via`(落点通道)/ `layer`(`host` 宿主盒 / `inner` 内层文本盒)/ `structure_ops`(数据·结构驱动点位的结构操作);词典条目对应新增 `anchors` / `preconditions` / `priority`。
84
+
85
+ **输入分流**:
86
+
87
+ | 输入 | 走哪条链路 |
88
+ |---|---|
89
+ | 自然语言需求(业务功能) | 常规闭环(见上) |
90
+ | **设计侧的视觉契约 JSON**(`ui.visual-contract/1.0`,落盘在 `.design/`) | **`design-apply.md` 协议** —— 照抄生成 `ui-tokens.css` / `ui-roles.css` / `ui-layout.css` |
80
91
 
81
92
  ### 3b. 小白用户执行纪律(design-apply 场景)
82
93
 
83
94
  使用者默认**不懂设计也不懂代码**,交互遵守四条:
84
95
 
85
- 1. **全自动默认**:识别为设计文件落地后**直接开始执行 parser match → 结构 → 样式 → 闸门全流程**,不等用户逐步确认,不询问"是否继续";唯一停顿点是文件缺失/版本不匹配/parser 报错——此时用大白话报告并给选择题。
86
- **禁止以「待确认」搁置可落地项**:词典缺 ID / 缺字段枚举 / 缺 form 属**能力缺口**,当场补临时映射并落地(出厂文件仅在补通道时可动,交付说明单列申报);只有「设计侧没给值」才是**意图缺口**,去向是回流设计侧补齐,不是问用户要不要做。
87
- 2. **术语不对用户出现**:对用户不说"变更集/语义 ID/三级匹配/pending/令牌"——说"设计方案/设计点位/自动适配/新增点位/全局样式"。这些词只出现在内部文档与交付说明里。
88
- 3. **无文件时的引导**:用户说"全系统改成 XX 风格"但没给设计文件 → 提示一句话:"请先在设计助手(project-ui-design 技能)里说『我要 XX 风格的全系统设计』拿到设计文件,再回来发给我"。如果本机同时装有设计技能,可直接引导用户回到设计会话完成设计,再回本项目落地。
89
- 4. **交付话术**:完成后用大白话总结(改了哪些页面/哪些地方变了/怎么验收),不输出施工坐标等技术细节;验收引导统一为"运行 `pnpm dev` 打开页面对照看效果,哪里不满意直接说"。
96
+ 1. **全自动默认**:识别为视觉契约后**直接开始执行全流程**(落地自检 → 读契约 → 选 adapter → 生成三份 CSS → 挂载 → 验证),不等用户逐步确认。
97
+ 2. **契约缺失 = 硬阻断,不允许"边猜边改"**:`check-landing.mjs` 报 `contract-found FAIL` 时**必须停下**,用大白话报告「还没拿到设计文件」并给出下一步。**严禁在契约缺失的情况下凭理解直接改项目样式**——那是旧体系的失败模式:改了一堆 CSS 却没有任何东西对应,最后只有个别地方碰巧变了。
98
+ 3. **契约存在但 `roles-mounted` 未 100% = 不算完成**:角色类没挂满,页面上就只会有个别角色生效(常见症状:只有菜单颜色变了)。必须按 adapter 的「角色类挂载方式」补齐后重跑自检。
99
+ 4. **术语不对用户出现**:对用户不说"契约 / 角色 / 令牌 / adapter / 区域 / 自检"——说"设计文件 / 样式规则 / 全局变量 / 组件适配 / 页面区域 / 检查"。这些词只出现在内部文档与交付说明里。
100
+ 5. **无文件时的引导**:用户说"全系统改成 XX 风格"但没给设计文件 → 提示一句话:"请先在设计助手(project-ui-design 技能)里说『我要 XX 风格的全系统设计』拿到设计文件,再回来发给我"。如果本机同时装有设计技能,可直接引导用户回到设计会话完成设计,再回本项目落地。
101
+ 6. **交付话术**:完成后用大白话总结(改了哪些页面 / 哪些地方变了 / 怎么验收),不输出施工坐标等技术细节;验收引导统一为"运行 `pnpm dev` 打开页面对照看效果,哪里不满意直接说"。
90
102
 
91
103
  ### 4. 验证与交付
92
104
 
93
105
  - 对照 `references/code-quality.md` 检查类型、组件复用、API、路由、权限、安全、异常反馈、响应式和可演进性。
94
- - 在目标项目执行 `pnpm lint:fix`、`pnpm type-check`;改动构建配置时再执行 `pnpm build`。**本轮产出或修改设计变更集时,这两条不含还原度检查——必须按 code-quality 协议 3 同链追加终态闸 `apply-final-gate`(串联 selfcheck → match → audit → design-audit,取得 FINAL-GATE: PASS),禁止只跑 lint 链就报「全部质量闸门通过」。**
95
- - **设计文件落地时追加渲染态验收**:变更集含 `oracle`(或效果图带 `data-sid`)时,跑 `node parser/index.js verify`——抽取项目同名 `data-sid` 元素的 computed style,与效果图期望值逐点 diff;缺口按四类归因(选择器落空 / 权重被压 / 语境错位 / **存在性缺口 G12**:`oracle.absent` 点位仍可见)修正,禁止用 `!important` 掩盖。多轮迭代场景每轮动工前先 `--snapshot` 导快照、交付前 `--baseline` 比对——上轮命中本轮退步 = 基线漂移,先回归上轮修法。申报过的固有残差(`oracle.residual_accepted`)不计缺口。
96
- - **设计文件落地时核对登记表覆盖率**:变更集带登记表(`coverage.registry` 或 `--registry`)时,跑 `node parser/index.js match <cs.json> --registry <restore-registry.json>`——`C = A` 且无缺口才可交付;parser **当场以登记表为权威重算**,设计侧自报的 `coverage` 数字不参与。单独核验登记表对词典的通道就绪度用 `node parser/index.js registry <restore-registry.json>`(硬缺口 exit 1、通道缺口列出待补字段)。
106
+ - 在目标项目执行 `pnpm lint:fix`、`pnpm type-check`;改动构建配置时再执行 `pnpm build`。
107
+ - **设计契约落地时追加目视对照**:打开页面与契约 `meta.source.mockup` 指向的效果图并排看;有差异 → **改契约 → 重新生成 CSS**(改契约远比改代码便宜)。不建期望值文件、不跑采集脚本、不做逐点 diff 报告。
97
108
  - 最终说明:命中能力组、修改文件、功能验证、命令结果、未解决问题和下一步。
98
109
 
99
- ## 出厂中性 · 变更集驱动(design-apply 架构红线)
110
+ ## 视觉契约落地(design-apply 架构要点)
111
+
112
+ 契约是设计侧产出的**项目完整视觉事实源**,协议 `ui.visual-contract/1.0`。
100
113
 
101
- 目标项目源码 = **中性初始化**,只提供能力通道(CSS 变量的消费者挂载点、form 枚举、DOM/属性钩子、正确的层叠优先级),**不预置任何具体设计的结论**(某个颜色、某句问候语、某个方位的指示条、某个硬编码尺寸)。
114
+ | 原则 | 含义 |
115
+ |---|---|
116
+ | **照抄不判断** | 契约写什么就生成什么。落点层级已由 `host[]` / `inner[]` 两个数组物理二分,落地端不推断「这属性落哪层」 |
117
+ | **契约是唯一事实源** | 不读项目现有样式来决定怎么落地;冲突时以契约为准 |
118
+ | **布局由 CSS 网格决定** | 项目布局组件退化为**占位容器**(只提供插槽,不参与布局决策);设计布局与项目布局不一致时,差异只体现在 `ui-layout.css` 的取值上,不需要适配、不需要切形态、不需要结构手术 |
119
+ | **角色类独立命名空间** | 角色类是 `role-` 前缀的独立类 + 独立文件,天然不与组件库同类规则竞争;确需提权时走 adapter 的唯一通道,**不在角色类里整条加 `!important`** |
120
+ | **契约不含技术栈** | 契约里只有 CSS 属性、令牌引用、区域与角色——本技能据此生成样式,无需理解组件内部实现 |
121
+ | **组件库差异只在 adapter** | 深度选择器语法、穿透前缀、落点文件——adapter 的全部职责;本技能只服务 Vue 3,adapter 只覆盖 Vue 组件库 |
102
122
 
103
- - 一切设计决策由设计变更集驱动,经 `design-apply` 动态落到「设计层文件 `src/styles/design-shell.scss` / 页面级 scoped 样式 / DOM 属性与配置」,不落到出厂样式文件与出厂组件里。
104
- - **效果图页面 = 设计角色坐标系,不是页面增量(G13 页面绑定闸)**:效果图页面(如「运单管理」)是设计侧为承载设计语言虚构的演示标题,**默认映射到项目已有页面**——落地动作恒为「在已有页面上同步结构与样式」,**禁止因效果图新增页面 / 路由 / 菜单项**;唯一例外是变更集 `page_bindings` 显式声明 `target:"new"` 且在 `notes` 申报。判据:换一张效果图不需要改项目的页面/路由/菜单清单 ⇒ 架构正确;需要新增页面才能换 ⇒ 设计演示页被误当业务增量,必须回退。
105
- - **演示占位内容 = 效果的角色承载,不是还原目标(演示内容等价)**:项目演示页上为展示"此处可放控件"而写的占位说明文字 / 演示按钮,既不是效果图的角色、也不是设计意图。落地时必须把落在效果图对应角色上的演示占位**替换为设计对应内容**,或对效果图没有该位置的点位**收口隐藏**——**还原后的页面不得残留模板演示说明性文字与占位按钮**。判据:残留演示文案说明「效果 vs 内容」混淆——把模板演示内容当成设计还原,必须回退(详见 design-apply 第 2 步「出厂演示占位内容等价」)。
106
- - 判据:换一张效果图只需换变更集、不必改源码 ⇒ 架构正确;需要改源码才能换 ⇒ 设计结论被烧进源码,必须回退为通道。
107
- - 出厂文件仅在「通道缺失」时可动(补变量消费者 / 补 form 枚举 / 修层叠优先级),且必须在交付说明中单列「补通道」条目写明缺失点。
123
+ **三条产物的命名空间互不干扰**:
124
+
125
+ | 命名空间 | 归属 | 产物 |
126
+ |---|---|---|
127
+ | 页面私有样式 | 常规开发 | 页面 scoped 样式 |
128
+ | `role-` | 视觉契约落地 | `src/styles/ui-roles.css` |
129
+ | `ui-` | 视觉契约落地 | `src/styles/ui-tokens.css` + `src/styles/ui-layout.css` |
108
130
 
109
131
  ## 项目事实优先级
110
132
 
111
133
  `目标项目当前源码` > `目标项目 package.json / 锁文件` > `本 Skill reference` > `通用 Vue 习惯`。
112
134
 
135
+ ## 工具中立(不可越)
136
+
137
+ 本技能包**与任何 AI 工具无关**,可被任意工具识别与调用。
138
+
139
+ | 约束 | 说明 |
140
+ |---|---|
141
+ | **技能内容零工具痕迹** | `references/` / `scripts/` / `mapping/` / `SKILL.md` 内不出现任何特定 AI 工具的名称、专有目录、专有文件格式 |
142
+ | **路径约定用通用目录** | 读契约:`<项目根>/.design/`;写样式:`src/styles/`。都是通用项目目录 |
143
+ | **分发靠 CLI 多目标** | `bin/cli.js` 的多工具安装能力是**分发特性,不是内容绑定**;工具清单可增删,不影响技能内容 |
144
+ | **触发用 Slash Command** | `/vue3-temp-skill`,各工具通用约定 |
145
+
146
+ **判据**:把本包放进任何一个支持 Markdown + JSON + Python 的 AI 环境,不改任何一行内容就能用。
147
+
113
148
  ## 默认禁止
114
149
 
115
150
  - 不在页面内直接使用 `axios` / `fetch`,不虚构 API 前缀。
@@ -117,6 +152,10 @@ tags: [vue3, typescript, element-plus, pinia, vite, unocss, crud, demo, code-qua
117
152
  - 不使用裸 `v-if` 代替权限指令,不使用不可信 `v-html`。
118
153
  - 不为了视觉效果引入未经确认的新 UI 框架或图表库。
119
154
  - 不把 lint 通过当成业务闭环完成。
155
+ - **不改组件库源码**;样式调整只经 `ui-*.css` 三份文件与项目自身样式层。
156
+ - **不直接改生成出来的 `ui-*.css`**——要改改契约或改 adapter,然后重新生成。直接改会被下次生成覆盖,且不留痕迹。
157
+ - **不在角色类里整条加 `!important`**——层叠问题走 adapter 的唯一提权通道。
158
+ - **不为契约新增技术栈字段**——组件库差异进 adapter,契约保持中立。
120
159
 
121
160
  ## 最终回复格式
122
161
 
@@ -131,7 +170,5 @@ tags: [vue3, typescript, element-plus, pinia, vite, unocss, crud, demo, code-qua
131
170
  - 功能:...
132
171
  - `pnpm lint:fix`:通过 | 失败(原因)
133
172
  - `pnpm type-check`:通过 | 失败(原因)
134
- - 设计闸(本轮有设计变更集时必填,无则 N/A):`apply-final-gate` → FINAL-GATE: PASS ✅(凭证已写入 ledger.json)
135
- - 设计验收:无 oracle 时 N/A | 逐点 diff 结果(命中 N / 缺口 M,归因与修正)
136
- - 缺口回流:无 | 仅限「设计侧未给值」的维度(列出维度名,注明已回流设计侧补齐)
137
- ```
173
+ - 视觉契约落地(本轮有契约输入时必填,无则 N/A):三份 CSS 已生成 → 目视对照差异 N 处(已改契约重新生成 / 待确认)
174
+ ```
package/bin/cli.js CHANGED
@@ -35,7 +35,7 @@ const TRACK_FILE = path.join(HOME, ".vue3-temp-skill.json");
35
35
  // 累积性(ledger 台账)/ 终态机读凭证(四闸串联,FINAL-GATE: PASS)是落地会话的运行时闸——
36
36
  // 缺了它们「只挑主题令牌落地 + 覆盖历史成果 + 以自述结束会话」无法被静态拦截
37
37
  // (失效模式:运行时副本缺审计闸时,残缺口变更集会一路绿灯)。
38
- const RUNTIME_SCRIPT_FILES = ["match.py", "modules.json", "design-audit.mjs", "check.mjs", "apply-final-gate.mjs"];
38
+ const RUNTIME_SCRIPT_FILES = ["match.py", "modules.json", "check-landing.mjs"];
39
39
  const PKG_VERSION = JSON.parse(fs.readFileSync(path.join(SKILL_DIR, "package.json"), "utf-8")).version;
40
40
 
41
41
  // ============================================================
@@ -266,11 +266,10 @@ function installSkills(targetKey, projectDir) {
266
266
  }
267
267
  }
268
268
 
269
- // design-apply 能力组依赖:mapping/ 词典 + parser/ 解析器(变更集落地的运行时依赖)
270
- // parser/fixtures/ 为作者侧回归夹具(A-O 回归步骤的测试数据),不随技能分发,保留在仓库
271
- for (const runtimeDir of ["mapping", "parser"]) {
272
- const src = path.join(SKILL_DIR, runtimeDir);
273
- if (fs.existsSync(src)) copyDir(src, path.join(dest, runtimeDir), ["fixtures"]);
269
+ // 视觉契约落地依赖:mapping/ 三列变量映射表(区域名 ↔ 项目现状对照)
270
+ const mappingSrc = path.join(SKILL_DIR, "mapping");
271
+ if (fs.existsSync(mappingSrc)) {
272
+ copyDir(mappingSrc, path.join(dest, "mapping"));
274
273
  }
275
274
 
276
275
  // Cursor:清理旧版 rules/*.mdc,避免与 skills 重复
@@ -0,0 +1,60 @@
1
+ {
2
+ "schema": "ui.var-map/1.0",
3
+ "$comment": "项目视觉变量映射表:契约区域名 ↔ 项目现状的对照。只有三列——scope(承载类名)/ var(项目侧尺寸变量,可选)/ fallback(缺区域时的占位值)。落点层级由契约的 host/inner 二分承载,优先级由 adapter 统一,形态由契约声明本身承载——本表不承载这三件事。",
4
+
5
+ "scene": "admin",
6
+ "stack": "vue3 + element-plus",
7
+ "adapter": "vue-element-plus",
8
+
9
+ "layoutHost": {
10
+ "path": "src/layout/lay-admin/index.vue",
11
+ "note": "退化为占位容器:只提供插槽,不参与布局决策。页面骨架由 ui-layout.css 的 .ui-page 网格决定。"
12
+ },
13
+
14
+ "regions": {
15
+ "sidebar": {
16
+ "scope": ".lay-sidebar",
17
+ "var": "--ui-sidebar-w",
18
+ "collapsedVar": "--ui-sidebar-w-collapsed",
19
+ "fallback": "208px"
20
+ },
21
+ "header": {
22
+ "scope": ".lay-header",
23
+ "var": "--ui-header-h",
24
+ "fallback": "54px"
25
+ },
26
+ "tabs": {
27
+ "scope": ".lay-tabs",
28
+ "var": "--ui-tabs-h",
29
+ "fallback": "40px"
30
+ },
31
+ "content": {
32
+ "scope": ".lay-content",
33
+ "var": "--ui-content-padding",
34
+ "fallback": "24px"
35
+ }
36
+ },
37
+
38
+ "penetrable": [
39
+ ".el-menu",
40
+ ".el-menu-item",
41
+ ".el-table",
42
+ ".el-table__cell",
43
+ ".el-table__empty-text",
44
+ ".el-input__wrapper",
45
+ ".el-select__wrapper",
46
+ ".el-tag",
47
+ ".el-pagination",
48
+ ".el-card__body",
49
+ ".el-dialog__body",
50
+ ".el-tabs__item",
51
+ ".el-date-editor",
52
+ ".el-range-input"
53
+ ],
54
+
55
+ "notes": [
56
+ "penetrable 是需要 inner 穿透的组件库前缀,由 adapter 提供语法,落地时按角色的 inner 落点选取对应目标。",
57
+ "var 字段是项目侧可选变量名:项目已有则复用(便于项目自身主题切换联动),没有则直接用契约值写入 ui-layout.css。",
58
+ "布局占位改造范围限定在布局组件的模板与样式层,业务插槽内的代码不动。"
59
+ ]
60
+ }
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@qilitt-mickey/vue3-temp-skill",
3
- "version": "1.1.76",
3
+ "version": "1.2.2",
4
4
  "type": "module",
5
- "description": "Vue 3 企业级中后台项目开发规范技能包 — core-kernel 架构、按需功能模块",
5
+ "description": "Vue 3 企业级中后台项目开发规范技能包 — core-kernel 架构、按需功能模块、视觉契约落地",
6
6
  "bin": {
7
7
  "vue3-temp-skill": "./bin/cli.js"
8
8
  },
@@ -15,8 +15,6 @@
15
15
  "references/",
16
16
  "scripts/",
17
17
  "mapping/",
18
- "parser/",
19
- "dist/",
20
18
  "SKILL.md",
21
19
  "README.md"
22
20
  ],
@@ -27,16 +25,9 @@
27
25
  "release": "node release.js",
28
26
  "release:minor": "node release.js minor",
29
27
  "release:major": "node release.js major",
30
- "check": "node scripts/check.mjs",
31
- "prepack": "node scripts/check.mjs",
32
- "validate": "node scripts/validate.mjs",
33
- "audit": "node scripts/design-audit.mjs",
34
- "final-gate": "node scripts/apply-final-gate.mjs",
28
+ "check:landing": "node scripts/check-landing.mjs --project .",
35
29
  "match": "python scripts/match.py",
36
30
  "match:batch": "python scripts/match.py --batch",
37
- "mapping:build": "node parser/index.js build",
38
- "mapping:watch": "node parser/watch.js",
39
- "regression": "node parser/regression.js",
40
31
  "postpublish": "echo 'Published @qilitt-mickey/vue3-temp-skill to npmjs.org'"
41
32
  },
42
33
  "keywords": [
@@ -49,7 +40,8 @@
49
40
  "element-plus",
50
41
  "vant",
51
42
  "pinia",
52
- "vite"
43
+ "vite",
44
+ "visual-contract"
53
45
  ],
54
46
  "author": "qilitt",
55
47
  "license": "MIT",
@@ -0,0 +1,88 @@
1
+ ---
2
+ adapter: _new-adapter
3
+ description: 新增 Vue 组件库适配的书写模板。照此填写即可接入一个未内置的 Vue 组件库,不接触契约。
4
+ ---
5
+
6
+ # 新增 adapter · 书写模板
7
+
8
+ 项目用了本技能尚未覆盖的 **Vue 组件库**时,照此填写一份 adapter。**不改契约、不改核心编排、不改其他 adapter。**
9
+
10
+ ## 先确认三件事
11
+
12
+ | 问题 | 为什么重要 |
13
+ |---|---|
14
+ | 深度选择器用什么语法? | Vue 下都是 `:deep()`,但要写清是 SFC scoped 还是全局文件 |
15
+ | 组件库类名前缀是什么? | 决定 `inner[]` 的穿透目标怎么写 |
16
+ | 三份 CSS 放哪、怎么全局引入? | 决定样式接入方式 |
17
+
18
+ 答不出这三问,说明该组件库还没在项目里用起来——**先在项目里跑通再写 adapter**。
19
+
20
+ ## 填写模板
21
+
22
+ ```markdown
23
+ ---
24
+ adapter: <组件库标识>
25
+ description: <一句话说明>
26
+ ---
27
+
28
+ # adapter · Vue 3 + <组件库名称>
29
+
30
+ ## 深度选择器语法
31
+ | 场景 | 语法 |
32
+ |---|---|
33
+ | SFC `<style scoped>` | `:deep(.<前缀>-xxx)` |
34
+ | 全局样式文件 | `.<前缀>-xxx` 直接写 |
35
+
36
+ `ui-roles.css` 写成 <全局文件 / scoped>。
37
+
38
+ ## 内层穿透语法
39
+ | 角色 | 穿透目标 |
40
+ |---|---|
41
+ | table.headerCell | <选择器> |
42
+ | table.cell | <选择器> |
43
+
44
+ 规则:`host[]` 挂组件根元素;`inner[]` 定位内部文本盒。
45
+
46
+ ## 组件库前缀速查
47
+ | 组件 | 前缀 | 角色类挂载位置 |
48
+ |---|---|---|
49
+ | <组件> | .<前缀> | <位置> |
50
+
51
+ ## 提权通道(唯一允许处)
52
+ | 情况 | 处置 |
53
+ |---|---|
54
+ | 组件库行内 style 注入 | 该属性加 `!important`,仅此一处允许 |
55
+
56
+ ## 三份 CSS 的落点
57
+ | 文件 | 落点 | 引入时机 |
58
+ |---|---|---|
59
+ | src/styles/ui-tokens.css | <目录> | <时机> |
60
+ | src/styles/ui-roles.css | <目录> | <时机> |
61
+ | src/styles/ui-layout.css | <目录> | <时机> |
62
+
63
+ ## 布局占位容器
64
+ <如何让项目布局组件退化为插槽容器,给一段可粘贴的 Vue 模板>
65
+
66
+ ## 与内置 adapter 的差异
67
+ <哪些角色的 inner 落点不同,为什么>
68
+ ```
69
+
70
+ ## adapter 的边界
71
+
72
+ | 承载 | 禁止 |
73
+ |---|---|
74
+ | 深度选择器语法 | 定义设计意图 |
75
+ | 组件库穿透前缀 | 定义风格 |
76
+ | 提权通道的唯一出口 | 改写契约值 |
77
+ | 三份 CSS 的落点与引入 | 修改契约结构 |
78
+ | 布局占位挂载点 | 增加新字段 |
79
+
80
+ **判据**:写完 adapter 后,同一份契约应能不改一行内容地落到用该组件库的项目。若需要改契约,说明 adapter 越界了。
81
+
82
+ ## 登记
83
+
84
+ 写完在 `design-apply.md` 的 adapter 选择表加一行:
85
+
86
+ | 项目依赖 | adapter |
87
+ |---|---|
88
+ | `<组件库名>` | `adapters/<标识>.md` |