figma-cache-toolchain 2.0.2 → 2.0.3

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.
package/README.md CHANGED
@@ -32,9 +32,9 @@ npx figma-cache cursor init
32
32
 
33
33
  该命令会:
34
34
 
35
- - 默认覆盖写入最新 `.cursor/rules/`、`.cursor/skills/` 模板
35
+ - 默认安全模式:保留已有 `.cursor/rules/`、`.cursor/skills/`,仅补缺失文件
36
36
  - 新增通用规则:`.cursor/rules/00-output-token-budget.mdc`(全任务低 token 输出基线)
37
- - 若需保留已存在模板,可使用 `npx figma-cache cursor init --force`(跳过同名覆盖)
37
+ - 若需覆盖现有模板,可使用 `npx figma-cache cursor init --overwrite`
38
38
  - 确保根目录存在 `figma-cache.config.js`
39
39
  - 刷新根目录 `AGENT-SETUP-PROMPT.md`
40
40
  - 同步刷新 `figma-cache/docs/colleague-guide-zh.md`
@@ -1,70 +1,43 @@
1
- # Figma Cache:请 Agent 一次性完成项目适配
2
-
3
- > **给 Cursor Agent 的指令**:你正在操作的是**用户业务项目**的根目录。以下文件应已存在(由 `npx figma-cache cursor init` 从 npm 包 **`{{NPM_PACKAGE_NAME}}`** 复制到当前仓库根):
4
- > - `.cursor/rules/01-figma-cache-core.mdc`
5
- > - `.cursor/rules/00-output-token-budget.mdc`(通用低 token 输出基线)
6
- > - `.cursor/rules/04-ui-baseline-governance.mdc`(UI 全局基线治理:新项目/老项目双轨 + 生成约束)
7
- > - `.cursor/rules/02-figma-stack-adapter.mdc`(**占位**,任务完成后需删除)
8
- > - `.cursor/rules/figma-local-cache-first.mdc`(可选保留)
9
- > - `.cursor/skills/figma-mcp-local-cache/SKILL.md`
10
- > - `.cursor/skills/ui-baseline-governance/SKILL.md`(执行清单:基线判定与落地步骤)
11
- > - `.cursor/skills/figma-ui-dual-mode-execution/SKILL.md`(仅给 nodeId/链接即可触发端到端 UI 实现)
12
- > - `figma-cache.config.js`(示例 `postEnsure`:目录级 adapter hint + 可选 `docs/figma-flow-readme.md`)
13
- > - (兼容旧项目)`figma-cache.config.example.js` 可能存在;仅当内容被用户自定义且无法安全迁移时保留
14
-
15
- ## 你必须完成的任务(按顺序执行,尽量少问用户)
16
-
17
- 1. **读取工程事实**
18
- 阅读 `package.json` 及存在的构建配置(如 `vite.config.*`、`vue.config.js`、`next.config.*`、`tsconfig.json` 等),**自行推断** UI 技术栈(框架、组件库、样式方案、状态管理若有则记录)。仅在关键信息完全无法从仓库推断时,再向用户提一个极简问题。
19
-
20
- 2. **检查并合并 `figma-cache.config.js`**
21
- - 若根目录**不存在** `figma-cache.config.js`:基于当前文件创建完整配置,并实现与栈匹配的 `hooks.postEnsure`。
22
- - 若**已存在** `figma-cache.config.js`:**合并**而非盲目覆盖——保留用户已有非 figma-cache 字段,仅补充或调整 `hooks.postEnsure` 及与 figma-cache 相关的导出;冲突时以「不破坏用户现有逻辑」优先并注释说明。
23
- - 默认建议:`FIGMA_CACHE_ADAPTER_DOC_MODE=cache-root`(目录级单文件,减少重复);仅在团队明确需要节点文档时改为 `node`。
24
-
25
- 3. **清理 legacy example(若安全)**
26
- 若根目录存在 `figma-cache.config.example.js` 且其内容与 `figma-cache.config.js` 等价(或为未改动模板),请删除该 example 文件,避免后续协作混淆。
27
-
28
- 4. **生成栈专属 Adapter 规则**
29
- 新建 **`.cursor/rules/02-figma-<栈简名>-adapter.mdc`**(`alwaysApply: false`)。内容须与 **`01-figma-cache-core.mdc`** 边界一致:只约束「在通用缓存可读之后如何写业务 UI」;**禁止**要求在 `meta.json` / `raw.json` / `spec.md` 中写入框架专有实现。
30
-
31
- 5. **删除占位规则**
32
- 确认第 4 步文件已写入且无语法问题后,**删除** `.cursor/rules/02-figma-stack-adapter.mdc`。若用户在 Cursor 设置里固定引用了该文件名,请在汇报中提示用户改为引用新的 `02-figma-<栈>-adapter.mdc`。
33
-
34
- 6. **补全 npm scripts(若缺失)**
35
- 若 `package.json` 中没有任何 `figma:cache:*` 脚本,请追加一组,命令使用 **`npx figma-cache`** 或 **`figma-cache`**(与项目是否已安装本包、以及 `node_modules/.bin` 是否可用一致即可,优先 `npx figma-cache` 以减少环境差异)。至少包含:`init`、`config`、`validate`、`ensure`、`get`(名称与 `figma-cache --help` 或包内 **`figma-cache/docs/README.md`** 中 scripts 示例一致即可)。
36
-
37
- 7. **收尾**
38
- - 用简短列表向用户汇报:新建/修改/删除了哪些路径。
39
- - 若项目根**尚无** `figma-cache/index.json`,提示用户执行:`npm run figma:cache:init`(若已加 script)或 `npx figma-cache init`(与 `cursor init` 不同,用于创建空索引与缓存目录)。
40
- - 提示用户在本项目根执行:`npm run figma:cache:validate`(若已加 script)或 `npx figma-cache validate`。
41
- - 说明:后续 Figma 相关对话将主要由 **01 Core + 新 Adapter + figma-mcp-local-cache Skill** 驱动;涉及全局样式与组件生成稳定性时叠加 **04-ui-baseline-governance + ui-baseline-governance Skill**。
42
- - **可选**:若项目已通过 `cursor init` 同步 `figma-cache/docs/colleague-guide-zh.md`,提示团队默认只使用 **§5.1「最推荐主提示词」**,只有特殊诉求再追加 **§5.2** 的一句附加要求。
43
-
44
- 8. **UI 全局基线治理(强烈推荐,与 UI 实现任务绑定)**
45
- - 确认 `.cursor/rules/04-ui-baseline-governance.mdc` 与 `.cursor/skills/ui-baseline-governance/SKILL.md` 已存在于项目根(随 `cursor init` 同步);若缺失,从 npm 包内 **`cursor-bootstrap/rules/`** 与 **`cursor-bootstrap/skills/`** 补拷到当前仓库 `.cursor/`,并提示团队升级 **`{{NPM_PACKAGE_NAME}}`** 版本以便后续 init 自带。
46
- - 读取 **`04-ui-baseline-governance.mdc` §1.0**:按机械启发式判定「新项目 / 老项目」,在汇报中写明**结论 + 命中证据**(文件路径、计数、依赖名)。
47
- - 按判定结果执行:新项目可规划一次性全局基线;老项目仅允许分层/分批/可回滚方案,禁止首轮全量全局 reset 叠加大规模业务重构。
48
- - 在 Cursor 中建议团队对「写业务 UI / 调全局样式」类任务 **@** 引用:`04-ui-baseline-governance.mdc` 或 `ui-baseline-governance` Skill,以统一生成行为(`border-box` 假设、flex 溢出、弹层锚定、图标策略等)。
49
- - 降噪策略:默认使用短流程;仅在老项目、高风险任务或冲突场景升级严格流程。`ui-1to1-preflight.template.md` 仅在严格流程下强制填写,短流程可只输出精简事实清单。
50
-
51
- ## 输出与 token 约束(强制)
52
- - 默认“只要结果”:不输出思考过程,不粘贴 MCP 长回包。
53
- - 执行 Figma MCP 后,用户可见回复只保留:缓存状态、调用次数、产物路径、校验结论、失败修复动作。
54
- - 除非用户明确要求,禁止在 chat 中贴出 `get_design_context` 全文;原始内容仅保存到 `mcp-raw/*`。
55
-
56
- ## 硬约束(违反则视为未完成)
57
-
58
- - **不要**修改 `node_modules/{{NPM_PACKAGE_NAME}}/` 下已发布包内文件(应无此必要)。
59
- - **不要**修改 `figma-cache/figma-cache.js` 或破坏 Core「框架中立」语义。
60
- - **不要**把业务路由名、具体组件库 API 写进 `figma-cache/files/**` 下的 `meta.json` / `raw.json` / `spec.md`。
61
-
62
- ## 可选参考(仅在用户需要 Vue2+Vuetify2 时)
63
-
64
- 包内附带参考文本(**不在 init 时复制到 .cursor**):
65
- `node_modules/{{NPM_PACKAGE_NAME}}/cursor-bootstrap/examples/vue2-vuetify2-adapter.reference.mdc`
66
- 若用户明确要求该栈,可读入后改写为第 4 步的 Adapter 规则内容。
67
-
68
- ---
69
-
70
- **开始执行:**读完本文件后立刻按上述顺序操作仓库文件,直至全部完成。
1
+ # Figma Cache:请 Agent 一次性完成项目适配(精简)
2
+
3
+ > 前提:你在用户业务项目根目录;以下模板来自 `{{NPM_PACKAGE_NAME}}`。
4
+
5
+ ## 必做(按序)
6
+ 1. 读取项目栈事实(package.json + 构建配置)。
7
+ 2. 合并/创建 `figma-cache.config.js`(不破坏用户已有逻辑)。
8
+ 3. 生成 `.cursor/rules/02-figma-<stack>-adapter.mdc`。
9
+ 4. 验证新 adapter 可用(语法 + 最小执行验证)。
10
+ 5. 补全 `figma:cache:*` scripts(缺失时)。
11
+
12
+ ## 老项目 UI 基线(默认 B0)
13
+ 1. 复制模板:
14
+ `node_modules/{{NPM_PACKAGE_NAME}}/cursor-bootstrap/examples/generated-ui-reset.css.template`
15
+ -> 项目 `src/styles/generated-ui-reset.css`
16
+ 2. 在入口(如 `src/main.ts`)单次引入。
17
+ 3. 后续生成组件根节点统一加:`generate-ui-reset`。
18
+ 4. 若用户要求更强控制,再升级 B1/B2。
19
+
20
+ ## 生成完成后清理临时模板文件(强制)
21
+ - 删除 `.cursor/rules/02-figma-stack-adapter.mdc`
22
+ - 删除 `AGENT-SETUP-PROMPT.md`
23
+
24
+ ## 规则优先级
25
+ - 缓存层:`01-figma-cache-core.mdc`
26
+ - UI 实现:`03-figma-ui-implementation-hard-constraints.mdc`
27
+ - 基线治理:`04-ui-baseline-governance.mdc`
28
+ - 输出约束:`00-output-token-budget.mdc`
29
+
30
+ ## UI 标签口径
31
+ - 默认优先 `div/span/img`
32
+ - 默认禁用 `p/ul/li/ol/h1-h6`(除非用户明确要求)
33
+ - `input/select/textarea/a` 可直接使用
34
+ - 原生 `button` 默认禁用(封装或 UI 库按钮除外)
35
+ - `role/aria-*` 默认不强制
36
+ - `data-node-id/data-name` 默认不输出(调试模式除外)
37
+
38
+ ## 输出约束
39
+ - 结果优先,不贴 MCP 长原文。
40
+ - 仅输出:结论、关键改动、验证结果、下一步。
41
+
42
+ ---
43
+ 开始执行:直接落文件并完成验证。
@@ -1,11 +1,15 @@
1
- # 栈相关参考(不随 `cursor init` 复制)
1
+ # 栈相关参考(不随 `cursor init` 复制)
2
2
 
