# Next Session Pickup — System-Design-Review 修复批次执行

> 生成：2026-06-10 session 收尾。这是 **review→fix 阶段**任务（元层审计已完成，现按批次修）。
> 起手第一句：`按 docs/internal/_plans/next-session-pickup-2026-06-10-system-review-fixes.md 继续执行 system-design-review 修复批次`
> ⚠️ 与 [Notification 双轴重构 pickup](./next-session-pickup-2026-06-10-notification-two-axis-build-and-sync.md) 是**两条并行 track**——本 pickup 是审计修复，那份是 Notification 组件重构（另一 session 在做，勿碰）。

---

## 0. 起手必读
1. 6-step onboarding（FIGMA_AS_SOURCE_OF_TRUTH → STATUS → PROJECT_GOAL → tracker → AGENTS §0-10；本任务无对应 backlog entry）。
2. ⭐ **[`docs/internal/_reports/system-review-2026-06-10.md`](../_reports/system-review-2026-06-10.md)** —— 本任务 spec 真源，含全部 finding（P1×9 / P2×9 / INFO×5）+ 每条「文件:行」证据 + 建议。

## 1. 背景
上个 session 做了元层合理性审计（6 维度 Workflow fan-out + 对抗 verify，29 agent），产出上面那份报告。Owner 已认可处理方案，现按批次直接修。

**病灶（系统性）**：master 无 server-side gate（CI 只 tag 触发、无 pre-push、Owner 直 commit + `--no-verify`）→ 大量"机制兜底"承诺建在可绕过的本地 pre-commit 上。最毒实例：`AGENTS.md:463` 谎称 D/E/F/G 有 pre-commit 兜底（A/B/C/F 四维共识，实际只 E/H/I 在 pre-commit）。

## 2. 执行模型（Owner 已定）
- **Claude Code（plan owner）自己直接执行，不借 Codex** —— 全是 infra-tooling（.husky/hook、publish.yml、audit `*.mjs`）+ docs，属 AGENTS.md task-type 矩阵 "Infrastructure 小 CLI/hook path-B" + "docs owner-direct" 例外区，不碰 `src/canonical|components`/token。
- 仅当某条 fix 实际要改 `src/canonical | src/components | tokens` 时，才为那块单独写 executor file-based prompt。
- **Owner-direct master**：每批做完先跑对应 gate 出 exit code 证据 → Owner ack → 再 commit。**永不自 commit**。
- **changeset**：内部 gate/hook/CI/docs 不影响 consumer 产物 → 不写；仅触及 `eslint-plugin/` 或 `templates/` 才补。

## 3. 四个待 Owner 确认项（起手先问，给推荐默认让 Owner 一次拍）
| # | 决策 | 推荐默认 |
|---|---|---|
| ① | **P1-06 a11y**：43 条 color-contrast 违例是 designer-pending known debt → a11y gate | 现只做**非阻塞 report**，hard gate 推迟到 contrast 清零（**最该先敲定**，决定 P1-06 这轮做还是延后）|
| ② | **P1-02 on:push CI** 触发范围 | 路径过滤跳 docs-only（仅 `src/** scripts/** figma-sync/** figma-data/** package.json` 命中触发）vs 全量触发 → 推荐路径过滤 |
| ③ | **P1-05 三视图 scope** | 仅交互组件（Button/Input/Select/…），展示型（Icon/Logo/Divider）豁免 vs 全量 33 页 → 推荐仅交互组件 |
| ④ | **P1-08 onboarding 分层** | 先出方案审，不直接落 |

## 4. 批次顺序（1→2→3→4，依次直处理，批 4 不入 backlog）

