# Codex Prompt: T1b — Progress 伪主题修复（删 code 自创视觉差 + 真源登记）

> **本 prompt 在新 Session 中执行**——你（executor）没有之前对话的上下文。所有需要的输入都在仓库文件里，按下面"必读前置"读完。
>
> **任务性质**：纯执行——按 plan owner 已决定的具体改动**修 3 处文件**：删 Progress.vue 自创视觉差 + 改 :class 绑定 + divergences.md 登记。**没有任何抽象设计任务**——所有改动内容已 plan owner 明确写出。

---

## 必读前置（按顺序，不能跳）

新 Session 必须先读全：

1. **`AGENTS.md`** — 项目级 AI 协作入口（看 executor 角色行为约束）
2. **`docs/meta-rules.md`** — 元规则真源（看反模式清单 + 触发器 G + 触发器 I + 实证沉淀附录）
3. **`docs/PROJECT_GOAL.md`** — 项目目标（双向 Figma↔Code 桥）
4. **`src/design-system/translation/divergences.md`** — 翻译层真源（参考 line 79-100 的"## 设计态属性批量不映射"段；本轮**追加新段**，不改现有段）
5. **`src/components/Progress/Progress.vue`** — 待修组件（line 45 :class + line 71-74 .progress--light）
6. **`src/design-system/translation/axis-implementation-map.md`** — Axis 真源（看 Instance 5 关于 Progress.status palette；本轮**不动**）
7. **`figma-data/normalized/components-tokenized/progress__4915_7287.json`** — figma 真源（已核查：dark/light variants text fills 全是 `#cccccc`，证实"伪主题"）
8. **`figma-sync/audit-component-token-fidelity.mjs`** — Round 3 v2 audit 脚本（**本轮不动**——这次任务是修 code，不是改 audit）
9. **`docs/internal/component-token-fidelity-report.md`** — 当前 v2 报告（用于跑前 baseline）

读完前不要写任何代码。

---

## 上下文：为什么修 Progress 伪主题

主 session 已用 JSON 真源核查（meta-rules 触发器 I）证实：

```
figma 真源 (progress__4915_7287.json)：
  16 variants（theme[dark|light] × status[default|success|error|warning] × size[M|S]）
  dark variant text fills 集合: ["#cccccc"]
  light variant text fills 集合: ["#cccccc"]
  → dark/light 完全同色，figma 端没有视觉差异

code 现状 (Progress.vue)：
  line 71-74 含 .progress--light selector，自创 dark/light 视觉差异
  line 45 :class 绑定 progress--${theme} class

→ 违反 meta-rules 双层导入精神（code 自创 figma 不存在的视觉）
→ audit 标 8 条 figma-no-real-axis-diff (Round 3 v2 baseline)
```

**修复方向**（按双层导入）：删 code 自创视觉差 + 在翻译层真源登记 Progress 伪主题。

**保留** `Progress.theme` prop（runtime + canonical），避免破坏 API；prop 变成 vestigial（无视觉作用），待 Phase 6.4 评估是否 deprecate。

---

## 你的角色边界（meta-rules 触发器 G）

| 已定（plan owner 决定，按已定改） | 你要做（执行） |
|---|---|
| 删除 Progress.vue line 71-74（`.progress--light` selector） | 删 4 行 |
| 改 Progress.vue line 45 :class 绑定 | 删 `progress--${theme}` 部分 |
| 在 divergences.md 追加新段（具体内容见任务 3） | 按已定文本追加 |
| audit 脚本 / axis-implementation-map.md / Plan v2 / meta-rules | 不动 |

**严禁**：