3
- 本目录存放 **可选** 的完整 Adapter 示例,供人工或 Agent 对照;**通用默认**请使用 `cursor init` 生成的 `02-figma-stack-adapter.mdc` 与根目录 `figma-cache.config.js`。
3
+ 本目录存放可选参考与模板文件:
4
4
 
5
5
  | 文件 | 说明 |
6
- |------|------|
7
- | `vue2-vuetify2-adapter.reference.mdc` | 历史 Vue 2 + Vuetify 2 表现层规则全文,可复制为 `.cursor/rules/02-figma-vuetify2-adapter.mdc` 并按项目改名 |
8
-
9
- 将参考规则复制进 `.cursor/rules/` 后,建议同步 `figma-cache.config.js` 的 adapter 提示策略:默认使用 `FIGMA_CACHE_ADAPTER_DOC_MODE=cache-root`(目录级单文件),仅在明确需要节点文档时改为 `node`。
6
+ |---|---|
7
+ | `vue2-vuetify2-adapter.reference.mdc` | 历史 Vue2 + Vuetify2 参考规则 |
8
+ | `generated-ui-reset.css.template` | 老项目 B0 局部 reset 模板(推荐默认) |
10
9
 
10
+ ## B0 推荐用法(目标业务项目)
11
+ 1. 复制模板到项目:`src/styles/generated-ui-reset.css`
12
+ 2. 在入口(如 `src/main.ts`)引入一次
13
+ 3. 生成组件根节点加 `generate-ui-reset`
11
14
 
