Skip to content

Commit 5e7f300

Browse files
committed
docs(versions): 补 0-B 终局评审结论与代码缺陷记录
- 0-B 范围与提交数更新为 25bd5d9..2fbf81d / 21 个 - 补终局全分支评审结论:READY_WITH_FOLLOWUPS,0 Critical / 0 Important,验收 4/4 - 补评审新发现的代码缺陷(paths.ts 原型链,已修 ecbaf36) - 补记录 2 处被评审推翻的控制方结论(mergeGroups 可测 / rect 兜底非静默)
1 parent 2fbf81d commit 5e7f300

1 file changed

Lines changed: 7 additions & 1 deletion

File tree

‎docs/versions/v0.22.md‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,19 +84,25 @@
8484

8585
**过程中纠正的计划错误(6 处,均由实施者或评审者实测抓出)**:ADR 相对链接层级写错 · 生成器「有第二份 WCAG 公式」的不实描述 · 漂移测试逐字节比对在新检出会假阳性 · 对比度守卫测硬编码常量而非底色 · 两处 `normalizeEol` 已分叉 · 断言计数不符。
8686

87-
### 批 0-B · 图标集(2026-09-11,`25bd5d99..c22d2bda`,14 个提交)
87+
### 批 0-B · 图标集(2026-09-11,`25bd5d99..2fbf81d4`,21 个提交)
8888

8989
**交付**:`app/src/ui/icons/` —— `types.ts`(几何契约,**三种**元素白名单 `path`/`circle`/`rect`、无颜色字段)· `paths.domain.ts`(域 **9**)+ `paths.action.ts`(对象与动作 **15**)= **24 个自绘图标** · `paths.ts`(合并注册表 + 启动期**重名检测** + **零列名字面量联合 `IconName`**)· `Icon.tsx`(唯一渲染入口:`currentColor` / 默认 `aria-hidden` / 有 `label` 时角色转为 `img`)· `index.ts`(导出面 10 项)· 三个测试文件共 **21 例** · **内联 `<svg>` 棘轮守卫** `no-inline-svg.test.ts` · `app/src/node-builtins.d.ts` 扩写(无 `@types/node` 前提下的最小环境声明,不用 `any`)。
9090

9191
**验收**:`tsc --noEmit` 0 错 · vitest **103 files / 809 tests 全绿**(图标层 21/21)· **`cargo test` exit 0**(2337 passed / 0 failed / 6 ignored;本批零 Rust 改动,属回归确认)· `docs-check` ✅ · **零新增依赖** · **界面外观零变化**(本批**只定义不消费**:未改任何组件、未替换任何 emoji,消费在批 4)。
9292

93+
**终局全分支评审(2026-09-11):`READY_WITH_FOLLOWUPS` —— 0 Critical / 0 Important。批次验收 4 条经评审者逐条独立判定,4/4 满足;三个历史静默缺陷(网格测试空转、`IconName` 塌回 `string`、棘轮同前缀漏判)均已闭合并由评审者独立复现。未发现新的 Critical/Important 级静默失败模式。** 评审提出的 follow-up 已全部写进计划「交接给批 3 / 批 4 的遗留项」节,无需本批返工。
94+
95+
**评审新发现的代码缺陷(1 处,已修 `ecbaf364`)**:`paths.ts` 的重名检测 `if (merged[name])` **走原型链** —— 名为 `constructor` 的图标(命名规范恰好放行)即使毫无重名也会抛「图标重名」,属误导性的启动期崩溃。修为 `Object.prototype.hasOwnProperty.call(...)`(**不用 `Object.hasOwn`**:它是 ES2022,而本仓 `target/lib` 为 ES2020)。已用真实模块探针自证:插入 `constructor` 图标后模块**正常导入**(旧代码则导入期抛错、全灭)。
96+
9397
**两项关键实测结果**:
9498
1. **24 组几何数据零转录漂移** —— 与计划数据逐字比对(域 9/9、动作 15/15,键序一致),并用变异探针证明该比对非空转。
9599
2. **棘轮基线为空** —— `src/**/*.ts(x)` 共 327 个文件,`src/ui/icons/` 之外**没有任何内联 `<svg>`** ⇒ 棘轮语义实际为「**一个都不许新增**」(比「不许增加」更强,且无需特赦任何存量文件)。守卫已用探针证明会真实失败。
96100
⚠️ 其第 2 个断言(基线过期项检查)在空基线下**休眠**,不计入当前防护力。
97101

98102
**过程中纠正的计划错误(10 处,逐条见批台账)**:`index.ts` 的真实 TS2459 · `IconName` 偏差裁定**撤回**并改为立即修 · `ACTION_ICON_PATHS` 用了计划自己明令禁止的宽注解 · `DOMAIN_ICON_PATHS` 缺 `satisfies` · 「`as const satisfies` 会 TS1360」不成立(实测不报错)· 圆越界举例方向写反 · 类型断言片段缺 `void`(`noUnusedLocals` 下 TS6133)· Task 3 的守卫探针位置无效(写在被设计性排除的目录内)· Task 3 守卫代码在本仓编译不过(缺声明,`tsc` exit 2)· **棘轮守卫用裸字符串前缀排除图标目录 ⇒ 同前缀兄弟目录(`ui/icons-legacy/`)被静默豁免**(计划原文如此,由终局任务评审用双针实测抓出,见提交 `c22d2bda`)。
99103

104+
**另有 2 处「控制方在交接单里给出的结论」被终局评审推翻并已更正**(记录在案,勿重犯):① 「`mergeGroups` 重名不可测 ⇒ 接受现状」——**错**,评审者用 `vi.doMock + vi.resetModules` 在不动数据文件下即复现该抛错(本仓已有 46 个测试文件用 `vi.mock`),结论改为**可测、应补**;② 「`Icon.tsx` 的 `<rect>` 兜底会静默渲染坐标全 `undefined`」——**错**,向联合加入第 4 种元素必然 **5×TS2339 编译失败**,故 `switch + assertNever` 只是可读性收益、**批 3/4 不必排期**。两处已改写进计划交接单。
105+
100106
### 批 0 其余部分(未落地)
101107

102108
规格 §10 的批 0 还包含:**ADR-033~035**(当前 `docs/adr/` 最高为 ADR-032)· 豁免表纠偏 · 拆 4 个 >600 行文件 · 原语三层。**这些不在 0-A / 0-B 范围内**,后续子批次另行立计划。

0 commit comments

Comments
 (0)