### 批 1 — Enforcement 真相对齐（先做，最高 ROI）
- **P1-02**：`publish.yml` 加 `on.push.branches:[master]` 跑 audit-matrix（不 publish）。默认路径过滤（见②）。
- **P1-01**：把 D/F/G（`canonical-compliance` / `render-verification-coverage` / `figma-library-vs-canonical`）挂进 `.husky/pre-commit` 条件 gate（staged 命中 `src/canonical|components/*.vue` 跑），与 E/H/I 同模式。**前置自检**：先跑 `pnpm audit:self-audit-phase2` 确认 D/F/G 当前 exit 0；有 pre-existing 红 → STOP 报 Owner，先 backlog/修再挂 gate（[[feedback_audit-pre-commit-gate]]）。**只接 D/F/G 三条**，不接整条 self-audit-phase2（避免 E/I 双跑）。
- **P1-03**：F/G 的 `SelectBoxBase/InputBoxBase/PillCounter` 豁免名单抽成共享 `figma-data/audit-allowlist/canonical-exempt.json`，两脚本 import。
- **P1-04**：`scripts/audit-status-consistency.mjs` 加 C4：解析 `backlog.md` `## Active` 段非闭合 `###` 计数 vs STATUS `Backlog (active) (N)`，drift → exit 1。
- **顺手 docs（owner-direct）**：`RELEASING.md` 10→15 + 补 render-gate job（P1-09）/ AGENTS 硬规则表加 enforcement 层级列（P2-04）/ STATUS:33 链接 `../`→`./`（P2-06）/ PROJECT_GOAL:108-127 去 frozen-mirror（P2-07）/ "7 条工作原则"→"9 条" 改 `AGENTS:115`+`FIGMA_SOT:120`（INFO-02）/ 删 STATUS:6 stale stale-claim（INFO-03）/ onboarding 步数统一 7（INFO-01）/ `component-attributes` 注释为 manual baseline 非 gate（P2-03）。
- 做完批 1 后 `AGENTS:463` "pre-commit 兜底" 声明自然成真（D/F/G 真有 gate），无需写降级文字。

### 批 2 — 契约 gate 补强
- **P1-06** ⚠️：a11y 接 CI，但受 contrast 债限制（见①），现只做非阻塞 report。
- **P1-05**：`audit:docs-site` 加三视图（Design Spec/Status Matrix/Use Cases）覆盖检查接 prepublishOnly。scope 见③。若需给 `.vue` 页补内容 → 那部分 visual，commit 需 `VISUAL_COMMIT_APPROVED=1` + Owner 看过。
- **P2-01**：prepublish 加 "`.changeset/*.md`（非 config）应为空" 检查。

### 批 3 — Onboarding 重构（需 Owner taste，先出方案审不直接落）
- **P1-07**（STATUS/AGENTS 双链路统一为单一 SoT）+ **P1-08**（核心导航层 full-Read / 大体量真源改按需）。默认分层：full-Read = FIGMA_SOT/STATUS/PROJECT_GOAL/当前pickup（~40KB）；按需 = tracker/AGENTS/mockup-conventions/code-conventions/meta-rules（标题+索引必读，命中任务再深读 section）。

### 批 4 — 顺路消化（不入 backlog）
- **P2-02**（sync 中断 doc note：中断后必须完整重跑，勿手 commit 半成品 figma-data）
- **P2-05**（DS 加 `eslint.config.js` dogfood 自研 plugin lint `src/canonical|components` + 挂 pre-commit/prepublishOnly）
- **P2-08**（组件状态 empty/loading/error manifest+audit，或 QA 视图 spec 显式 scope）
- **P2-09**（mockup skill 收尾 checklist 接 `audit:mockup-conformance --file <key>`；STATUS/changeset 把 G4 "master gate" 措辞降为 "手动总闸"）

## 5. 纪律红线
- **IN-FLIGHT**：另一 session 在做 Notification 双轴重构（`status→form+type`，未 publish/未进 code）。**不碰 Notification 组件 + status 轴任何文件**。
- **并行 session dirty 文件别动**：`.claude/settings.json`、`skills/shared-vocab-rules/vocabulary.md`。
- hooks/scripts/CI/docs 非 visual 无需 `VISUAL_COMMIT_APPROVED`；一旦动 `.vue/.css/.svg` 需 `VISUAL_COMMIT_APPROVED=1` + Owner 看过。
- **接任何新 gate 前先确认它当前 exit 0**（pre-existing 红必须先 backlog/修，不能挂 gate 让 master 变红）。
- 每批 commit 前 Owner ack；commit message 按 AGENTS.md 结构化 body（改动内容 + 测试 exit code，据实写）。

---
**从「四个确认项」起手，Owner 拍完即进批 1。**