15
+ 说明:B0 仅做局部基线,不污染全局;B1/B2 见 `04-ui-baseline-governance.mdc`。
@@ -0,0 +1,32 @@
1
+ /* Generated UI local reset (scoped) */
2
+
3
+ :where(.generate-ui-reset),
4
+ :where(.generate-ui-reset *) {
5
+ box-sizing: border-box;
6
+ }
7
+
8
+ :where(.generate-ui-reset img),
9
+ :where(.generate-ui-reset svg),
10
+ :where(.generate-ui-reset video),
11
+ :where(.generate-ui-reset canvas) {
12
+ display: block;
13
+ max-width: 100%;
14
+ }
15
+
16
+ :where(.generate-ui-reset input),
17
+ :where(.generate-ui-reset select),
18
+ :where(.generate-ui-reset textarea),
19
+ :where(.generate-ui-reset button),
20
+ :where(.generate-ui-reset a) {
21
+ font: inherit;
22
+ color: inherit;
23
+ letter-spacing: inherit;
24
+ }
25
+
26
+ /* Optional strict mode for high-fidelity pages only */
27
+ :where(.generate-ui-reset--strict input),
28
+ :where(.generate-ui-reset--strict select),
29
+ :where(.generate-ui-reset--strict textarea) {
30
+ margin: 0;
31
+ border-radius: 0;
32
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "managedFiles": [
3
+ {
4
+ "from": "rules/00-output-token-budget.mdc",
5
+ "to": ".cursor/rules/00-output-token-budget.mdc"
6
+ },
7
+ {
8
+ "from": "rules/01-figma-cache-core.mdc",
9
+ "to": ".cursor/rules/01-figma-cache-core.mdc"
10
+ },
11
+ {
12
+ "from": "rules/02-figma-stack-adapter.mdc",
13
+ "to": ".cursor/rules/02-figma-stack-adapter.mdc"
14
+ },
15
+ {
16
+ "from": "rules/03-figma-ui-implementation-hard-constraints.mdc",
17
+ "to": ".cursor/rules/03-figma-ui-implementation-hard-constraints.mdc"
18
+ },
19
+ {
20
+ "from": "rules/04-ui-baseline-governance.mdc",
21
+ "to": ".cursor/rules/04-ui-baseline-governance.mdc"
22
+ },
23
+ {
24
+ "from": "rules/figma-local-cache-first.mdc",
25
+ "to": ".cursor/rules/figma-local-cache-first.mdc"
26
+ },
27
+ {
28
+ "from": "skills/figma-mcp-local-cache/SKILL.md",
29
+ "to": ".cursor/skills/figma-mcp-local-cache/SKILL.md"
30
+ },
31
+ {
32
+ "from": "skills/figma-ui-dual-mode-execution/SKILL.md",
33
+ "to": ".cursor/skills/figma-ui-dual-mode-execution/SKILL.md"
34
+ }
35
+ ],
36
+ "retiredFiles": [
37
+ ".cursor/skills/ui-baseline-governance/SKILL.md",
38
+ ".cursor/rules/04-command-execution-anti-regression.mdc",
39
+ ".cursor/rules/commit-conventions.mdc"
40
+ ]
41
+ }
@@ -1,32 +1,22 @@
1
- ---
2
- description: 栈占位:由 Agent 按项目 UI 技术栈生成 02-figma-<stack>-adapter.mdc 后再实现业务 UI(本文件可删除或 alwaysApply 保持 false)
1
+ ---
2
+ description: 栈占位模板(仅生成期使用):生成完成后删除本文件与 AGENT-SETUP-PROMPT.md
3
3
  alwaysApply: false
