# Prompt — T2 样板 Badge follow-up cleanup（2 件小修）

> **角色**：executor
> **范围**：T2 样板 Round 2 复审暴露的 2 件修复——α audit regex bug + FigmaMembersGrid cell 背景层。两件都是 1 行级修改，不扩散。
>
> ⚠️ **不要 commit / 不要 git add**——dirty 累积到 M1。
> ⚠️ 完成后 **STOP**，按底部"完成报告"格式回报。
> ⚠️ **不扩范围**：不动 BadgePage / Badge.vue / generator / types.ts / 其它任何文件，除下方明示的 2 个文件 + 重跑产物。
> ⚠️ 不为某 variant 加视觉特例（反模式 #2），不漂移 token 真源（硬规则 #2）。

---

## §1 — 必读输入（最小集）

1. [`AGENTS.md`](../../../AGENTS.md) — 硬规则 #2 / #4
2. [`docs/meta-rules.md`](../../meta-rules.md) — 反模式 #2 (打补丁) + 触发器 G
3. [`figma-sync/audit-page-t2-sample.mjs`](../../../figma-sync/audit-page-t2-sample.mjs) — α audit 在 line 172
4. [`playground/docs/components/FigmaMembersGrid.vue`](../../../playground/docs/components/FigmaMembersGrid.vue) — cell bg 在 `<style scoped>` `.figma-members-grid__cell`
5. [`src/tokens/variables.css`](../../../src/tokens/variables.css) — 验 `--bg-layer1` (#141414) / `--bg-layer3` (#262626) / `--line-deep` (#353535) 各自值
6. [`docs/internal/t2-sample-audit-report.md`](../../t2-sample-audit-report.md) — 当前 verdict 基线（修后 4 verdict 必须不变）

---

## §2 — 修复 1：α audit regex bug

**位置**：[`figma-sync/audit-page-t2-sample.mjs:172`](../../../figma-sync/audit-page-t2-sample.mjs#L172)

**当前 bug**：

```js
const siteThemeMatch = template.match(/:site-theme\s*=\s*["']["'](dark|light)["']["']/)
```

`["']["']` 是 2 个连续字符类，要求 4 个引号字符相连——永远抓不到 `:site-theme="'dark'"`（实际只有 1 外引号 + 1 内引号 + 内容 + 1 内引号 + 1 外引号）。

**Badge 不触发**（α 在 line 156-158 早返 N/A），但 **Tooltip / Select 扩展轮一定触发**——会误报 "Cannot statically resolve siteTheme"。

### 修复要求（plan owner 锁语义，executor 提议正则）

修后的 regex 必须**正确匹配下面 2 种 Vue binding 形态**（取出 `'dark'` / `'light'` 字面量）：

```vue
<FigmaMembersGrid :site-theme="'dark'" />
<FigmaMembersGrid :site-theme="'light'" />
```

可选支持（非必须，但若简单同时 cover 也可）：
- 单引号外、双引号内：`<FigmaMembersGrid :site-theme='"dark"' />`

**不要求**支持非字面量动态值（`:site-theme="someRef"`）——dynamic 会落到 line 174 `if (!siteTheme)` 分支，按 D16 裁定保留 heuristic warn 路径。

### 自验证（**STOP 报告里必须含**）

修完跑下面 3 条 sanity test 贴在报告：

```bash
node -e "
const re = /<修后的 regex 写在这里>/;
const cases = [
  ':site-theme=\"\\'dark\\'\"',
  ':site-theme=\"\\'light\\'\"',
  ':site-theme=\"someRef\"',
];
for (const c of cases) console.log(JSON.stringify(c), '→', c.match(re)?.[1] ?? null);
"
```

**预期输出**：
- `:site-theme="'dark'"` → `dark`
- `:site-theme="'light'"` → `light`
- `:site-theme="someRef"` → `null`

---

## §3 — 修复 2：FigmaMembersGrid cell 背景层

**位置**：[`playground/docs/components/FigmaMembersGrid.vue`](../../../playground/docs/components/FigmaMembersGrid.vue)，`<style scoped>` 内 `.figma-members-grid__cell` 规则的 `background` 值

### 根因诊断（plan owner 已定）

Figma 真源 Black variants 用 `--line-deep` (#353535)；canonical Badge.vue 完全对齐（`Black: 'var(--line-deep)'`）——**code 零漂移**。

视觉消失原因：dark theme 下 `--bg-layer3` (#262626) 与 `--line-deep` (#353535) 对比度仅 ~15%，Black badge 几乎融背景。Figma frame 上下文 bg 更深（≈ `--bg-layer1` `#141414`），所以原图可见。

### 修复

把 `.figma-members-grid__cell` 的 `background: var(--bg-layer3)` 改成 `background: var(--bg-layer1)`。

**仅此一处改动**——cell border / padding / radius / 其它样式**不动**。

**不要**：
- ❌ 给 Black variant 加特例（反模式 #2）
- ❌ 改 Badge.vue palette（硬规则 #2，Figma 真源就是 line-deep）
- ❌ 改 token 系统（跨组件影响）
- ❌ 加 outline / shadow / inset highlight 等"补救"——单点 token swap 即可

---

## §4 — 重跑 + 验收

按顺序跑：

```bash
# 1. typecheck（注意：用 vue-tsc，不是 pnpm typecheck）
pnpm exec vue-tsc --noEmit

# 2. 重跑 generator（无 schema 改动，输出应字面相等，差异仅 generatedAt 时间戳）
node figma-sync/generate-docs-figma-members.mjs Badge

# 3. 重跑 audit（Badge case 4 verdict 应与基线相同：α=N/A · β=pass · γ=pass · δ=pass）
node figma-sync/audit-page-t2-sample.mjs BadgePage

# 4. 视觉验收
pnpm dev
# 浏览器开 BadgePage → Figma Coverage 段：
#   - 5 黑色 variants 现在应有可见 badge 形态（filled 灰色块 / line 灰色描边）
#   - 其它 4 颜色（Green/Blue/Orange/Red）依旧饱和可见
#   - cell border 在更深 bg 上仍可见（验证不会因 layer 调整把 border 也淹了）
# (executor 截图给 plan owner)
```

### §5 — 验收清单

- [ ] 修复 1 的 regex 通过 §2 自验证 3 条 case（dark→`dark`、light→`light`、动态→`null`）
- [ ] 修复 2 仅改 cell `background` 一处，没动其它 CSS / 任何 template / script
- [ ] `pnpm exec vue-tsc --noEmit` 0 错误
- [ ] generator 输出 `badge.ts` 与之前内容一致（仅 `generatedAt` 时间戳变化）
- [ ] audit 重跑：α=N/A · β=pass · γ=pass · δ=pass，findings 全 0（与 [`docs/internal/t2-sample-audit-report.md`](../../t2-sample-audit-report.md) 基线一致）
- [ ] dev 视觉验收：Black variants 5 个 cell 都可见（提供截图）
- [ ] 没 commit / 没 git add
- [ ] 没扩范围（只动 audit-page-t2-sample.mjs + FigmaMembersGrid.vue 两个文件 + 重跑产物 badge.ts / t2-sample-audit-report.md）

---

## §6 — 完成报告（按下方格式回报）

```
## Follow-up Cleanup 完成报告

### 改动文件
- figma-sync/audit-page-t2-sample.mjs (修改 line ~172, 1 行 diff)
- playground/docs/components/FigmaMembersGrid.vue (修改 cell bg, 1 行 diff)
- figma-data/normalized/docs-figma-members/badge.ts (重跑覆写, 仅 generatedAt 变化)
- docs/internal/t2-sample-audit-report.md (重跑覆写, 仅 checkedAt/Generated at 变化)

### 修复 1 — α regex
新 regex: `<贴出来>`
自验证 3 case 输出:
- ":site-theme=\"'dark'\"" → "dark"
- ":site-theme=\"'light'\"" → "light"
- ":site-theme=\"someRef\"" → null

### 修复 2 — Grid cell bg
diff: -background: var(--bg-layer3); +background: var(--bg-layer1);

### 验证结果
- vue-tsc: 0 错误
- generator 重跑: 输出字面 diff（应仅 generatedAt 时间戳）
- audit 重跑 4 verdict: α=<...> · β=<...> · γ=<...> · δ=<...> · findings 各=<...>
- dev 视觉: <截图路径或描述; 注明 Black variants 是否可见>

### 验收 self-check
- [ ] regex 自验证 3 case OK
- [ ] cell bg 仅 1 处改
- [ ] vue-tsc 0 错
- [ ] generator badge.ts 仅 generatedAt diff
- [ ] audit 4 verdict 与基线一致
- [ ] dev Black variants 可见
- [ ] 没 commit
- [ ] 没扩范围

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

STOP — 等 plan owner 复审 + 截图后给下一步指示（Tooltip 扩展或 milestone）。
```

---

## §7 — 严守约束总览

- ⚠️ **不要 commit / 不要 git add**
- ⚠️ 仅动 2 个源文件 + 重跑 2 个产物文件
- ⚠️ regex 必须通过 §2 自验证 3 case，不通过就修到通过
- ⚠️ Grid cell bg 单点 token swap，不要"顺手"改其它样式
- ⚠️ audit 4 verdict 必须与基线一致；如有 verdict 变化先停下报告
- ⚠️ 完成 STOP，按 §6 格式回报
