|
1 | 1 | # v0.22:前端重设计系列(组件体系 / 布局 / 动效 · L0–L6 全层) |
2 | 2 |
|
3 | | -> 状态:**设计已批准(2026-09-11 用户逐项裁决)· 待实施(批 0 未启动)** |
| 3 | +> 状态:**实施中** —— 批 0-A(设计系统基座)与批 0-B(图标集)已交付并通过评审;批 0 的其余部分(ADR-033~035 · 豁免表纠偏 · 拆 4 个 >600 行文件 · 原语三层)**待立计划** |
4 | 4 | > 权威规格:[2026-09-11-frontend-redesign-design.md](../superpowers/specs/2026-09-11-frontend-redesign-design.md)(513 行,本系列的唯一定义源;本文档只做批次归属与交付记录) |
5 | 5 | > 关联:[UX 市场惯例审计](../Foresight/ux-market-convention-audit.md)(本设计的直接输入)· [长期优化清单](../Foresight/long-term-optimization-checklist.md) · [需求池](../product/requirements-pool.md) · [ADR-010](../adr/ADR-010-gap-filling-ai.md)(本系列修订为退役) |
6 | 6 |
|
|
70 | 70 |
|
71 | 71 | ## 交付记录 |
72 | 72 |
|
73 | | -> 逐批追加。批 0 尚未启动 —— 本节当前为空。 |
| 73 | +> 逐批追加。 |
| 74 | +
|
| 75 | +### 批 0-A · 设计系统基座(2026-09-11,`4e3bfa1a..7148533e`,9 个提交) |
| 76 | + |
| 77 | +**交付**:ADR-032(前端设计系统与 token 层落地)· token **单一真源** `app/scripts/gen-tokens.mjs` + 生成产物 `app/src/ui/{tokens.ts,tokens.gen.ts,tokens.css}` · 对比度纯函数 `contrast.ts`(WCAG 相对亮度 / 对比度 / AA 判定)· **z-index 六档标尺** `zIndex.ts`(17 个散值收敛为 6 档)· 漂移守卫 `tokens.drift.test.ts`(行尾归一,防新检出假阳性)· 对比度守卫(绑定底色而非硬编码常量)。 |
| 78 | + |
| 79 | +**验收**:`tsc` 0 错 · vitest 全绿 · 终局全分支评审 + 修复波 + 受限复审通过。 |
| 80 | +**规格修正**:§4.1 色阶 16 token 的对比度按**实测**回写 —— `--due` 亮档 `#B26A12`(4.06:1) → **`#A05F10`**(4.86 / 5.07),作废值 `3.1:1` → `3.22:1`。 |
| 81 | + |
| 82 | +**过程中纠正的计划错误(6 处,均由实施者或评审者实测抓出)**:ADR 相对链接层级写错 · 生成器「有第二份 WCAG 公式」的不实描述 · 漂移测试逐字节比对在新检出会假阳性 · 对比度守卫测硬编码常量而非底色 · 两处 `normalizeEol` 已分叉 · 断言计数不符。 |
| 83 | + |
| 84 | +### 批 0-B · 图标集(2026-09-11,`25bd5d99..41977303`,12 个提交) |
| 85 | + |
| 86 | +**交付**:`app/src/ui/icons/` —— `types.ts`(几何契约,四种元素白名单、无颜色字段)· `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`)。 |
| 87 | + |
| 88 | +**验收**:`tsc --noEmit` 0 错 · vitest **103 files / 809 tests 全绿**(图标层 21/21)· `docs-check` ✅ · **零新增依赖** · **界面外观零变化**(本批**只定义不消费**:未改任何组件、未替换任何 emoji,消费在批 4)。 |
| 89 | + |
| 90 | +**两项关键实测结果**: |
| 91 | +1. **24 组几何数据零转录漂移** —— 与计划数据逐字比对(域 9/9、动作 15/15,键序一致),并用变异探针证明该比对非空转。 |
| 92 | +2. **棘轮基线为空** —— `src/**/*.ts(x)` 共 327 个文件,`src/ui/icons/` 之外**没有任何内联 `<svg>`** ⇒ 棘轮语义实际为「**一个都不许新增**」(比「不许增加」更强,且无需特赦任何存量文件)。守卫已用探针证明会真实失败。 |
| 93 | + ⚠️ 其第 2 个断言(基线过期项检查)在空基线下**休眠**,不计入当前防护力。 |
| 94 | + |
| 95 | +**过程中纠正的计划错误(9 处,逐条见批台账)**:`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)。 |
| 96 | + |
| 97 | +### 批 0 其余部分(未落地) |
| 98 | + |
| 99 | +规格 §10 的批 0 还包含:**ADR-033~035**(当前 `docs/adr/` 最高为 ADR-032)· 豁免表纠偏 · 拆 4 个 >600 行文件 · 原语三层。**这些不在 0-A / 0-B 范围内**,后续子批次另行立计划。 |
| 100 | + |
| 101 | +### 跨批发现 · 行数红线的测量口径(工具级,影响全项目) |
| 102 | + |
| 103 | +本机 harness 的 `pwsh` 实为 **Windows PowerShell 5.1**(ANSI 码页 `gb2312`),`Get-Content` 会按 GBK 解码 UTF-8 文件并**吞掉换行、把行数少算**(实测:`index.ts` 19→12、`paths.test.ts` 130→112、`NoteListView.tsx` 654→609,最多少 **45** 行)。 |
| 104 | +⇒ **AGENTS.md §3 的「≤300 / >600」必须以字节 `0x0A` 或 `[System.IO.File]::ReadAllLines(path, UTF8)` 计量,禁用 `Get-Content` 数行。** 该失真已造成一次真实险情(据此误判 `IconName` 未导出)。 |
| 105 | +治理侧(口径未定义、15 个 >600 硬限违规、豁免表数值过期)见 [tech-debt/review-2026-09-11.md](../tech-debt/review-2026-09-11.md);工具侧见批 0-B 台账。 |
74 | 106 |
|
75 | 107 | ## 边界(红线延续,全文见规格 §3) |
76 | 108 |
|
|
0 commit comments