- ❌ 改 audit 脚本 / 真源 / plan / meta-rules
- ❌ 改 Progress.vue 其它行（保留 theme prop / palette / fillColor / progressVars 等所有逻辑）
- ❌ 改 src/canonical/Progress.vue（如有 — 本任务只动 src/components/Progress/Progress.vue）
- ❌ 改 docs/internal/component-theme-implementation-audit-2026-04-29.md（人工 audit 报告，历史记录）
- ❌ 改 figma-data/raw/* / figma-data/published/*
- ❌ git add / git commit / git push（M1 还远）

---

## 任务 1：删 Progress.vue line 71-74 的 `.progress--light` selector

**输入**（plan owner 已确认 line 71-74 内容）：

```css
.progress--light {
  --progress-track-bg: var(--line-divider-light);
  --progress-label-color: var(--color-grey-5);
}
```

**你要做**：完整删除这 4 行（含空行调整）。删后 Progress.vue 的 `<style scoped>` 块里：
- 保留 `.progress` 默认值（line 65-69 含 `--progress-track-bg: var(--bg-layer3)` 等）
- 保留 `.progress__track` / `.progress__fill` / `.progress__label` 等其它 selector
- **不保留** `.progress--light` 任何痕迹

**理由**：figma 真源 dark/light 同色 → code 不该自创差异。删后 dark/light variant 在站点 ThemeProvider 切换时通过 `var(--bg-layer3)` 自动跟随（dark theme 解析为 dark hex / light theme 解析为 light hex）——这是站点级机制，不靠组件 prop。

---

## 任务 2：改 Progress.vue line 45 :class 绑定

**输入**（plan owner 已确认 line 45 内容）：

```vue
:class="[`progress--${theme}`, `progress--${normalizedSize}`]"
```

**你要做**：删除 `` `progress--${theme}` `` 部分（含逗号），保留 size class：

```vue
:class="[`progress--${normalizedSize}`]"
```

**理由**：删了 `.progress--light` selector 后，渲染 `progress--dark` / `progress--light` class 名没对应 CSS——class 失效。同步删除让 DOM 干净。

**严格按上面写法改**——保留 size class（因为 size axis 仍在 css-class layer 实现：`.progress--M` / `.progress--S` 等）。

---

## 任务 3：在 `src/design-system/translation/divergences.md` 追加新段

**输入**（plan owner 已写好登记内容）：

在 divergences.md 现有"## 设计态属性批量不映射"段（line 79）的**所有子段之后**追加新子段（位置：line 100 附近，看具体行号决定）：

```markdown
### Figma Progress.theme 属性（伪主题，特殊登记）

- Property type: `VARIANT` (`dark/light`)
- 现状：figma 真源 dark/light variant 视觉完全相同（fills 同色 `#cccccc`）；code 之前在 `.progress--light` selector 自创视觉差，违反双层导入精神
- 修复（T1b 2026-04-29）：删除 `src/components/Progress/Progress.vue` 中 `.progress--light` selector + 删除 `:class` 中 `progress--${theme}` 部分；视觉切换由站点级 ThemeProvider + CSS 变量（`--bg-layer3` 等）自动驱动
- `Progress.theme` prop 保留：runtime + canonical 两层 API 不动（避免破坏调用方），prop 变成 vestigial（无视觉差异作用）；待 Phase 6.4 评估是否 deprecate
- Status: accepted documented divergence（按 figma 真源对齐，code 不自创视觉差）
- 区别于 line 81 的 Class B 5 组件：Class B 是"figma 设计态预览开关，runtime 不暴露 prop"；Progress 是"figma 真伪主题，runtime + canonical 都暴露 prop 但视觉无差异"
```

**追加位置**：在现有"### Figma `Content` SLOT" 段之后（应是"## 设计态属性批量不映射"段最后一个子段），或紧跟现有 `## 设计态属性批量不映射` 段最后一个子段。具体位置取决于现状——你 Read divergences.md 后插入合适处。

**严格按上面文本追加**——不要改其它段。

---

## 任务 4：跑 audit 验证（按 meta-rules 触发器 I 三层核对）

```bash
# 验证脚本仍可正常跑
node figma-sync/audit-component-token-fidelity.mjs
```

**Sanity check 12 项**（必须全部用 JSON 真源核查）：

| # | 检查项 | 期望 | 验证命令 |
|---|---|---|---|
| 1 | HEAD 不动 | 仍 `8d12abf` | `git log --oneline -1` |
| 2 | Progress.vue 不再含 `.progress--light` selector | grep 0 | `grep -c '\\.progress--light' src/components/Progress/Progress.vue` 应为 0 |
| 3 | Progress.vue 不再含 `progress--${theme}` class 绑定 | grep 0 | `grep -c "progress--\\\${theme}" src/components/Progress/Progress.vue` 应为 0 |
| 4 | Progress.vue 仍含 `progress--${normalizedSize}` class 绑定 | grep ≥ 1 | `grep -c "progress--\\\${normalizedSize}" src/components/Progress/Progress.vue` |
| 5 | Progress theme prop 仍存在 | grep ≥ 1 | `grep -c "theme" src/components/Progress/Progress.vue` 应远 > 0 |
| 6 | divergences.md 含新段 "Figma Progress.theme" | grep ≥ 1 | `grep -c "Progress.theme" src/design-system/translation/divergences.md` |
| 7 | Progress audit findings figma-no-real-axis-diff 数（用 JSON 真源） | 应从 8 降到 0 或大幅减少 | `node -e "const d=JSON.parse(require('fs').readFileSync('figma-data/normalized/component-token-fidelity.audit.json','utf8'));const p=d.components.find(c=>c.componentName==='Progress');const f=p.variants.flatMap(v=>v.findings);console.log(f.filter(x=>x.verdict.includes('figma-no-real-axis-diff')).length)"` |
| 8 | Progress total findings（用 JSON） | 跟 baseline 104 大致同（轻微波动可接受） | `node -e "..."` |
| 9 | Tooltip token-match-via-custom-property-chain 数（不应受影响） | 仍 12 | `node -e "..."` |
| 10 | 总 finding 数 | 36089 ± 50 | Summary 段 |
| 11 | 改的文件只有 3 个 | Progress.vue + divergences.md + 报告/JSON 自动重生成 | `git status --short` |
| 12 | 没改禁止文件 | 无 | `git diff --name-only` 不含 audit 脚本 / axis-implementation-map.md / plan / meta-rules / src/canonical/Progress.vue 等 |

**注意触发器 I**：任何"X 是否存在"的判断**先用 JSON 真源核查**（`node -e "JSON.parse(...)"`）。grep 命令是辅助验证，不是诊断结论。

如果某项 sanity 不通过 → 不要硬调代码对上数字。先**报告原因**，让 plan owner 复审。

---

## 任务 5：⚠️ 不要 commit

```
❌ git add
❌ git commit
❌ git push
❌ git stash
```

允许新增 / 修改：

- ✅ `src/components/Progress/Progress.vue`（删 4 行 CSS + 改 1 行 :class）
- ✅ `src/design-system/translation/divergences.md`（追加 1 段）
- ✅ `docs/internal/component-token-fidelity-report.md`（自动重生成）
- ✅ `figma-data/normalized/component-token-fidelity.audit.json`（自动重生成）

---

## 任务 6：完成后 STOP + 报告关键数字

```
任务 1 (删 .progress--light selector)：✅ / ❌
任务 2 (改 :class 绑定)：✅ / ❌
任务 3 (divergences.md 追加新段)：✅ / ❌
任务 4 跑 audit + Sanity check 12 项：
  通过：N / 12
  未通过：[列出来 + 原因]

audit 报告关键数字（vs Round 3 v2 baseline）：
  Progress figma-no-real-axis-diff: N (baseline 8)
  Progress total findings: N (baseline 104)
  Tooltip custom-property-chain: N (baseline 12，不应受影响)
  总 finding：N (baseline 36089)

工作区状态：
  modified: 4 (Progress.vue + divergences.md + report + JSON)
  untracked: 1 (.claude/settings.json，本来就 untracked)
  HEAD: 应仍 8d12abf
```

**STOP。不要进 T1b 后续刀。不要 commit。**

---

## 给 executor 的元提醒（meta-rules 触发器 G + I 反向兜底）

新 Session 执行时如果发现：

- prompt 让你"**设计 divergences.md 段格式**" / "**决定 Progress.theme 是否 deprecate**" / "**判断哪些 selector 该删**" → **这是 plan owner 漏写了真源**，**报告给 plan owner**，不要自己设计
- Progress.vue 当前内容跟 prompt 描述不一致（如 line 45 / 71-74 跟 prompt 写的内容不符）→ **报告差异**，不要自己改写"对不上"的部分；可能是 prompt 信息过期，让 plan owner 复审
- audit 跑完 figma-no-real-axis-diff 没降反升 → **报告原因**，不要再改 Progress.vue 让数字对上

按 meta-rules 触发器 I：所有"X 是否存在"判断**先 JSON 真源核查**，不只 grep。

完成后 STOP。
