@teamix-evo/skills 0.3.0 → 0.5.0

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 (71) hide show
  1. package/README.md +7 -3
  2. package/manifest.json +63 -46
  3. package/package.json +3 -3
  4. package/src/teamix-evo-code-opentrek/SKILL.md +94 -0
  5. package/{skills/teamix-evo-coding-conventions → src/teamix-evo-code-opentrek}/api-layering.md +8 -5
  6. package/{skills/teamix-evo-coding-conventions → src/teamix-evo-code-opentrek}/checklist.md +4 -2
  7. package/{skills/teamix-evo-coding-conventions → src/teamix-evo-code-opentrek}/error-and-loading.md +38 -25
  8. package/src/teamix-evo-code-opentrek/file-structure.md +282 -0
  9. package/{skills/teamix-evo-coding-conventions → src/teamix-evo-code-opentrek}/forms-and-validation.md +14 -12
  10. package/{skills/teamix-evo-coding-conventions → src/teamix-evo-code-opentrek}/reuse-first.md +27 -17
  11. package/{skills/teamix-evo-coding-conventions → src/teamix-evo-code-opentrek}/routing-and-codesplit.md +23 -21
  12. package/{skills/teamix-evo-coding-conventions → src/teamix-evo-code-opentrek}/testing.md +32 -28
  13. package/src/teamix-evo-code-uni-manager/SKILL.md +97 -0
  14. package/src/teamix-evo-code-uni-manager/api-layering.md +372 -0
  15. package/src/teamix-evo-code-uni-manager/checklist.md +195 -0
  16. package/src/teamix-evo-code-uni-manager/error-and-loading.md +391 -0
  17. package/src/teamix-evo-code-uni-manager/file-structure.md +341 -0
  18. package/src/teamix-evo-code-uni-manager/forms-and-validation.md +461 -0
  19. package/src/teamix-evo-code-uni-manager/reuse-first.md +190 -0
  20. package/src/teamix-evo-code-uni-manager/routing-and-codesplit.md +452 -0
  21. package/src/teamix-evo-code-uni-manager/testing.md +398 -0
  22. package/src/teamix-evo-design-opentrek/SKILL.md +64 -0
  23. package/src/teamix-evo-design-opentrek/boundaries.md +533 -0
  24. package/src/teamix-evo-design-opentrek/brand.md +154 -0
  25. package/src/teamix-evo-design-opentrek/checklist.md +85 -0
  26. package/src/teamix-evo-design-opentrek/components.md +294 -0
  27. package/src/teamix-evo-design-opentrek/flows.md +51 -0
  28. package/src/teamix-evo-design-opentrek/foundations.md +274 -0
  29. package/src/teamix-evo-design-opentrek/generation-flow.md +243 -0
  30. package/src/teamix-evo-design-opentrek/patterns/color-mapping.md +96 -0
  31. package/src/teamix-evo-design-opentrek/patterns/dashboard.md +33 -0
  32. package/src/teamix-evo-design-opentrek/patterns/detail-page.md +203 -0
  33. package/src/teamix-evo-design-opentrek/patterns/form-page.md +292 -0
  34. package/src/teamix-evo-design-opentrek/patterns/list-page.md +367 -0
  35. package/src/teamix-evo-design-opentrek/patterns/page-types.md +159 -0
  36. package/src/teamix-evo-design-opentrek/patterns/sidebar.md +122 -0
  37. package/src/teamix-evo-design-opentrek/philosophy.md +98 -0
  38. package/src/teamix-evo-design-opentrek/rules/README.md +39 -0
  39. package/src/teamix-evo-design-opentrek/rules/boundaries.rules.json +391 -0
  40. package/src/teamix-evo-design-uni-manager/SKILL.md +64 -0
  41. package/src/teamix-evo-design-uni-manager/boundaries.md +567 -0
  42. package/src/teamix-evo-design-uni-manager/brand.md +202 -0
  43. package/src/teamix-evo-design-uni-manager/checklist.md +115 -0
  44. package/src/teamix-evo-design-uni-manager/components.md +257 -0
  45. package/src/teamix-evo-design-uni-manager/flows.md +63 -0
  46. package/src/teamix-evo-design-uni-manager/foundations.md +261 -0
  47. package/src/teamix-evo-design-uni-manager/generation-flow.md +230 -0
  48. package/src/teamix-evo-design-uni-manager/patterns/dashboard.md +97 -0
  49. package/src/teamix-evo-design-uni-manager/patterns/detail-page.md +253 -0
  50. package/src/teamix-evo-design-uni-manager/patterns/form-page.md +366 -0
  51. package/src/teamix-evo-design-uni-manager/patterns/list-page.md +389 -0
  52. package/src/teamix-evo-design-uni-manager/patterns/page-types.md +167 -0
  53. package/src/teamix-evo-design-uni-manager/philosophy.md +108 -0
  54. package/src/teamix-evo-design-uni-manager/rules/README.md +49 -0
  55. package/src/teamix-evo-design-uni-manager/rules/boundaries.rules.json +418 -0
  56. package/src/teamix-evo-manage/SKILL.md +289 -0
  57. package/skills/teamix-evo-coding-conventions/SKILL.md +0 -92
  58. package/skills/teamix-evo-coding-conventions/file-structure.md +0 -273
  59. package/skills/teamix-evo-design-rules/SKILL.md +0 -86
  60. package/skills/teamix-evo-design-rules/boundaries.md +0 -89
  61. package/skills/teamix-evo-design-rules/checklist.md +0 -108
  62. package/skills/teamix-evo-design-rules/generation-flow.md +0 -142
  63. package/skills/teamix-evo-design-rules/prompts/page-design.md +0 -148
  64. package/skills/teamix-evo-design-rules-opentrek/SKILL.md +0 -48
  65. package/skills/teamix-evo-design-rules-opentrek/brand-rules.md +0 -74
  66. package/skills/teamix-evo-design-rules-uni-manager/SKILL.md +0 -51
  67. package/skills/teamix-evo-design-rules-uni-manager/ai-scenarios.md +0 -51
  68. package/skills/teamix-evo-design-rules-uni-manager/command-center.md +0 -108
  69. package/skills/teamix-evo-design-rules-uni-manager/danger-ops.md +0 -87
  70. package/skills/teamix-evo-manage/SKILL.md +0 -178
  71. package/skills/teamix-evo-ui-upgrade/SKILL.md +0 -75
