# Prompt — Phase A1 follow-up: single-value axis skip

> **角色**：executor
> **范围**：扩 [`figma-sync/generate-docs-figma-members.mjs`](../../../figma-sync/generate-docs-figma-members.mjs) 的 discovery 算法——加单值 axis 跳过逻辑（`prop-aliases.md` 已登记的"Figma axis 处理规则 / 规则 1"），让 PromptMessage 等组件能正确生成。
>
> ⚠️ **不要 commit / 不要 git add**——dirty 累积到 Phase A1 完整完成后统一 commit。
> ⚠️ 完成后 **STOP**，按底部"完成报告"格式回报。
> ⚠️ **不扩范围**：只动 `figma-sync/generate-docs-figma-members.mjs` 一个文件 + 重跑生成产物。**不动** prop-aliases.md / backlog.md / audit / canonical / page。

---

## §0 — Plan owner 已定裁定

### 规则真源

[`src/design-system/translation/prop-aliases.md`](../../../src/design-system/translation/prop-aliases.md) "Figma axis 处理规则 / 规则 1: 单值 axis 跳过" 段（plan owner 在 commit 待 Phase A1 完成时一并落库）：

> 如果 figma `COMPONENT_SET` 内某 axis 在**所有 variants 中只有 1 个 unique value**，该 axis **不进** generator 输出的 `axes` 数组，**不派生** propByAxis 映射（不 bind canonical prop）。

### 实施要求

generator discovery / parse 阶段：

1. 解析每个 variant.name 收集所有 axis-value tuples
2. 对每个 figma axis：collect 该 component_set 内全部 variants 该 axis 的 unique values
3. **如 unique values 数量 === 1** → **跳过该 axis**：
   - 不进 `axes[]` 数组
   - 不进 `propByAxis` 映射
   - 不进 variants[].props 字段
   - 但保留在 `variant.figmaName`（原 figma name 字符串保整不删）
4. warn 输出：`"single-value axis '<axisName>'='<theOnlyValue>' skipped per prop-aliases.md axis 处理规则 / 规则 1"`

### PromptMessage 预期输出

实施后跑 `node figma-sync/generate-docs-figma-members.mjs`：

- Discovered: **Tier 1 = 19**（多 1 个 PromptMessage）
- Warnings 应含 `single-value axis 'interact'='Yes' skipped` 类似消息（不 throw）
- 新增 `figma-data/normalized/docs-figma-members/promptmessage.ts`：
  - `axes`: 2 项（`status` + `size`）—— 不含 `interact`
  - `variants`: 8 项，每个 `props.status` + `props.size`，**不含** `props.interact`
  - `figmaName` 字段保留原值（如 `'interact=Yes, status=success, size=L'`）—— 这字段不剔除单值 axis
  - 无 theme 字段（PromptMessage 无 theme axis）

### 其它 18 个 Tier 1 baseline regression

跑完后，已有 18 个 .ts（Badge / Tooltip / 16 新）必须**byte-identical 除 generatedAt**——它们都没单值 axis，输出不应改变。

任一文件出现非 generatedAt 行的 diff → STOP 报告，不修。

### 不动

- `prop-aliases.md`（plan owner 已 update 规则段，executor 只读消费）
- `backlog.md`（plan owner 已 update CANONICAL-002 entry）
- `figma-data/normalized/docs-figma-members/types.ts`（schema 不变）
- audit 脚本 / canonical / 任何 page

---

## §1 — 必读输入

1. [`figma-sync/generate-docs-figma-members.mjs`](../../../figma-sync/generate-docs-figma-members.mjs) — Phase A1 已重写版本，扩展起点
2. [`src/design-system/translation/prop-aliases.md`](../../../src/design-system/translation/prop-aliases.md) — 规则 1 真源（**只读**）
3. [`figma-data/normalized/components-tokenized/prompt_message__1408_17153.json`](../../../figma-data/normalized/components-tokenized/prompt_message__1408_17153.json) — PromptMessage figma 真源（验单值 axis 实证）
4. [`src/canonical/PromptMessage.vue`](../../../src/canonical/PromptMessage.vue) — canonical props（验跳过 interact 后派生 status/size 应能命中）
5. 现有 18 个 `figma-data/normalized/docs-figma-members/*.ts` —— regression 对照基线

---

## §2 — 任务清单

### 任务 2.1 — 实施单值 axis 跳过

按 §0 实施要求加 axis values 收集 + 单值 detect + skip 逻辑。