4
4
  ---
5
5
 
6
- # Figma UI Stack Adapter(占位)
7
-
8
- 本文件是 **通用脚手架**,不绑定 Vue / React / 任何组件库。若你已有具体栈的 Adapter 规则(例如 `02-figma-vuetify2-adapter.mdc`、`02-figma-react-mui-adapter.mdc`),可将本文件删除,或在 Cursor 设置中不再引用本文件。
9
-
10
- ## 第一步:用 Agent 生成栈专属规则
11
-
12
- 在项目根执行 `npx figma-cache cursor init` 后,打开 **`AGENT-SETUP-PROMPT.md`**,在 Cursor 里 **`@AGENT-SETUP-PROMPT.md`** 或整篇粘贴给 Agent,让其按文档顺序执行(含推断栈、生成配置、删除本占位文件)。若你更习惯手写,也可自行新建 `02-figma-<栈>-adapter.mdc` 与 `figma-cache.config.js`,再删除本文件。
13
-
14
- 生成后,**01-figma-cache-core** 仍只负责缓存与校验;**表现层**仅由你的 `02-figma-*-adapter` 约束。
15
-
16
- ## 与 01 的固定边界
17
-
18
- - **单一事实来源**:实现 UI 时只从 `raw.json`、`spec.md`、`state-map.md`、`meta.json` 取数;不在这些通用文件里写入框架专有代码或路由名。
19
- - **仅当任务包含「写/改业务 UI」且缓存可读**时,才应用具体栈的 Adapter;纯缓存维护、只跑 CLI,不触发表现层规则。
20
-
21
- ## React 直复用(选用规则)
6
+ # Figma -> UI Stack Adapter(占位模板)
22
7
 