@@ -0,0 +1,49 @@
1
+ # rules/ — boundaries.md ↔ eslint-config 元数据桥(uni-manager)
2
+
3
+ 本目录是 **结构化元数据**,不是规则实现。它把:
4
+
5
+ 1. `boundaries.md` 中的 41 条人类可读硬约束(F/FF/S/C/I 五组共 38 条 + uni-manager 专属 UM1/UM2/UM3 三条)
6
+ 2. `packages/eslint-config/src/rules/` 中的 9 条已实现 lint 规则
7
+ 3. AI 在生成代码时可读的 JSON 索引
8
+
9
+ 用一张表对齐起来,防止三者飘移。
10
+
11
+ ## boundaries.rules.json
12
+
13
+ 每条规则包含:
14
+
15
+ | 字段 | 说明 |
16
+ | ---------------- | -------------------------------------------------------------------------------- |
17
+ | `id` | 在 boundaries.md 中的编号(F1-F10 / FF1-FF4 / S1-S8 / C1-C12 / I1-I4 / UM1-UM3) |
18
+ | `group` | `forbidden` / `form` / `style` / `component` / `icon` / `uni-manager` |
19
+ | `rule` | 一句话规则陈述(与 boundaries.md 章节标题保持一致) |
20
+ | `severity` | `ERROR` 必须修复 / `WARN` 建议修复 |
21
+ | `scope` | `global` 或具体组件名(如 `Dialog`、`Button`、`um-topbar`) |
22
+ | `lintRule` | 对应的 eslint 规则名(`teamix-evo/<name>`);`null` 表示无 lint 覆盖,靠人工评审 |
23
+ | `boundaryAnchor` | 指向 boundaries.md 章节锚点;validate-skills 会校验存在性 |
24
+ | `status` | `active` / `deprecated` |
25
+
26
+ ## 双向校验(由 `pnpm validate` 触发)
27
+
28
+ `scripts/validate-skills.ts` 在校验 manifest 之后会额外检查:
29
+
30
+ 1. **JSON schema 合法** — 每条 rule 满足上表必填字段
31
+ 2. **boundaryAnchor 存在性** — 每条 rule 的 `boundaryAnchor` 必须能在 `boundaries.md` 中 grep 到对应的章节
32
+ 3. **eslint 双向对齐** — `packages/eslint-config/src/rules/` 中每条已实现的 rule 必须在本 JSON 中有 `lintRule: "teamix-evo/<name>"` 的条目;反过来,JSON 中每条 `lintRule != null` 的条目必须能在 eslint-config 中找到对应文件
33
+
34
+ ## 新增 boundary 规则的工序
35
+
36
+ 1. 在 `boundaries.md` 中加章节(`[ERROR]` / `[WARN]` 前缀 + 编号)
37
+ 2. 在 `boundaries.rules.json` 加对应条目
38
+ 3. 如需 lint 自动化:在 `packages/eslint-config/src/rules/` 加 ts 实现;`lintRule` 填规则名
39
+ 4. 跑 `pnpm --filter @teamix-evo/skills validate` 通过
40
+
41
+ ## uni-manager 专属约束(UM 组)
42
+
43
+ UM1 / UM2 / UM3 是 uni-manager **独有的硬约束**,对应"一致性三件套":
44
+
45
+ - **UM1** — 全局 topbar 必须使用 `um-topbar` 实物,禁止自建
46
+ - **UM2** — PageHeader 必须保持一致性结构(标题 24px / 面包屑紧贴 / 操作右对齐)
47
+ - **UM3** — 跨云资源列表与详情必须标注 CloudBadge
48
+
49
+ 它们通过 `scope: "uni-manager"` 与基础 38 条解耦,复制到 OpenTrek 时自动失效。
@@ -0,0 +1,418 @@
1
+ {
2
+ "$schema": "./rules.schema.json",
3
+ "version": "1.0.0",
4
+ "source": "boundaries.md",
5
+ "variant": "uni-manager",
6
+ "rules": [
7
+ {
8
+ "id": "F1",
9
+ "group": "forbidden",
10
+ "rule": "禁止硬编码色值",
11
+ "severity": "ERROR",
12
+ "scope": "global",
13
+ "lintRule": "teamix-evo/no-color-literal",
14
+ "boundaryAnchor": "boundaries.md#error-f1--禁止硬编码色值",
15
+ "status": "active"
16
+ },
17
+ {
18
+ "id": "F2",
19
+ "group": "forbidden",
20
+ "rule": "禁止硬编码尺寸",
21
+ "severity": "ERROR",
22
+ "scope": "global",
23
+ "lintRule": "teamix-evo/no-arbitrary-tw-value",
24
+ "boundaryAnchor": "boundaries.md#error-f2--禁止硬编码尺寸",
25
+ "status": "active"
26
+ },
27
+ {
28
+ "id": "F3",
29
+ "group": "forbidden",
30
+ "rule": "禁止按组件新增重复语义变量",
31
+ "severity": "ERROR",
32
+ "scope": "global",
33
+ "lintRule": null,
34
+ "boundaryAnchor": "boundaries.md#error-f3--禁止按组件新增重复语义变量",
35
+ "status": "active"
36
+ },
37
+ {
38
+ "id": "F4",
39
+ "group": "forbidden",
40
+ "rule": "禁止页头添加底色或下边框",
41
+ "severity": "ERROR",
42
+ "scope": "PageHeader",
43
+ "lintRule": null,
44
+ "boundaryAnchor": "boundaries.md#error-f4--禁止页头添加底色或下边框--scope-pageheader",
45
+ "status": "active"
46
+ },
47
+ {
48
+ "id": "F5",
49
+ "group": "forbidden",
50
+ "rule": "outline 按钮禁止使用 border-input",
51
+ "severity": "ERROR",
52
+ "scope": "Button",
53
+ "lintRule": null,
54
+ "boundaryAnchor": "boundaries.md#error-f5--outline-按钮禁止使用-border-input--scope-button",
55
+ "status": "active"
56
+ },
57
+ {
58
+ "id": "F6",
59
+ "group": "forbidden",
60
+ "rule": "禁止直接写 font-size: 12px",
61
+ "severity": "ERROR",
62
+ "scope": "global",
63
+ "lintRule": "teamix-evo/no-arbitrary-tw-value",
64
+ "boundaryAnchor": "boundaries.md#error-f6--禁止直接写-font-size-12px",
65
+ "status": "active"
66
+ },
67
+ {
68
+ "id": "F7",
69
+ "group": "forbidden",
70
+ "rule": "语义间距必须走 CSS 变量",
71
+ "severity": "ERROR",
72
+ "scope": "global",
73
+ "lintRule": "teamix-evo/no-arbitrary-tw-value",
74
+ "boundaryAnchor": "boundaries.md#error-f7--语义间距必须走-css-变量",
75
+ "status": "active"
76
+ },
77
+ {
78
+ "id": "F8",
79
+ "group": "forbidden",
80
+ "rule": "禁止在 DialogTitle 中加图标",
81
+ "severity": "ERROR",
82
+ "scope": "Dialog",
83
+ "lintRule": null,
84
+ "boundaryAnchor": "boundaries.md#error-f8--禁止在-dialogtitle-中加图标--scope-dialog",
85
+ "status": "active"
86
+ },
87
+ {
88
+ "id": "F9",
89
+ "group": "forbidden",
90
+ "rule": "弹窗确定按钮禁止加 disabled 禁用态",
91
+ "severity": "ERROR",
92
+ "scope": "Dialog",
93
+ "lintRule": null,
94
+ "boundaryAnchor": "boundaries.md#error-f9--弹窗确定按钮禁止加-disabled-禁用态--scope-dialog",
95
+ "status": "active"
96
+ },
97
+ {
98
+ "id": "F10",
99
+ "group": "forbidden",
100
+ "rule": "hover 时禁止将 boxShadow 设为 undefined",
101
+ "severity": "WARN",
102
+ "scope": "HoverCard",
103
+ "lintRule": null,
104
+ "boundaryAnchor": "boundaries.md#warn-f10--hover-时禁止将-boxshadow-设为-undefined--scope-hovercard",
105
+ "status": "active"
106
+ },
107
+ {
108
+ "id": "FF1",
109
+ "group": "form",
110
+ "rule": "禁止用色块表达表单状态",
111
+ "severity": "ERROR",
112
+ "scope": "Form",
113
+ "lintRule": "teamix-evo/no-raw-color-scale",
114
+ "boundaryAnchor": "boundaries.md#error-ff1--禁止用色块表达表单状态--scope-form",
115
+ "status": "active"
116
+ },
117
+ {
118
+ "id": "FF2",
119
+ "group": "form",
120
+ "rule": "Card 不嵌套 Card",
121
+ "severity": "WARN",
122
+ "scope": "Form",
123
+ "lintRule": null,
124
+ "boundaryAnchor": "boundaries.md#warn-ff2--card-不嵌套-card--scope-form",
125
+ "status": "active"
126
+ },
127
+ {
128
+ "id": "FF3",
129
+ "group": "form",
130
+ "rule": "错误信息禁止暴露技术栈痕迹",
131
+ "severity": "ERROR",
132
+ "scope": "Form",
133
+ "lintRule": null,
134
+ "boundaryAnchor": "boundaries.md#error-ff3--错误信息禁止暴露技术栈痕迹--scope-form",
135
+ "status": "active"
136
+ },
137
+ {
138
+ "id": "FF4",
139
+ "group": "form",
140
+ "rule": "必填用红色 * 星号,放标签后空格",
141
+ "severity": "WARN",
142
+ "scope": "Form",
143
+ "lintRule": null,
144
+ "boundaryAnchor": "boundaries.md#warn-ff4--必填用红色--星号放标签后空格--scope-form",
145
+ "status": "active"
146
+ },
147
+ {
148
+ "id": "S1",
149
+ "group": "style",
150
+ "rule": "className 仅用于布局,不用于覆盖组件颜色/字体",
151
+ "severity": "ERROR",
152
+ "scope": "global",
153
+ "lintRule": "teamix-evo/no-color-literal",
154
+ "boundaryAnchor": "boundaries.md#error-s1--classname-仅用于布局不用于覆盖组件颜色--字体",
155
+ "status": "active"
156
+ },
157
+ {
158
+ "id": "S2",
159
+ "group": "style",
160
+ "rule": "不用 space-x-* / space-y-*,改用 flex + gap-*",
161
+ "severity": "ERROR",
162
+ "scope": "global",
163
+ "lintRule": "teamix-evo/prefer-gap-over-space",
164
+ "boundaryAnchor": "boundaries.md#error-s2--不用-space-x---space-y--改用-flex--gap-",
165
+ "status": "active"
166
+ },
167
+ {
168
+ "id": "S3",
169
+ "group": "style",
170
+ "rule": "等宽高用 size-*,不用 w-* h-*",
171
+ "severity": "WARN",
172
+ "scope": "global",
173
+ "lintRule": null,
174
+ "boundaryAnchor": "boundaries.md#warn-s3--等宽高用-size-不用-w--h-",
175
+ "status": "active"
176
+ },
177
+ {
178
+ "id": "S4",
179
+ "group": "style",
180
+ "rule": "用 truncate 简写文本截断",
181
+ "severity": "WARN",
182
+ "scope": "global",
183
+ "lintRule": null,
184
+ "boundaryAnchor": "boundaries.md#warn-s4--用-truncate-简写文本截断",
185
+ "status": "active"
186
+ },
187
+ {
188
+ "id": "S5",
189
+ "group": "style",
190
+ "rule": "不用手动 dark: 颜色覆盖,用语义 token",
191
+ "severity": "ERROR",
192
+ "scope": "global",
193
+ "lintRule": "teamix-evo/no-manual-dark-classnames",
194
+ "boundaryAnchor": "boundaries.md#error-s5--不用手动-dark-颜色覆盖用语义-token",
195
+ "status": "active"
196
+ },
197
+ {
198
+ "id": "S6",
199
+ "group": "style",
200
+ "rule": "用 cn() 处理条件类名,不用模板字符串三元",
201
+ "severity": "ERROR",
202
+ "scope": "global",
203
+ "lintRule": null,
204
+ "boundaryAnchor": "boundaries.md#error-s6--用-cn-处理条件类名不用模板字符串三元",
205
+ "status": "active"
206
+ },
207
+ {
208
+ "id": "S7",
209
+ "group": "style",
210
+ "rule": "overlay 组件不手动设置 z-index",
211
+ "severity": "ERROR",
212
+ "scope": "global",
213
+ "lintRule": null,
214
+ "boundaryAnchor": "boundaries.md#error-s7--overlay-组件不手动设置-z-index",
215
+ "status": "active"
216
+ },
217
+ {
218
+ "id": "S8",
219
+ "group": "style",
220
+ "rule": "不用原始色值表示状态",
221
+ "severity": "ERROR",
222
+ "scope": "global",
223
+ "lintRule": "teamix-evo/no-raw-color-scale",
224
+ "boundaryAnchor": "boundaries.md#error-s8--不用原始色值表示状态",
225
+ "status": "active"
226
+ },
227
+ {
228
+ "id": "C1",
229
+ "group": "component",
230
+ "rule": "Item 必须在 Group 内",
231
+ "severity": "ERROR",
232
+ "scope": "Select|DropdownMenu|Command|Menubar|ContextMenu",
233
+ "lintRule": null,
234
+ "boundaryAnchor": "boundaries.md#error-c1--item-必须在-group-内",
235
+ "status": "active"
236
+ },
237
+ {
238
+ "id": "C2",
239
+ "group": "component",
240
+ "rule": "Dialog / Sheet / Drawer 必须有 Title",
241
+ "severity": "ERROR",
242
+ "scope": "Dialog|Sheet|Drawer",
243
+ "lintRule": "teamix-evo/dialog-must-have-title",
244
+ "boundaryAnchor": "boundaries.md#error-c2--dialog--sheet--drawer-必须有-title",
245
+ "status": "active"
246
+ },
247
+ {
248
+ "id": "C3",
249
+ "group": "component",
250
+ "rule": "Card 用完整结构",
251
+ "severity": "WARN",
252
+ "scope": "Card",
253
+ "lintRule": null,
254
+ "boundaryAnchor": "boundaries.md#warn-c3--card-用完整结构",
255
+ "status": "active"
256
+ },
257
+ {
258
+ "id": "C4",
259
+ "group": "component",
260
+ "rule": "Button 用 Spinner + disabled 组合表达 loading",
261
+ "severity": "ERROR",
262
+ "scope": "Button",
263
+ "lintRule": null,
264
+ "boundaryAnchor": "boundaries.md#error-c4--button-用-spinner--disabled-组合表达-loading",
265
+ "status": "active"
266
+ },
267
+ {
268
+ "id": "C5",
269
+ "group": "component",
270
+ "rule": "TabsTrigger 必须在 TabsList 内",
271
+ "severity": "ERROR",
272
+ "scope": "Tabs",
273
+ "lintRule": null,
274
+ "boundaryAnchor": "boundaries.md#error-c5--tabstrigger-必须在-tabslist-内",
275
+ "status": "active"
276
+ },
277
+ {
278
+ "id": "C6",
279
+ "group": "component",
280
+ "rule": "Avatar 必须有 AvatarFallback",
281
+ "severity": "WARN",
282
+ "scope": "Avatar",
283
+ "lintRule": null,
284
+ "boundaryAnchor": "boundaries.md#warn-c6--avatar-必须有-avatarfallback",
285
+ "status": "active"
286
+ },
287
+ {
288
+ "id": "C7",
289
+ "group": "component",
290
+ "rule": "提示用 Alert,不用自定义 div",
291
+ "severity": "WARN",
292
+ "scope": "global",
293
+ "lintRule": "teamix-evo/no-raw-color-scale",
294
+ "boundaryAnchor": "boundaries.md#warn-c7--提示用-alert不用自定义-div",
295
+ "status": "active"
296
+ },
297
+ {
298
+ "id": "C8",
299
+ "group": "component",
300
+ "rule": "空状态用 Empty 组件",
301
+ "severity": "WARN",
302
+ "scope": "global",
303
+ "lintRule": null,
304
+ "boundaryAnchor": "boundaries.md#warn-c8--空状态用-empty-组件",
305
+ "status": "active"
306
+ },
307
+ {
308
+ "id": "C9",
309
+ "group": "component",
310
+ "rule": "Toast 用 sonner",
311
+ "severity": "WARN",
312
+ "scope": "global",
313
+ "lintRule": null,
314
+ "boundaryAnchor": "boundaries.md#warn-c9--toast-用-sonner",
315
+ "status": "active"
316
+ },
317
+ {
318
+ "id": "C10",
319
+ "group": "component",
320
+ "rule": "分隔线用 Separator",
321
+ "severity": "WARN",
322
+ "scope": "global",
323
+ "lintRule": null,
324
+ "boundaryAnchor": "boundaries.md#warn-c10--分隔线用-separator",
325
+ "status": "active"
326
+ },
327
+ {
328
+ "id": "C11",
329
+ "group": "component",
330
+ "rule": "加载占位用 Skeleton",
331
+ "severity": "WARN",
332
+ "scope": "global",
333
+ "lintRule": "teamix-evo/no-raw-color-scale",
334
+ "boundaryAnchor": "boundaries.md#warn-c11--加载占位用-skeleton",
335
+ "status": "active"
336
+ },
337
+ {
338
+ "id": "C12",
339
+ "group": "component",
340
+ "rule": "标签/状态用 Badge",
341
+ "severity": "WARN",
342
+ "scope": "global",
343
+ "lintRule": "teamix-evo/no-raw-color-scale",
344
+ "boundaryAnchor": "boundaries.md#warn-c12--标签--状态用-badge",
345
+ "status": "active"
346
+ },
347
+ {
348
+ "id": "I1",
349
+ "group": "icon",
350
+ "rule": "按钮内图标用 data-icon 属性定位",
351
+ "severity": "ERROR",
352
+ "scope": "Button",
353
+ "lintRule": null,
354
+ "boundaryAnchor": "boundaries.md#error-i1--按钮内图标用-data-icon-属性定位",
355
+ "status": "active"
356
+ },
357
+ {
358
+ "id": "I2",
359
+ "group": "icon",
360
+ "rule": "组件内图标不设尺寸类",
361
+ "severity": "ERROR",
362
+ "scope": "Button|DropdownMenuItem|Alert|Sidebar",
363
+ "lintRule": null,
364
+ "boundaryAnchor": "boundaries.md#error-i2--组件内图标不设尺寸类",
365
+ "status": "active"
366
+ },
367
+ {
368
+ "id": "I3",
369
+ "group": "icon",
370
+ "rule": "图标作为组件对象传递",
371
+ "severity": "ERROR",
372
+ "scope": "global",
373
+ "lintRule": null,
374
+ "boundaryAnchor": "boundaries.md#error-i3--图标作为组件对象传递",
375
+ "status": "active"
376
+ },
377
+ {
378
+ "id": "I4",
379
+ "group": "icon",
380
+ "rule": "按项目配置的 iconLibrary 导入",
381
+ "severity": "ERROR",
382
+ "scope": "global",
383
+ "lintRule": "teamix-evo/icon-from-lucide",
384
+ "boundaryAnchor": "boundaries.md#error-i4--按项目配置的-iconlibrary-导入",
385
+ "status": "active"
386
+ },
387
+ {
388
+ "id": "UM1",
389
+ "group": "component",
390
+ "rule": "全局 topbar 必须使用 um-topbar 实物",
391
+ "severity": "ERROR",
392
+ "scope": "uni-manager",
393
+ "lintRule": null,
394
+ "boundaryAnchor": "boundaries.md#error-um1--全局-topbar-必须使用-um-topbar-实物--scope-uni-manager",
395
+ "status": "active"
396
+ },
397
+ {
398
+ "id": "UM2",
399
+ "group": "component",
400
+ "rule": "PageHeader 必须保持一致性结构",
401
+ "severity": "ERROR",
402
+ "scope": "uni-manager",
403
+ "lintRule": null,
404
+ "boundaryAnchor": "boundaries.md#error-um2--pageheader-必须保持一致性结构--scope-uni-manager",
405
+ "status": "active"
406
+ },
407
+ {
408
+ "id": "UM3",
409
+ "group": "component",
410
+ "rule": "跨云资源列表与详情必须标注 CloudBadge",
411
+ "severity": "ERROR",
412
+ "scope": "uni-manager",
413
+ "lintRule": null,
414
+ "boundaryAnchor": "boundaries.md#error-um3--跨云资源列表与详情必须标注-cloudbadge--scope-uni-manager",
415
+ "status": "active"
416
+ }
417
+ ]
418
+ }