Skip to content

Commit 7af0789

Browse files
committed
docs(specs): 加注批 8 的三条主线终态
1 parent 9ef6a43 commit 7af0789

1 file changed

Lines changed: 46 additions & 0 deletions

File tree

‎docs/superpowers/specs/2026-09-11-frontend-redesign-design.md‎

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -822,6 +822,18 @@
822822
| **8 治理收口** | 豁免表终态 · 回写 `ui-ux-system.md` / `theme.md` · 新增动效规范章节 · 需求池同步 | 11 条验收全达标 |
823823
| ↳ 批 1 的收口(批 1 完成时更新) | **22 条命令已删**(本表原写 21 + #41 `open_capture_float` 改判;`git diff --name-status --diff-filter=D e96ab63d HEAD` = **10 个文件**)· **补缝三连连带模块已删**(`ai_judge` + `AiMockAdapter::enhance` + `ai_protocol.rs` 的 `AiEnhance*` 半边,**−26 用例** = 9+7+10;另 T3 整族删除 **−25**、T6 **−4**、T7 **−4** ⇒ 全批 **−59**)· **ADR-010 已废弃**(文件保留)· **`structuredBlocks` 死文案已清**(**整模块存废登记给批 7**) | 收口门禁(2026-09-12 实测):registry **312/312/0** · `cargo test` **2300/0/6** · `cargo build` 0 `dead_code` · clippy **19**(集合与开工基线 identical)· vitest **124 文件 / 1124 用例** · `tsc` 0 错 · `line-limits --full` **0 / 123 / 123** · `docs-check` exit 0 |
824824

825+
> **🔻 批 8 终态就地加注(2026-09-13 · T21;上格与上面各 `>` 块的原文一字未改)** —— 上表 **批 8 行**(`| **8 治理收口** | 豁免表终态 · 回写 ui-ux-system.md / theme.md · 新增动效规范章节 · 需求池同步 | 11 条验收全达标 |`)有两处**不得照字面读**:
826+
> - 🔴 **「11 条验收全达标」= §11 的 11 条整册验收**,**不是**批 8 的行内验收。批 8 计划 `## Global Constraints 二` 逐字写死:「**本批的「三条验收」= 三条主线的验收**……**不是**规格 §11 的 11 条整册验收 —— 那 11 条**逐条登记去向**」⇒ 🔴 **批 8 只兑现与三条主线直接相关的部分**,**不得**声称「11 条全达标」。
827+
> - 🔴 **「新增动效规范章节」已在批 6 落地**(`docs/standards/motion.md`,`bffed928`)⇒ 留批 8 的是 `docs/product/ui-ux-system.md` / `theme.md` 的**四层动效 / 三档强度回写**,🔴 **而批 8 仍未做**(它只回写了「审校模式」那一节:`b077d530` · `ffb7e28a`)⇒ **登记为下一批输入**。
828+
> - **批 8 的三条主线兑现度(逐条机器读数;出处 = [`docs/versions/v0.22.md`](../../versions/v0.22.md) 的「批 8 · 治理收口与三条主线」节)**:
829+
> · **主线一**(「带证据三轨」+「审校模式」两条能力)✅ **成立** —— 注册表第三项落地:`app/src/views/registry.ts` 的 `FROZEN_VIEW_KEYS.note` **由 2 键变 3 键** = `["raw", "cardflow", "evidence"]`(T21 于 2026-09-13 逐行直读);全量 vitest **235 文件 / 2300 passed / 0 failed / 0 pending**(T21 亲测,时点 **2026-09-13T17:34+08:00**)。
830+
> · **主线二**(观感/像素面「收编,不立项」)✅ **成立(含「有读数 ≠ 已统一」的限定)** —— 仪器 `scripts/viewport-probe.mjs` **298 行**在盘、按需入口 `app/package.json` 的 `check:visual` 在盘、仪器自检 **9/9 ✅**、**14 条观感欠账逐条有读数或具名归属**。
831+
> · **主线三**(治理余项)✅ **四条 4/4 落地** —— **CI 挂载**(`pr-check.yml` 的无条件 job + 散文探针单列 step)· **`scripts/validate-all.mjs` 已删** · **`SURFACE_TAG_REGISTRY` 的键改为 `(file, tier)`** · **`subject ≤50` 已装上**(`commitlint.config.js`)。
832+
> - 🔴 **段 8f 的四项用户裁决(U1–U4)另计,不并入三条主线**:**U1 = 音频两条都修** ✅(配置通道 + 面板真开关 + 删会话级联清音频;命令注册表 **311 → 312**,依据**用户裁决 A**)· **U2 = 只移除凭据槽的代码路径** ✅(**已存密钥数据保留、应用内不可达**)· **U3 = `docs/tech-debt/` 归档到 `docs/archive/2026-09-13/`** ✅ · **U4 = 观感按需入口入库 + 触发条件写死** ✅(**不接 husky、不进 CI**)。🔴 **U5(真机 / WebView2 冒烟)沿用「跳过」** ⇒ **7 条真机类继续登记、不假装完成**。
833+
> - ⚠️ **两条口径注**:① **本批不新增门禁成员**(八闸集合不变;`check-exemption-prose` 只以 **CI step** 转正、**不进八闸对账**)② 🔴 **批 8 的提交留在本地、未 push**(用户前提;「不 push」是本批的唯一强制约束)。
834+
> - 🔴 **本节的自引用边界**:上格那「批 8 行」所在的本文件**没有**在批 8 内被改写成「已交付」—— 本注是**追加**,`−` 列为 **0**(承 [`docs/standards/documentation.md`](../../standards/documentation.md) 第四部分之补)。
835+
836+
825837
> **批 0–1–2 期间界面几乎不变 —— 这是设计意图,不是失败。** 批 0–1 交付的是「让后面每一批都能一次改对所有地方」的能力。观感从批 4 开始变,骨架在批 3,内容在批 5,手感在批 6。
826838
827839
> **实施计划的粒度**:本规格覆盖 9 批,**不建议一次性生成全部 9 批的实施计划**。正确做法是每批各自一份实施计划,且**后一批的计划在前一批验收通过后再写** —— 因为批 3 之后的细节依赖批 0–2 的实测结果(尤其是包体治理量出的瓶颈清单与拆件后的真实文件结构)。
@@ -927,6 +939,14 @@
927939
> - 🔻 **口径更正(2026-09-13 · T21 补轮;上一行的**实测域**收窄,原文保留)**:上一行逐字写的「**全仓**」是**字面假命题** —— 它**包含本行自身**(本行就含该串)⇒ **自我指涉**。🔴 **T21 于 `53bd0759` 实测**(入库域 = `git ls-files`,**1,614** 文件;口径 = 行含子串,剥注释抹等长空白保偏移):**`app/src/**`(生产 + 测试)= RAW 0 行 / 剥注释 0 行 / 0 文件** ✅ · **`app/src/**` 之外 = RAW **16** 行 / 剥注释 **6** 行 / **3** 文件,**全部在 `docs/**`**(按顶层目录 `docs:16`)—— **含本行自身**。
928940
> - ⇒ 🔴 **正确表述**:**「`app/src/**`(生产 + 测试)= 0 处 / 0 文件」**(这才是「实现未做」的**有效证据域**);**`app/src` 之外仍有 16 行 / 剥注释 6 行的文档提及**,那**不是实现**。**上句的「全仓」一律按本注收窄读**(本页 §7.4 的 `:538` 早已按 `app/src/**` 写,**两处现口径一致**)。
929941
> - ⚠️ **探针卫生教训(本轮实测复现)**:该声明的**阴性对照** `zzz_no_such_symbol_zzz` 在**入库域**命中 **7 行 / 5 行(剥注释)/ 3 文件(全在 `docs/**`)** ⇒ 🔴 **对照串被自己的产物污染**(它被写进了报告与文档)⇒ **阴性对照一旦入库就不再有效**;改用**每次现造的随机串**,或**把对照域明确限定在 `app/src/**`**。(阳性对照 `useTriTrackAlign` 在 `app/src` = **17 行 / 12 行(剥注释)/ 6 文件** ⇒ 非假 0。)
942+
> **🔻 批 8 终态就地加注 · 本条上面那句「批 8 输入」已闭合并给终态读数(2026-09-13 · T21;上面各块原文一字未改)**:
943+
> - 🔴 **第三种「带证据三轨」已于批 8 交付**:模型层 `app/src/views/note/noteEvidenceModel.ts`(**202 行**)+ 视图片 `app/src/views/note/NoteEvidenceTrackView.tsx`(**178 行**)+ 容器取数 `app/src/hooks/useNoteEvidence.ts`(**157 行**),提交 = `de1f43aa` · `8cc627de` · `08b1afda` · `e493eac8`(行数为 T21 于 2026-09-13 用 `countLines()` 口径实测)。
944+
> - 🔴 **笔记视图键由 2 键变 3 键**:`app/src/views/registry.ts` 的 `FROZEN_VIEW_KEYS.note` 逐字 = `["raw", "cardflow", "evidence"]`(T21 逐行直读)。
945+
> - 🔴 **但本条验收的口径不变,仍是「各 ≥2 种」** ⇒ 会话 **5** / 笔记 **3**,`3 ≥ 2` ✅;**不得**把「终态 3」写成「本条要求 3」或「本条因批 8 而改变」。
946+
> - **两条红线裁决的落地(承 §7.4 §D 的批 8 加注)**:① **段级身份走「派生序号」**(**零 schema 改动**)② **不开新 command**(复用既有 `get_session_detail` 已返回的 `segments` + `ocr_blocks`)。
947+
> - 🔴 **仍未做 / 未覆盖**:**真机 / WebView2 冒烟由用户裁决跳过(U5)** ⇒ 本条实现面的「端到端」**止于 jsdom / Rust 单测层**;**像素 / 观感一致性未验证**(`≥2` 是形式数,不是「两种形式看起来对」)。
948+
949+
930950
7. **47 条未接线命令逐个有结论**,无「不知道」。
931951
> **进度(批 1 收口,2026-09-12)**:47 条中 **22 条已删**(含 #41 改判)、**25 条处置已定但未执行**(补 UI 12 → 批 7 · 登记不排期 7 → 批 7/无期 · 撤下 IPC 3 → 批 7 · 有意保留 3 → 无期)。**无「不知道」**。批 1 计划 §现状普查第三节给出 47/47 的逐条处置表;删除后复算 = registry 312 / 前端零引用 **25** 条(= 47 − 22,逐条与上列归属一致)。
932952
> **进度(批 7 收口,2026-09-13)**:registry **313 → 311**(−3 撤下 IPC + 1 新增 `remember_video_profile_tier`)· 前端零引用 **24 → 11**(**实测值见收口报告**;口径 = 上格那 47 条中**仍在 registry 者 22 条**里**前端生产零引用**的条数;仪器 = 五形态并列带引号定界字面量探针,正控 `invoke(` 命中 **68** 个生产文件、负控 **0**;`kb_search` 已交付的 1 条不计入)· **本次加注不改上格原文**。
@@ -936,6 +956,13 @@
936956
> - 🔻 **收口更正(2026-09-13 · T21 追加轮;上面三条原读数一律保留为「T21 首轮」的历史读数)**:`update_fragment_group`(#46) **已在批 7 内由 T23 补做**(`125eec85` + `5f662811` + `5d59e332`;T21 独立复测 **PROD 0 → 1**,落点 `components/FragmentGroupAction.tsx:92` 逐字 `invoke("update_fragment_group", { fragmentId, groupId: target })`)⇒ 🔴 **残留 1 条 → 残留 0 条**;🔴 **前端零引用 11 → 10**(口径不变:上格那 47 条中**仍在 registry 者 22 条**里的前端生产零引用数)⇒ **有引用数 11 → 12**(其中本批实做补 UI = **11 条**:T20 的 6 + T23 的 1 + T18/T19 的 4;`kb_search` 是第 12 个有引用者,但它属批 3 交付)。⇒ 上面那条第 4 项(「残留 1 条」)的**处置改为「已交付」**,`§9` 该行的状态更正注已在表末就地更正。
937957
> ⚠️ **批 1 的实测更正(供批 2+ 引用本条时注意)**:计划的「不删清单」在本批被**证伪五次**(`artifact_templates` 族 / `AiEnhance*` 半边 / `vad_threshold_slot` 三符号 / `spec_from_kind` / 调用点计数),根因是**用「看起来还有人用」代替「删除后可达性」**作保留判据 ⇒ 后续批次判断连通性请照「收口回写」节的四条约纪律(计划 `docs/superpowers/plans/2026-09-11-frontend-redesign-batch1-deletions.md`)。
938958
8. **标签能写进去**且标签过滤面板有内容;**画面档位选完真的生效**且跨会话记住。
959+
> **🔻 批 8 终态就地加注 · 本条在批 8 的状态(2026-09-13 · T21;本行原文一字未改)**:
960+
> - 🔴 **批 8 对本条零改动、零复跑**:批 8 的三条主线(两条能力 / 观感收编 / 治理余项)与四项用户裁决(U1 音频两条 · U2 凭据槽代码路径 · U3 `docs/tech-debt/` 归档 · U4 观感按需入口)**没有一条落在这条验收上** ⇒ 🔴 **本条的结论仍以批 7 的收口读数为准**,**不得**读成「批 8 重新验证过」。
961+
> - 🔴 **防误读(逐字)**:批 8 的 **U1 是「音频存储开关 + 删会话删音频」**,**与本条的「标签 / 档位」无关** ⇒ **不得**把它算进这一条;批 8 也**未触碰**任何标签线或档位通道的生产代码。
962+
> - 🔴 **本条的「真机面」仍未覆盖**:批 7 的「档位选完真生效」判据是**代理判据**(记忆体往返 + 负控),**不是**「采样参数真被采集链路消费」的像素级证据;且**真机 / WebView2 冒烟由用户裁决跳过(U5)**。
963+
> - **批 8 的相关读数(只作旁证,不作本条判据)**:`check-command-registry` **312 / 312 / 0** · `cargo test --test app_lib_tests` **2378 passed / 0 failed / 6 ignored** · `npx tsc --noEmit` **0 错**(均为 T21 亲测,时点 2026-09-13T17:32–17:35+08:00)。
964+
965+
939966
9. JS 包首屏 gzip 达标或给出瓶颈清单;GSAP 只在独立 chunk 懒加载。
940967
> **进度(批 2 收口,2026-09-12)**:**✅ 前半达标** —— 首屏 JS gzip **92.79 kB < 200 kB**(预算真源 `docs/standards/performance.md:28`),判据工具 `scripts/check-bundle-budget.mjs` **exit 0**、余量 **107.21 kB**、懒加载 22 个 574.84 kB 不计入。
941968
> **后半 ✅ 已就位但未装 GSAP**(「不装 GSAP」是批 2 的硬非目标):`app/src/build/manualChunks.ts` 的 `vendor-gsap` **精确包名槽位已预留**并被单测钉住(含反例守卫,实测真实构建 746 次调用中 `vendor-gsap` 返回 **0** 次、`dist` 无该 chunk);批 6 装 GSAP 时**必须**用 `import()`,判据见批 2 计划 Task 5。
@@ -997,6 +1024,14 @@
9971024
9981025
---
9991026

1027+
> **🔻 批 8 终态就地加注 · §12 表内「旧单 provider 凭据槽 `"default"` 在应用内永久不可撤销」那一行(2026-09-13 · T21 落库时该行在 `:979`)** —— ⚠️ **表内不能插块引用(会截断表格)** ⇒ 按批 7 §9 的先例**整表之后就地在注、并逐字点名该行**;**该行原文一字未改**(见上表)。
1028+
> - 🔴 **原文那句「读兜底与启动迁移仍在」现在是假话**:批 8 的 **T25** 已**移除那条读兜底与启动迁移路径** —— 提交 **`a054ec73`**「fix(ai): 移除默认凭据槽作为合法槽位的路径」(parent `9b1e8aa8`;写集恰 **5 条** = `ai_credentials.rs` · `ai_credentials_tests.rs` · `app_setup.rs` · `commands_ai_providers.rs` · `commands_ai_providers_tests.rs`),紧随其后的是 **`ae3bba3e`**「test(ai): 收紧遗留凭据槽判据的具名红点」(parent = `a054ec73`)。
1029+
> ⇒ 🔴 **原文保留、本注为准**:上表该行的「**读兜底与启动迁移仍在**,前端本就 0 引用(非回归)」**描述的是批 1 时点**;**批 8 时点已不成立**。
1030+
> - 🔴 **必须并读的另一半(否则会把「移除了代码路径」误读成「数据被抹除」)**:**已存密钥数据保留,且应用内不可达** —— 这是 **U2 的 (ii)「不做」的刻意边界**(**无迁移即销毁不可逆**)⇒ **本批只移除代码路径,不物理抹除任何已存数据**;**将来若要清理需新的用户裁决**(登记为下一批输入)。
1031+
> - ⚠️ **同源文本另有两处、按「时态判据」不动的**:`docs/superpowers/plans/2026-09-11-frontend-redesign-batch1-deletions.md` 与 `docs/superpowers/plans/2026-09-13-frontend-redesign-batch8-groundwork.md` 各一处「读兜底与启动迁移仍在」⇒ **历史计划文本、一字不动**。
1032+
> - ⚠️ **真实盲区(如实登记,不掩饰)**:**启动期行为无单测**(该判据在行为侧不可达)⇒ T25 的那条红点由**静态判据**承担;且 **「仅有 `default` 槽的真机用户凭据会失效(需重填)」这一风险在本环境测不了**(**真机 / WebView2 冒烟由用户裁决跳过,U5**)。
1033+
> - ⚠️ **引述来源**:本节的两条事实(T25 的五条写集 / 三处文本定位)出处 = `.superpowers/sdd/2026-09-13-frontend-redesign-batch8/controller-rulings.md` 的 §33.1 与 §33.4① —— 🔴 **该目录整体 gitignored、不入库**,故此处只给路径不给链接;**提交 sha 与写集已由 T21 用 `git show --name-only -1 a054ec73` 独立复核**。
1034+
10001035
## 13. 风险与回归
10011036

10021037
| 风险 | 触发条件 | 缓解 |
@@ -1046,6 +1081,17 @@
10461081
> - **`docs/adr/ADR-019` 缺号**:🔴 **不补、不复用,只登记**(`docs/adr/README.md` 的「编号规则」逐字「编号一经分配不再复用」);批 6 实盘最高 ADR = **ADR-035**。
10471082
> - ⚠️ **`docs/product/ui-ux-system.md` / `theme.md` 的四层动效 / 三档强度**:**本任务不写**(§14 上格逐字仍留批 8)⇒ 只在 `v0.22` 批 6 节的「未做登记」里点名。
10481083
1084+
> **🔻 批 8 终态就地加注 · 本表各行在批 8 的落地(2026-09-13 · T21;上表原文与批 4 / 批 5 / 批 6 加注一字未改)**:
1085+
> - 🔴 **`docs/versions/v0.21.md`(或 v0.20.14)行**:**批 8 ✅ 已落(2026-09-13)** = 「**批 8 · 治理收口与三条主线**」节(**同七段结构**:交付 / 验收(三条主线兑现度 + 八闸终态)/ 规格漂移纠正 / 过程中纠正的计划错误(E8-1 … E8-25)/ 诚实代价 / 未做登记(逐条带归属批次)/ 提交清单 `5852cdc4^..396b5e5c` **含左端点 = 63 个提交**)。🔴 **该节自带的三块**(**懒侧基线的两个时点与「重冻后总量 == 实测 ⇒ 零余量」的结构性发现** · **八闸第 ⑤ 闸的懒侧写 `⏭ 未判`** · **T15 / T15b 的两条实测边界**)是本批最需要下游读到的。
1086+
> - 🔴 **`docs/standards/` 行**(「新增动效规范章节(现对动效零命中)」):**批 6 已落**(`docs/standards/motion.md`)⇒ 🔴 **批 8 未新增任何 `docs/standards/` 章节**;批 8 在该目录的动作只有**就地加注与数值同步**(`line-limit-exemptions.md` 的行数值与「312 条」散文 · `performance.md` 的「懒侧执行者缺口三段式」加注 · `motion.md` 的判据纪律小段 · `testing.md` 的门禁稳定性纪律)。
1087+
> - 🔴 **`docs/product/ui-ux-system.md` / `theme.md` 行**:**批 0-D 已落**原语层与阴影命名;🔴 **「四层动效 / 三档强度 / 断点与窗口 / §五§十 的旧参数」批 8 仍未写** ⇒ **登记为下一批输入**(批 8 只回写了「审校模式」那一节)。
1088+
> - **`docs/adr/ADR-032..035` 行**:**批 8 未新增任何 ADR**(实盘最高仍是 **ADR-035**);批 8 的 ADR 动作 = **两处前向指针加注**(`ADR-034` / `ADR-035` **各纯插入 1 行、删除列 0**,指令落 `5018c7ab`)。
1089+
> - **`docs/adr/ADR-010-gap-filling-ai.md` 行**:批 1 已落(退役修订),**批 8 零动作**。
1090+
> - **`docs/standards/line-limit-exemptions.md` 行**:批 8 的终态 = `node scripts/line-limits.mjs --full` **exit 0**「`>600` 硬限 **0**(棘轮内)· 301–600 档 **121** · 登记条目 **121**」(T21 亲测,时点 **2026-09-13T17:32+08:00**)。
1091+
> - ⚠️ **`docs/product/requirements-pool.md` 行**(「REQ-201 修正(`update_fragment_group` 实际无调用方)· 新增 REQ 登记」):🔴 **批 8 未动它**(`update_fragment_group` 的接线由**批 7** 的 T23 补齐)⇒ **登记**。
1092+
> - 🔴 **本表未列、批 8 新增的一行(归档面)**:`docs/tech-debt/` 按用户裁决 **U3 = a** 归档到 **`docs/archive/2026-09-13/`**(`335a6155` · `630d2bfa`)⇒ **`docs-check` 的扫描 / 检查数由 `282 / 182` 变为 `284 / 181`**(`282→284` / `182→181`,**已逐字登记在 `docs/archive/2026-09-13/README.md` 与 `docs/archive/README.md`**;T21 亲测现读数 = **`284 / 181`**)。
1093+
1094+
10491095
**提交策略**:批 0 拆成 13 个原子提交(3 条 ADR → 豁免表纠偏 → 拆 NotesPage/NoteListView → 拆 SessionDetailPanel → 拆 ClassroomPage → token 层 + z-index → 图标集 → 原语第一批 → 第二批 → 第三批 → 回写规格文档);后续每批各自原子提交,遵循 Conventional Commits。
10501096

10511097
---

0 commit comments

Comments
 (0)