# Master Prompt — Overnight autonomous: F22 + F25 (phase A/B/C)

> **角色**：executor (Codex) — 整夜 autonomous 跑，无人监督
> **范围**：按依赖顺序执行 F22 → F25 phase A → F25 phase B → F25 phase C；每步硬 gate，失败立刻 STOP + 写报告 + 不 push
> **决策**：所有"按 plan owner 推荐"决策已写定在各子 prompt §0，不再问
> **不可越界**：F23 / F20 / F24 **不跑**（需要人眼视觉验收），即使时间够也不能扩范围
>
> 起手先 Read 一遍 [`AGENTS.md`](../../../AGENTS.md) + [`docs/meta-rules.md`](../../meta-rules.md) + [`docs/internal/backlog.md`](../backlog.md) F22/F25/F26 entries

---

## §0.0 — Planner / Executor 分工

**Planner role** = 起手 Claude Code 这个 session（你正在读这个 prompt 的人/agent）：
- 顺序读本 master 的 §1 各 step
- 每 step 起手：先读对应的 executor prompt 文件 (`f22-*.prompt.md` / `f25-*.prompt.md`)
- 触发 Codex 跑 executor prompt（用户在 IDE 内手动启 Codex / 或 Claude Code 内置 subagent / 或 plan owner 自己用 Bash/Edit 工具**就地执行 mechanical 部分**——三种方式都行，按你的环境定）
- 读 Codex / 自身执行的 §4 报告
- 按 §0 硬 gate 校验（vue-tsc / 3 audit / commit cap）
- 通过 → commit + push + 进下 step；不通过 → STOP，写失败报告
- 全链路完毕写 §1 Step 5 总报告

**Executor role** = 每 step 的 fresh Codex session（或 Plan owner 直接用 Bash/Edit 工具）：
- 吞当前 step 的 prompt 文件（自包含上下文）
- 跑机械活（改文件 / 跑脚本 / 写报告）
- 不做架构决策（决策已在 prompt §0 由 Plan owner 写定）
- 完成立刻 STOP，不主动跨 step

**分工要点**：
- Plan owner 不亲自改 src/ figma-data/ 等仓库文件——该写改的活下放 executor
- Plan owner 只做：读报告 / 校验 gate / 决定下 step / 触发 executor / commit + push
- Executor 不擅自扩范围——prompt §0 写定的清单不动

---

## §0 — 全链路硬约束（任何一步违反 → STOP）

1. **每步独立 commit + push**：F22 / F25-A / F25-B / F25-C 各自 commit；不合并；commit 完立刻 push
2. **每步 commit 前必须**：
   - `pnpm exec vue-tsc --noEmit` → 0 errors
   - `pnpm audit:figma-conformance` → overallPass=true
   - `pnpm audit:docs-site` → no new errors（仅原有 in-review warn 允许）
   - `node figma-sync/audit-page-t2-sample.mjs` → 18 page 全 N/A 或 pass，不出现 fail
3. **commit message 必须含**：`Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>`
4. **绝对不动**：
   - `src/tokens/variables.css` 手工区段（[2026-05-07 component-variant tokens](../../../src/tokens/variables.css)）
   - `figma-data/raw/` 真源
   - `playground/docs/pages/FormItemPage.vue` （F23 范围）
   - 18 page audit reports 之外的 docs 文件（`AGENTS.md` 不动 / `mockup-conventions.md` 不动）
   - `package.json` 跨 step 不动（仅 F25-A 步加 `audit:*` script 行允许）