23
- 仅当 Agent 识别目标项目为 **React 栈**(如 React + Tailwind / React + CSS Modules / React + styled-system)时启用:
8
+ 本文件仅用于生成阶段引导,非长期规则。
24
9
 
25
- - 优先复用节点目录下 `mcp-raw-get-design-context.txt` 的 React 参考代码作为起稿。
26
- - 在此基础上仅做必要微调:项目 token 映射、组件替换、状态/交互逻辑、数据绑定、可访问性与响应式。
27
- - 若项目非 React 栈,禁止直接复用该 React 代码,应按目标栈 Adapter 规则转换实现。
28
- - 复用时优先保持结构与视觉一致性;改动应聚焦“接入项目规范”而非重写布局。
10
+ ## 生成流程(强制)
11
+ 1. 基于项目栈生成 `.cursor/rules/02-figma-<stack>-adapter.mdc`。
12
+ 2. 验证新 adapter 可用(语法 + 最小执行验证)。
13
+ 3. 删除临时模板文件:
14
+ - `.cursor/rules/02-figma-stack-adapter.mdc`
15
+ - `AGENT-SETUP-PROMPT.md`
29
16
 
30
- ## 参考实现(非默认)
17
+ ## 边界
18
+ - `01-figma-cache-core` 仅负责缓存与校验。
19
+ - 业务 UI 实现约束由新生成的 `02-figma-<stack>-adapter.mdc` + `03/04` 规则承接。
31
20
 
