Skip to content

Commit 15a4436

Browse files
committed
docs(plans): 0-B 交接批 3/4 的遗留项
0-B 的 4 条验收标准全部满足;这三项是交付后核实出的、影响消费方(批 3/4)的遗留项。 - circle/rect 渲染分支零覆盖:Icon.test.tsx 10 例全部只渲染 notes(2 个 path); 探针实测 10/24(42%)个图标经由未覆盖分支;映射本身经逐行核对是正确的 - Icon.tsx 末分支以 <rect> 兜底而非穷尽 switch + never - paths.ts 的 mergeGroups 重名抛错不可测 -> 裁定接受现状 - 另记棘轮的两个已知边界(空基线下第 2 个断言休眠;排除图标目录必须带 sep)
1 parent e582a9d commit 15a4436

1 file changed

Lines changed: 26 additions & 0 deletions

File tree

‎docs/superpowers/plans/2026-09-11-frontend-redesign-batch0b-icon-set.md‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -862,6 +862,32 @@ git commit -m "test(ui): 内联 svg 棘轮守卫与图标导出面收口"
862862
- **图标集从 24 增至约 44**:其余图标随消费方增补(例如批 4 遇到「筛选」「排序」「折叠」「标签」时新增)。**每增补一个都必须同步 `paths.test.ts` 的首付名单**,让增长被看见。
863863
- **`docs/product/ui-ux-system.md` 的图标节**:规范 §八 宣称「线性 SVG 1.5–1.75px/24px」—— 本批落实为 1.75;批 8 回写规格时同步该节的措辞与图标清单。
864864

865+
## 交接给批 3 / 批 4 的遗留项(0-B 交付后由控制方独立核实,2026-09-11)
866+
867+
> 这三项**不是**本批未完成的项 —— 本批的 4 条验收标准全部满足。它们影响的是**消费方**(批 3 壳层 / 批 4 原语迁移),故写在这里而不是留在线性任务列表里。
868+
869+
**1. ★ `circle` / `rect` 渲染分支零测试覆盖(缺口真实,但代码正确)**
870+
`Icon.test.tsx` 的 10 个用例**全部只渲染 `name="notes"`**(其几何是 2 个 `path`,该文件第 57 行自己断言 `path` 数量为 2),因此 `Icon.tsx` 的 `circle` 分支、`rect` 分支、以及 **`w`→`width` / `h`→`height` 映射**没有任何断言。
871+
- 规模(探针实测):含 `circle` 的 **7** 个(`knowledge` `goals` `settings` `search` `more-horizontal` `clock` `image`)· 含 `rect` 的 **4** 个(`classroom` `action` `image` `stop`)⇒ **10 / 24(42%)个图标经由未覆盖的分支渲染**
872+
- 已逐行核对 `Icon.tsx:41-42` 的映射**是正确的**,故**当前无缺陷**;风险在**将来**:改坏映射会让 10 个图标静默渲染错,而 21 个测试全绿
873+
- ⚠️ **T1 任务评审曾预言「T2 引入 circle/rect 后自然闭合」—— 并未闭合**:T2 引入的是**数据**,`Icon.test.tsx` 自 T1 起从未被修改。**数据存在 ≠ 渲染被验。**
874+
- ⇒ **批 3/4 补两条渲染用例**:各渲染一个 circle 图标与一个 rect 图标,**断言 DOM 属性名**(`width`/`height`/`cx`/`cy`/`r`),而不只是数 `path` 的个数。批 3 的第一个消费方就会用到 `settings`(齿轮,圆构成)与 `search`(⌘K 入口)。
875+
876+
**2. `Icon.tsx` 的末分支以 `return <rect>` 兜底**,而非穷尽 `switch` + `never`:将来加入第 4 种元素时**不会编译失败**,而是静默渲染一个坐标全 `undefined` 的 `rect`。
877+
⇒ **批 3/4 改成 `switch` + `default: assertNever(el)`**(约 5 行)。(登记来源:T1 任务评审 Minor #4。)
878+
879+
**3. `paths.ts` 的 `mergeGroups()` 重名抛错无测试**,且**不修改数据文件就无法构造**该输入(全仓 `app/src` 下没有任何 `toThrow` 指向它)。
880+
⇒ **控制方裁定:接受现状** —— 数据是静态的、重名只可能由人工编辑引入、且抛出即炸不会静默;把它抽成「可注入参数的纯函数」属**成本 > 收益**。
881+
882+
**4. `src/assets/react.svg` 是 Vite 模板遗留的死脚手架**(含 `<svg`,但**不在棘轮口径内** —— 守卫只扫 `.ts`/`.tsx`;看似无任何引用)。
883+
⇒ **并入批 1(删除批)**:核实无引用后删除。此文件在建立本批基线时被发现,不是守卫的漏网。
884+
885+
**另记:棘轮守卫的两个已知边界**(均已登记,非缺陷):
886+
- 空基线(实测确实为空)下,第 2 个 `it`(基线过期项检查)**恒真休眠**,**不计入当前防护力**;批 4 迁完存量后若需特赦个别文件,它会立刻派上用场。
887+
- 排除图标目录时**必须比较 `ICONS_DIR + sep`**(提交 `c22d2bda` 修正):裸 `startsWith(ICONS_DIR)` 会把 `ui/icons-legacy/` 这类**同前缀兄弟目录静默豁免** —— 守卫看起来在守、实际有洞。
888+
889+
**批 3 可用性结论**:24 个图标**恰好覆盖壳层需求**,无缺口 —— 顶栏 8 项 = 7 域 + AI 对话(即 9 个域图标中的 8 个),第 9 个 `settings` 正是右上**齿轮**,⌘K 入口由 `search` 承担,溢出与采集态由 `chevron-*` / `play` `pause` `stop` 承担。其余约 20 个按规格「随消费方增补」。
890+
865891
## 自审记录
866892

867893
**规范覆盖**:本计划对应规范 §4.2「图标」行(24 网格 / 描边 1.75 / 尺寸 16·20·24 / `currentColor` / 小圆角)与 ADR-032 决策 6。§11 验收第 4 条的「CSS 变量」部分与本计划无关(图标不是 token);第 11 条(`tsc`/`vitest` 全绿)在 Task 1/2/3 末尾各验证一次。

0 commit comments

Comments
 (0)