5. **commit 范围 hard cap**：
   - F22: ≤ 5 文件（generator + normalized data + audit reports）
   - F25-A: ≤ 8 文件（audit scripts + package.json scripts 行 + audit baseline reports）
   - F25-B: ≤ 30 文件（export-icons.mjs + 重生的 catalog/generated/*.ts；mono-color icons 个数有限）
   - F25-C: ≤ 200 文件（exact-match 自动替换，每 page 5-15 处）
   - **超 cap → STOP，写未解决项报告，don't push**
6. **任何 dev server 启动只用于 audit 自动测试，禁止 visual 评判**——本任务 baseline 是 audit / typecheck 文本输出

---

## §1 — 执行顺序

### Step 1: F22 — generator theme axis case-insensitive

按 [`f22-generator-theme-case-insensitive.prompt.md`](f22-generator-theme-case-insensitive.prompt.md) 执行。

完成 gate（同时满足）：
- §3 验收清单全过
- vue-tsc / 3 audit 全过（§0 第 2 条）
- FormItem normalized 输出 verify 含 `theme: 'dark'/'light'` field
- commit + push 后 STOP 5 秒，verify `git status --short | wc -l` = 0（除许可的 untracked）

任何 fail → STOP，写 `docs/internal/_reports/f22-failure-2026-05-09.md` 含失败现象 + 推断原因 + 当前 git state；don't push 失败的改动。

---

### Step 2: F25 phase A — 4 audit scripts (read-only)

按 [`f25-svg-icon-conformance-audit.prompt.md`](f25-svg-icon-conformance-audit.prompt.md) 的 §A 段执行（仅 phase A）。

phase A 范围：
- 写 4 个 audit scripts 到 `figma-sync/`：
  - `audit-icon-fill-currentcolor.mjs`
  - `audit-component-no-inline-svg.mjs`
  - `audit-no-hardcoded-design-tokens.mjs`
  - `audit-docs-page-bg-contrast.mjs`
- `package.json` 加 4 个对应 `audit:*` npm script
- 每个 audit 跑一次产生 baseline report 到 `docs/internal/_reports/f25-audit-{name}-baseline-2026-05-09.md`
- baseline 报告含：检测命中条数 / 文件清单 / 严重度分组 / 修复建议（不自动修）

完成 gate：
- 4 个 audit script 文件存在 + 全跑通（exit 0）
- 4 个 baseline 报告文件存在
- 不修任何 src/ playground/docs/ 文件（read-only！）
- vue-tsc 0 errors（应不变，因没改 src）
- commit + push

---

### Step 3: F25 phase B — export-icons.mjs `currentColor` 治本

按 f25 prompt §B 段执行。

phase B 范围：
- 改 `figma-sync/export-icons.mjs`：从 figma 拉 SVG 时，**单 path 单色** icon 的 fill 自动转 `currentColor`；**多 path 多色** icon 保留 hex（白名单）
- 跑 `pnpm sync:icons && pnpm generate:icons-catalog` 重生 `src/icons/catalog/generated/*.ts`
- 验证：F25-A 跑过的 `audit-icon-fill-currentcolor.mjs` 重跑应该绝大多数 finding 消失（仅多色 icon 白名单里的留 hex）

完成 gate：
- generate 重跑成功，no exception
- audit-icon-fill-currentcolor 重跑：findings 数 < phase A baseline 一半（mono-color icon 占多数）
- vue-tsc 0 errors
- commit + push

---

### Step 4: F25 phase C — batch tokenize exact-match

按 f25 prompt §C 段执行。

phase C 范围：
- 写一个 helper script `figma-sync/auto-tokenize-exact-match.mjs`
- 扫 18 个 `playground/docs/pages/*Page.vue` style 段
- **三类 exact-match 自动替换**：
  - `padding|margin|gap|border-radius|min-/max-/width|height` 内的 `Npx` → 当 N 在 `--sp-{xxs/xs/s/m/l/xl/xxl/xxxl}` 或 `--r-{xs/s/m/l/xl/xxl}` 表里有 exact 同值 token → 替换
  - `background|color|border-color|fill` 内的 `#hex` → 当 hex 在 `--color-grey-*` / `--bg-layer*` / `--text-*` / `--icon-*` / `--orange|red|brand|blue` 等 token 表里有 exact 同值 → 替换
  - 不是 exact 同值的 → 留 hex，加注释 `/* TODO F25-followup: no exact token match */`
- 修后跑 vue-tsc → 必 0 errors
- 修后跑 audit-no-hardcoded-design-tokens → finding 数比 phase A 显著下降
- commit message 标 "chore: tokenize hardcoded across docs pages (F25 phase C exact-match)"

完成 gate：
- vue-tsc 0 errors
- audit-no-hardcoded-design-tokens findings 数下降 ≥ 30%
- 修改文件数 ≤ 200（hard cap）
- commit + push

---

### Step 5: 完成报告（push 后必写）

不论是否一路 OK，最后写 `docs/internal/_reports/overnight-2026-05-09-summary.md`：

```markdown
# Overnight autonomous run summary 2026-05-09

## 完成步
- [✅/❌] F22: <commit sha / fail reason>
- [✅/❌] F25-A audits: <commit sha / 4 baseline finding counts>
- [✅/❌] F25-B export-icons: <commit sha / icon-fill finding before-after>
- [✅/❌] F25-C tokenize: <commit sha / token finding before-after / files modified count>

## 未完成 / blocker
[各步未通过 gate 的具体原因]

## F25 phase A baseline finding 总览
- audit-icon-fill-currentcolor: N findings
- audit-component-no-inline-svg: M findings
- audit-no-hardcoded-design-tokens: K findings (color M / spacing P / radius Q)
- audit-docs-page-bg-contrast: J findings

## 待 plan owner 决策
- F25 phase D batch tokenize 非 exact-match (no-token 值如 20px / 自定义 hex) → 等用户次日审视
- F25 phase E inline SVG 替换为 Icon component → 等用户次日审视
- F23 / F20 / F24 → 已知不在 autonomous 范围

## 当前 git state
- HEAD: <sha>
- branch: master
- pushed to origin: yes/no
- dirty files: <list 或 0>
```

---

## §2 — Stop 条件汇总

只要满足任一，立即 STOP，不再继续后续 step：
- vue-tsc fail（任何 step 后）
- 任何 pnpm audit:* 出新 error（pre-existing warn 不算）
- 任何 commit 范围超 §0 第 5 条 cap
- generate 类命令异常 exit
- git push 失败（凭据 / 网络）
- 修改了 §0 第 4 条禁止文件

STOP 后**不要 git reset**，保留 dirty 现场让 plan owner 次日诊断。

---

## §3 — 严守约束总览

- ⚠️ F23 / F20 / F24 **不跑**——即使时间充裕也不许扩范围
- ⚠️ §0 全约束硬执行——any violation 立 STOP
- ⚠️ commit message 必含 Co-Authored-By
- ⚠️ 每 step 独立 commit + 独立 push（不要积攒到最后一次 push）
- ⚠️ 完成报告 §1 Step 5 **必写**——这是次日 plan owner 起手第一个读的文件