32
- 安装本包后,示例路径为 **`node_modules/figma-cache-toolchain/cursor-bootstrap/examples/vue2-vuetify2-adapter.reference.mdc`**(Vue 2 + Vuetify 2 全文参考),需时由 Agent 读入并改写为你的 `.cursor/rules/02-figma-...`。
21
+ ## 说明
22
+ - 若用户明确要求保留任务书或占位模板,可不删除,并在汇报中说明原因。
@@ -1,91 +1,58 @@
1
- ---
2
- description: Figma 缓存驱动的 UI 实现硬约束(严格 1:1)
3
- alwaysApply: true
4
- ---
5
-
6
- # Figma UI 实现硬约束(Hard Mode)
7
-
8
- 边界:本规则仅约束业务 UI 实现阶段(已具备可读缓存数据后),不负责 MCP 拉取与缓存写入。
9
-
10
- ## 0. 目标(强制)
11
-
12
- - 首版必须 1:1 还原缓存事实。
13
- - 禁止“贴近”“近似”“经验值补全”。
14
- - 若信息冲突或不足,先停下澄清,不得猜测实现。
15
-
16
- ## 1. 首版必读数据源(强制)
17
-
18
- 实现前必须读取并建立事实对齐清单,缺一不可:
19
-
20
- 1. `spec.md`
21
- 2. `raw.json`
22
- 3. `state-map.md`
23
- 4. `mcp-raw-get-design-context.txt`(首版强制必读)
24
-
25
- 补充说明:
26
-
27
- - `mcp-raw-manifest.json` 用于确认证据完整性与来源一致性。
28
- - `mcp-raw-get-variable-defs.txt` 用于 token 变量补充。
29
-
30
- ## 2. 数据职责与裁决顺序(强制)
31
-
32
- - `spec.md`:结构化布局/文案/token 概览。
33
- - `raw.json`:覆盖度与完整性约束。
34
- - `state-map.md`:状态与交互映射。
35
- - `mcp-raw-get-design-context.txt`:首版视觉与结构落地的一手细节依据。
36
-
37
- 当 `spec.md` / `raw.json` / `state-map.md` 信息抽象、缺失、或相互冲突时:
38
-
39
- - 必须回到 `mcp-raw-get-design-context.txt` 裁决。
40
- - 仍无法裁决时,必须停止实现并向用户确认。
41
- - 禁止凭经验补齐。
42
-
43
- ## 3. 视觉 1:1 规则(强制)
44
-
45
- - 颜色:必须使用缓存 token 或明确值,禁止近似替换。
46
- - 文本:字号/字重/行高/字距逐项对齐,禁止“近似 class”替代。
47
- - 几何:圆角/边框/背景/间距逐项对齐,不做推测。
48
- - 盒模型:统一 `box-border`(或等效策略)并保持全组件一致。
49
- - 状态切换不得引发布局占位变化(避免抖动/超宽/变窄)。
50
-
51
- ## 4. 标签与语义规则(强制)
52
-
53
- - 布局与展示优先使用安全标签:`div` / `span` / `p` / `img`。
54
- - 不禁用功能标签(如 `button` / `input` / `select` / `ul` / `li`),但使用时必须:
55
- - 明确其语义必要性,或来自本地封装组件复用。
56
- - 完整接管默认样式(基础态 + hover/focus/active/selected)。
57
- - 保证视觉结果与设计事实 1:1,不受浏览器默认样式干扰。
58
- - 禁止“为了方便”滥用功能标签。
59
-
60
- ## 5. 结构与尺寸一致性(强制)
61
-
62
- - 首版必须先确定单一宽度策略(固定值或自适应),同组件内不得混用。
63
- - 左右对齐策略必须统一;同类块(如双下拉)必须同构实现。
64
- - 默认禁止横向滚动;非设计明确要求不得出现横向滚动条。
65
- - 文本溢出必须显式处理(如 `min-w-0` + `truncate`)。
66
-
67
- ## 6. 状态与交互还原(强制)
68
-
69
- - 必须覆盖缓存声明状态:`default / expanded / selected / unselected`(若存在)。
70
- - 每个状态必须映射背景/边框/文本/图标样式。
71
- - 交互行为(展开、收起、选择、Esc、outside click)按缓存或用户要求实现。
72
- - 禁止新增未请求交互;禁止删除已声明交互。
73
-
74
- ## 7. 执行节奏(强制)
75
-
76
- - 每轮只允许改一个维度:结构 / 颜色 / 尺寸 / 交互。
77
- - 禁止“顺手”捆绑多维改动,除非用户明确要求整包改。
78
- - 变更后必须做改动文件 lint 校验。
79
-
80
- ## 8. 失败判定(任一命中即失败)
81
-
82
- - 未读取 `mcp-raw-get-design-context.txt` 就开始实现。
83
- - 使用“近似值”替代缓存明确值。
84
- - 状态样式未完整覆盖或与缓存定义不一致。
85
- - 出现横向滚动、尺寸漂移、对齐不一致且无设计依据。
86
-
87
- ## 9. 失败反馈格式(固定)
88
-
89
- 1. 失败原因(违反哪条硬约束)
90
- 2. 定位信息(文件 + 样式/结构项)
91
- 3. 修复动作(如何回到 1:1)
1
+ ---
2
+ description: Figma 缓存驱动 UI 实现硬约束(统一版:含一次性交付与证据映射)
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # Figma UI 实现硬约束(统一版)
7
+
8
+ 边界:仅约束缓存可读后的业务 UI 实现,不负责 MCP 拉取。
9
+
10
+ ## 0) 压缩级别(先选)
11
+ - L0 严格:高保真/复杂交互/历史漂移(完整对齐 + 全状态 + 强校验)。
12
+ - L1 标准(默认):精简事实清单 + 核心状态 + lint。
13
+ - L2 快速:仅“先看效果”场景,先静态后补交互。
14
+
15
+ ## 1) 首版必读(强制)
16
+ - `spec.md` / `raw.json` / `state-map.md` / `mcp-raw-get-design-context.txt`
17
+
18
+ ## 2) 裁决顺序(强制)
19
+ - 信息冲突:回到 `mcp-raw-get-design-context.txt`。
20
+ - 仍无法裁决:先问用户,禁止猜测。
21
+
22
+ ## 3) 视觉与布局(强制)
23
+ - 颜色/字体/几何/间距使用明确值,不用近似值。
24
+ - 默认 `box-border`,文本溢出显式处理。
25
+ - 禁止无依据横向滚动与布局抖动。
26
+
27
+ ## 4) 标签与控件(最新口径)
28
+ - 默认优先:`div` / `span` / `img`。
29
+ - 默认禁用:`p` / `ul` / `li` / `ol` / `h1-h6`(除非用户明确要求)。
30
+ - 可直接使用:`input` / `select` / `textarea` / `a`。
31
+ - 原生 `button` 默认禁用;仅封装按钮或 UI 库按钮可用。
32
+ - `role` / `aria-*` 默认不强制。
33
+
34
+ ## 5) 元数据策略
35
+ - `data-node-id` / `data-name` 默认不输出到最终业务代码。
36
+ - 仅在调试映射模式下临时保留。
37
+
38
+ ## 6) 状态与交互(强制)
39
+ - 覆盖缓存声明状态(至少 `default / expanded / selected / unselected`,若存在)。
40
+ - 仅实现缓存声明或用户要求交互,不私增。
41
+
42
+ ## 7) 一次性交付判定(强制)
43
+ - 信息充分(结构/文案/token/状态交互无关键缺口)时:必须一次性完成结构、样式、状态、基础响应式与可访问性,并同轮完成至少一项核心校验。
44
+ - 信息不足时:必须一次性列出“缺失字段 + 影响范围 + 最小补充需求”,并标注“受限还原”。
45
+
46
+ ## 8) 证据映射(强制)
47
+ - 交付说明至少覆盖:布局结构、核心文案、主要颜色/字体 token、状态/交互判断。
48
+ - 每项实现事实必须给一个主来源(`raw.json/spec.md/state-map.md/mcp-raw-get-design-context.txt`)。
49
+ - 若引用 `mcp-raw`,仅用于补缺口/消歧,不重复主来源事实。
50
+ - 若 `raw/spec` 与 `mcp-raw` 冲突,先报告冲突再给采用依据。
51
+
52
+ ## 9) 验收与失败反馈
53
+ - 每轮至少执行改动文件 lint。
54
+ - 声称“1:1 完成”前,至少补一项构建/类型/核心测试。
55
+ - 失败反馈固定三段:
56
+ 1. 失败原因
57
+ 2. 定位信息(文件 + 项)
58
+ 3. 修复动作
@@ -1,86 +1,35 @@
1
- ---
2
- description: UI 全局基线治理(新项目与老项目双轨),并约束组件生成行为
3
- alwaysApply: false
4
- ---
5
-
6
- # UI Baseline Governance(生成约束)
7
-
8
- 边界:本规则只约束“全局样式基线与组件生成策略”,不替代 `01-figma-cache-core.mdc` 与具体栈 Adapter。
9
-
10
- ## 0. 目标(强制)
11
-
12
- - 在不破坏现有页面的前提下,建立可复用的 UI 默认基线。
13
- - 将“新项目一次性定标”与“老项目渐进治理”统一到同一执行模型。
14
- - 将基线策略约束到 Agent 的组件生成行为,降低返工。
15
-
16
- ## 1. 双轨策略(强制)
17
-
18
- ### 1.0 项目类型判定(机械启发式,强制先判再改)
19
-
20
- > 目的:减少主观判断;**拿不准时一律按老项目**(安全默认)。
21
-
22
- 在动手改全局样式前,Agent 必须完成一次快速扫描并输出「判定结论 + 命中证据(路径或计数)」。
23
-
24
- **老项目(走 §1.2 分层分批)**,满足**任一**即判定为老项目:
25
-
26
- - **存量页面信号**:`src/`(无 `src` 则看项目约定的主源码根)下 `*.vue` / `*.tsx` / `*.jsx` 文件数 **≥ 40**。
27
- - **已有全局 reset / normalize**:入口或样式目录存在或引入命中以下之一(文件名或 import 字符串):`normalize`、`reset`、`preflight`、`@unocss/reset`、`sanitize`。
28
- - **已接入成熟 UI 框架**:`package.json` 的 `dependencies` 命中其一:`element-plus`、`ant-design-vue`、`vuetify`、`naive-ui`、`@mui/material`、`@chakra-ui/react` 等。
29
- - **全局样式覆盖风险**:根样式或全局入口中存在通配选择器(如 `* {`、`html, body` 大包)、或抽样可见大量 `!important` 与深度选择器混用(仅作辅助信号,命中则偏老项目)。
30
-
31
- **新项目(可走 §1.1 一次性全局基线)**,需**同时**满足:
32
-
33
- - 上述「老项目」四条**均未**命中。
34
- - `*.vue` / `*.tsx` / `*.jsx` 计数 **< 15**(或主业务目录下可数的页面级组件极少)。
35
-
36
- **不确定**:凡计数落在 **15~39** 之间、或仅有弱信号时,**按老项目处理**,仅允许局部基线或单模块试点,禁止首轮全量全局 reset。
37
-
38
- ### 1.1 新项目(无历史负担)
39
-
40
- - 可一次性启用全局基线(推荐)。
41
- - 首版建议最小集合:
42
- - `box-sizing: border-box`(含 `*::before/*::after`)
43
- - 常见标签 margin/padding reset
44
- - 媒体元素 `display:block` 与 `max-width:100%`
45
- - 统一字体基线(family/size/line-height)
46
- - 焦点可见策略(`focus-visible`)
47
-
48
- ### 1.2 老项目(已有线上页面)
49
-
50
- - 禁止直接全量覆盖全局 reset。
51
- - 采用“分层 + 分阶段 + 可回滚”:
52
- 1. 新增 `baseline layer`(仅声明基线,不改业务样式)。
53
- 2. 先对“新页面/新组件”生效(范围隔离或入口分批)。
54
- 3. 用视觉回归与缺陷工单推进存量页迁移。
55
- 4. 每轮迁移可独立回滚。
56
-
57
- ## 2. 生成时行为约束(强制)
58
-
59
- - 未显式声明前,生成组件默认假设 `border-box`。
60
- - 在 `flex` 文本容器中必须显式处理溢出:`min-w-0` + `truncate`(或等效策略)。
61
- - 弹层/下拉必须“锚定触发器”,禁止页面坐标硬定位。
62
- - 图标优先复用项目图标系统;若缺失,用本地 `inline svg`,禁止运行时依赖 Figma 临时资产 URL。
63
- - 默认覆盖 `default/hover/focus/active/selected/disabled`(按设计需求裁剪)。
64
- - 禁止为“临时对齐”引入无意义嵌套;结构必须最小可读。
65
-
66
- ## 3. 老项目安全闸(强制)
67
-
68
- - 当检测到项目未完成 reset 或存在历史样式冲突:
69
- - 先输出“风险清单”(组件、影响面、回滚点)再改。
70
- - 优先局部基线(页面容器或组件命名空间)而非全局覆盖。
71
- - 不得在同一轮同时做“全局 reset + 大规模业务重构”。
72
-
73
- ## 4. 验证与验收(强制)
74
-
75
- - 每次变更后至少执行:改动文件 lint + 关键页面可视化验证。
76
- - 验收输出必须包含:
77
- 1. 本轮基线策略(新项目全局/老项目分层)
78
- 2. 影响范围
79
- 3. 回滚方式
80
- 4. 与组件生成约束的一致性说明
81
-
82
- ## 5. 失败反馈格式(固定)
83
-
84
- 1. 失败原因(违反哪条基线或安全闸)
85
- 2. 定位信息(文件 + 规则项)
86
- 3. 修复动作(分阶段方案与回滚点)
1
+ ---
2
+ description: UI 基线治理(分级精简版:判型、局部基线、验证回滚)
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # UI Baseline Governance(分级)
7
+
8
+ ## 0) 项目判型
9
+ - 老项目:命中任一(页面多 / 已有 reset / UI 框架 / 全局样式风险)。
10
+ - 新项目:均不命中且页面少。
11
+ - 不确定:按老项目。
12
+
13
+ ## 1) 策略
14
+ - 新项目:可一次性全局基线。
15
+ - 老项目:局部基线优先,分层分批,可回滚。
16
+
17
+ ## 2) 基线实施级别(按效果选)
18
+ - B0 保守(老项目默认):
19
+ - 复制模板 `node_modules/{{NPM_PACKAGE_NAME}}/cursor-bootstrap/examples/generated-ui-reset.css.template`
20
+ -> 项目 `src/styles/generated-ui-reset.css`。
21
+ - 在入口(如 `src/main.ts`)单次引入。
22
+ - 生成组件根节点统一加 `generate-ui-reset`。
23
+ - B1 中等:页面级作用域基线(新页面/新模块)。
24
+ - B2 激进:全局基线(仅新项目或明确授权)。
25
+
26
+ ## 3) 最小联动约束
27
+ - 默认 `box-border`。
28
+ - 弹层锚定触发器。
29
+ - 图标优先项目图标系统,兜底 `inline svg`。
30
+
31
+ ## 4) 验收输出
32
+ 1. 判型结论 + 证据
33
+ 2. 本轮级别(B0/B1/B2)
34
+ 3. 影响范围 + 回滚方式
35
+ 4. lint + 可视验证