具体函数命名 / 实现位置（discover 阶段还是 parse 阶段做 detection）由 executor 提议。

### 任务 2.2 — 跑 generator 全量验证

```bash
node figma-sync/generate-docs-figma-members.mjs
```

预期控制台输出：
- `Tier 1 = 19`
- `Generated:` 列表新增 `promptmessage.ts`
- `Warnings:` 新增 single-value axis 跳过提示（PromptMessage 的 interact）
- 不再有 `axis 'interact' -> propName 'interact' not in canonical PromptMessage props` 错误

### 任务 2.3 — Baseline regression check

```bash
git diff figma-data/normalized/docs-figma-members/badge.ts
git diff figma-data/normalized/docs-figma-members/tooltip.ts
# 以及其他 16 个 .ts —— 都应只有 generatedAt diff
```

任一文件非 generatedAt 行变化 → STOP 报告。

### 任务 2.4 — 单组件 CLI 验证

```bash
node figma-sync/generate-docs-figma-members.mjs PromptMessage  # 应正常生成 promptmessage.ts
```

向后兼容单组件 CLI 不应破坏。

### 任务 2.5 — typecheck

```bash
pnpm exec vue-tsc --noEmit
```

预期 0 错误（含新增 `promptmessage.ts`）。

---

## §3 — 验收清单

- [ ] generator 加单值 axis 跳过逻辑（discovery / parse 任一阶段）
- [ ] 跑全量后 Tier 1 = **19**（多 PromptMessage）
- [ ] 新增 `figma-data/normalized/docs-figma-members/promptmessage.ts`：axes = `[status, size]`、variants = 8 各有 status/size 不含 interact
- [ ] PromptMessage 不再走 axis-mismatch warn 路径
- [ ] **18 个 Tier 1 baseline byte-identical 除 generatedAt**（regression check pass）
- [ ] `pnpm exec vue-tsc --noEmit` 0 错误
- [ ] 单组件 CLI 向后兼容（Badge / Tooltip / PromptMessage 单跑都 OK）
- [ ] prop-aliases.md / backlog.md / types.ts / audit / canonical / page **没动**
- [ ] 没 commit / 没 git add

---

## §4 — 完成报告

```
## Phase A1 Follow-up: Single-value axis skip 完成报告

### 改动文件
- figma-sync/generate-docs-figma-members.mjs (+X/-Y 行, 加单值 axis 跳过逻辑)
- figma-data/normalized/docs-figma-members/promptmessage.ts (新增, ~M 行)
- 其他 18 个 .ts (重跑覆写, 仅 generatedAt 变化)

### Discovery 统计
- Tier 1 = <N>（应为 19）
- single-value axis warn: <list>

### Tier 1 输出清单
[19 个 component → output_filename 映射]

### PromptMessage 输出验证
- axes 数量: <expected 2 (status + size)>
- variants 数量: <expected 8>
- variants[0].props 形态: <show 实际, expected only status + size, NO interact>

### Baseline regression
- 18 个 baseline .ts: <全部 byte-identical 除 generatedAt / 出现 diff + 描述>

### CLI 向后兼容验证
- node ... PromptMessage: <OK / 错误>

### typecheck
- vue-tsc: 0 错误

### 实施细节（plan owner 复审）
[贴关键 diff hunk + 单值 detect 算法位置 + 选择理由]

### 验收 self-check
- [ ] 单值 axis 跳过实施
- [ ] Tier 1 = 19
- [ ] promptmessage.ts 字段正确
- [ ] 其他 18 baseline regress-pass
- [ ] vue-tsc 0 错
- [ ] 单组件 CLI 不破坏
- [ ] 不动真源 .md / types.ts / audit / canonical / page
- [ ] 没 commit

### 未解决项 / blocker
[如有，列出；无则写"无"]

STOP — 等 plan owner 复审 + 决定 Phase A1 完整 commit (含本 follow-up + plan owner prop-aliases.md/backlog.md edit)。
```

---

## §5 — 严守约束总览

- ⚠️ **不要 commit / 不要 git add**
- ⚠️ §0 裁定**最终**（单值 axis 跳过算法 + 不动列表）
- ⚠️ 仅动 generator 1 文件 + 重跑生成产物
- ⚠️ 不动 prop-aliases.md / backlog.md（plan owner 已编辑）
- ⚠️ 18 个 baseline 必须 byte-identical 除 generatedAt（regression）
- ⚠️ 完成 STOP，按 §4 格式回报
