|
762 | 762 | - **懒侧字节门禁(批 6 的「懒侧无门禁」欠账)**:T9 新建(`scripts/check-bundle-budget.mjs` 首屏 + 懒侧两个**独立**读数 · `scripts/lazyBudget.json` 冻结基线 · **逐族上限 + 清单等式 + 总量硬棘轮 + 64 B 容差**),口径写死「**`--no-build` 的读数不可用于懒侧判据**」。 |
763 | 763 | - **规格两章(只交规格、不写实现)**:§7.4「笔记带证据三轨」(E1/E2/E3 改写 + 两个分母 + 无锚点四类 fixture + 精修前后两态契约)· §4.3 的「审校模式」定义(入口 / 作用域 / 退出 / `data-*` 形态)。**两章正文均逐字含「本批只交规格,实现未做」**。 |
764 | 764 | - **补 UI 实做 10 条**(§C9.1 逐字名单):`reset_tag_color`(#19) · `update_note_tags`(#25) · `video_profile_for_spec`(#28) · `analyze_session_command`(#34) · `delete_session_images_all`(#37) · `finish_session`(#39) · `get_decision`(#40) · `refine_session`(#42) · `set_tag_color`(#45) · `update_knowledge_system`(#47) —— 其中 4 条由 T18/T19 交付、6 条由 T20 交付(落点:`SessionAnalysisPanel` / `GalleryBulkDelete` / `StaleSessionRecoveryBar` / `DecisionDetailPanel` / `SessionRefineSection` / `KnowledgeSystemEditPanel`,判据件 `batch7UiWiring.test.tsx` **216 行**)。 |
| 765 | + > 🔻 **收口更正(2026-09-13 · T21 追加轮;上一行原文一字未改)—— 实做面收口为 11 条**:§C9.1 的「**10 条**」是**计数口径**,而**逐个列名是 11 个名字** —— 计划 `:2304` 已自陈「数一数是 **11** 个名字」、`:2305` 裁决「**按名字列全 11 个**(不删任何一个)……**不自行删减**」。🔴 **实测支撑**(§C56.2 / §C57.4④):T20 交 **6**(其自记口径「6 + T18/T19 的 4 = **10**」**恰好吞掉了被删减的那一个名字**)+ T23 补 **1** + T18/T19 的 **4** ⇒ **11 / 11 现已齐**。 |
| 766 | + > - **11 条逐名**:`reset_tag_color`(#19) · `update_note_tags`(#25) · `video_profile_for_spec`(#28) · `analyze_session_command`(#34) · `delete_session_images_all`(#37) · `finish_session`(#39) · `get_decision`(#40) · `refine_session`(#42) · `set_tag_color`(#45) · `update_knowledge_system`(#47) · **`update_fragment_group`(#46)**(**最后一条由 T23 交付**:`125eec85` 新件 `app/src/components/FragmentGroupAction.tsx` + `5f662811` + `5d59e332` 的 feed 地形返工;T21 独立复测 **PROD 0 → 1**)。 |
| 767 | + > - 🔴 **规格 §10 的「12」仍不改**(那是规格原文、加注处理)⇒ 差额 = **`kb_search`(#14)**,它在**批 3 Task 12** 已交付(`b567f0e6`)。 |
| 768 | + > - ⚠️ 上行的 `batch7UiWiring.test.tsx` **216 行**是 T21 首轮的读数;T23 两条提交后 **T21 实测 = 218 行**(该判据件的 `describe` 标题也随之从「六条命令」改为**七条命令**,T23 自查后落 `5f662811`)。 |
765 | 769 |
|
766 | 770 | **验收(三条验收的兑现度 + T21 落库时的八闸读数)** |
767 | 771 |
|
|
794 | 798 | | **贴边件清单**(本批 10 条,见「诚实代价」)· **门禁盲区**(末尾换行 / `countLines` 不可见)· **`pr-check.yml` 的 paths-filter 缺口 + 懒侧守卫的执行者缺口** · **豁免表的「连带落库」机制记录** | `line-limit-exemptions.md` + `performance.md`(各自就地加注) | |
795 | 799 | | **规格 §4.3 的「审校模式」定义** + **§7.4「带证据三轨」规格章** | 规格 §4.3 / §7.4(T20 的 `fb73e313`) | |
796 | 800 |
|
| 801 | +> 🔻 **上表三条的收口更正(2026-09-13 · T21 追加轮;上表原文一字未改)**: |
| 802 | +> - **§10 批 7 行**:上表写的「**实做 10 条**」⇒ 🔴 **收口为 11 条**(口径见本节「交付」段的收口更正:§C9.1 的 10 是计数口径,逐个列名 11 个;T23 补完第 11 个)。**规格原文的「12」仍不改**(差额 = `kb_search`,批 3 已交付)。 |
| 803 | +> - **§11-7 行**:前端零引用 **24 → 11** ⇒ 🔴 **收口为 24 → 10**(口径不变:§9 那 47 条中**仍在 registry 者 22 条**里的前端生产零引用数;`update_fragment_group` 由 T23 接线后离开该集合)⇒ **有引用数 11 → 12**;🔴 **残留 1 条 → 残留 0 条**。 |
| 804 | +> - **§9 #46 行**:上表写的「**T21 实测「接线」那一半未做**」⇒ ✅ **已在批 7 内由 T23 补做并交付**(`125eec85` + `5f662811` + `5d59e332`)。🔴 **原读数保留为 T21 首轮的过程记录** —— 它促成了这次补做;**处置由「批 8 输入」改为「已交付」**(`rulings.md` §C56.2:这是批 7 的**交付缺口**,不是有意的延期)。落点形态与判据见规格 §9 表末该行的收口更正。 |
| 805 | +
|
797 | 806 | **过程中纠正的计划错误(第 1–12 例,逐条带出处与落位)** |
798 | 807 |
|
799 | 808 | > 口径:这是**控制方对计划编制单元**的错误计数(与「控制方自己的第 N 例」是**两条序列**,勿混)。**第 7–11 例由 T12 落账**(§C46.6),**第 1–6 与第 12 例由 T21 落账**(本节 + 规格加注)。计划自身的勘误表 = 计划文件 `### 表 6b` 的 **E-1–E-30**。 |
800 | 809 |
|
801 | 810 | ① **行号锚系统性错误 + 一处不实归属**(§C12;计划方第 1 例):`### 表 6` 的 X2/X3 行号锚错,且 X2 把自己的读数**冒充成「与控制方实测一致」**(不实归属)。**根因 = 编制期仪器 `tmp/plan-writer/sites.mjs` 的 `stripComments` 整段删除块注释 ⇒ 打印的是「剥注释后行号」**(T2 定位)⇒ 全计划**判错锚 24 条**(E-1–E-22 行号类 + E-25/E-26)。**落位**:E1 的全量重推(`367559ff` 等 4 个提交)· `表 6b` E-1–E-30 · 该「不实归属」句已删。② **`表 5` 的 Y2 行判错**(§C13.3;E-24):把 `toastMigration.test.tsx:146` 判为「不改」,而 `durationMs={3500}` 在 `AiToast` 定义体内 ⇒ 搬迁后必红。**落位**:`表 6b` E-24 + 计划改为勘误(保留原文 + 写真值)。③ **T3 卡依赖不存在的产物**(`表 6b` E-27;计划方第 3 例):卡要求「`lowConfidenceClass` 用例已由 T2 搬到 `utils/lowConfidence.test.ts`」,而 T2 卡没有该文件、T2 也(正确地)没建它 ⇒ **控制方授权 T3 自建**。④ **把「改文件」与「补豁免表行数」拆给不同单元**(§C14.1;E-28;计划方第 4 例):`line-limits --full` 的 **(e) 是逐文件判据**、husky 扫**工作树** ⇒ **每个中间提交都必然撞钩子**(T2 与 T8 各自独立撞上)⇒ 裁决:行数列改由「改文件的单元」同批更新 + `--no-verify` **条件式**授权。⑤ **T4 卡预测 3 条 `allow(dead_code)`**(§C15.1;E-29;计划方第 5 例):实测 **4 条**(第 4 条是**传递受害**的私有 helper `normalize_source`)⇒ 只加 3 处会留 1 条新告警 ⇒ clippy 集合差异非空。⑥ **计划的提交纪律与 §C18.2 矛盾**(`progress.md:124`;E-30;计划方第 6 例):原 `:188` **强制** `git commit --only -- <paths>`(**正是 `fa45caf1` 连带落库事故的机理**),且把 `--no-verify` 列进「禁止」清单、与同段的 §C14 条件式授权**自相矛盾** ⇒ E1 返工 `4292dee2`。⑦ **T6 的台账实为四处,卡里只点名三处**(§C22.5;计划方第 7 例)⇒ 已令 T6 逐张棘轮表搬家。⑧ **T13 新件预算写 ≤170、实测 273**(§C33.4 I-1;计划方第 8 例)⇒ 低估 103。⑨ **计划 V2 的 `<Surface data-foo="1"/>` 在 TS 下不报错**(§C35.4;计划方第 9 例):**带连字符的属性被豁免** ⇒ 该变异体**无牙**,改用 `bar` / `onClick`(R-8 独立复现)。⑩ **`表 5` 的 Y8 前提不成立**(§C38.3;计划方第 10 例):假定 `utils/html.test.ts` 的 5 条 `renderTimestampAnchors` 用例「必须改写」,T15 逐条实跑证明**一条都不红** ⇒ 实际处置是**纯加宽**(比机械改写更好)。⑪ **计划给的「预授权文本」本身编译不过**(§C39.3;计划方第 11 例):`**393**/114` 里的 `**/` 含 `*/` ⇒ 在 TS 块注释里**提前闭合注释**(`25:72: Expected ";" but found ";"`;T10 实际被 vitest 挡下一次)⇒ 立为陷阱 **P22/P23**。⑫ **H7 的指针错**(§C54.3;计划方第 12 例):计划把 H7 指向 `docs/tech-debt/…`,而**该文件里 `H7` 字面 0 命中**(对照非 0);**原文在 `docs/Foresight/ux-market-convention-audit.md:109`** ⇒ T20 **只做属于 `get_decision` 详情面的那一片**,其余 **5 项逐字登记批 8**;**未触发 STOP**(按「锚不符」条款处置)。**出处**:`rulings.md` §C12 / §C13.3 / §C35.4 / §C15.1 / `progress.md:124` / §C22.5 / §C33.4 / §C38.3 / §C39.3 / §C54.3。 |
802 | 811 |
|
| 812 | +> 🔻 **补登计划方第 13 例(2026-09-13 · T21 追加轮;上段的第 1–12 例原文一字未改)** —— ⑬ **计划写的 IPC 载荷键名与 Rust 真身不符**(§C56.3;计划方第 13 例):计划 `:2299` 与 `:532` 写的是 `invoke("update_fragment_group", { **id**, groupId })`,而 Rust 真身(`app/src-tauri/src/commands_fragments.rs:141-145`)是 `update_fragment_group(state, **fragment_id**: i64, **group_id**: Option<i64>)` ⇒ **Tauri 2 是 camelCase** ⇒ 🔴 **JS 侧必须是 `{ fragmentId, groupId }`**。**先例**:`app/src/components/FeedFragmentList.tsx` 里既有的 `delete_fragment` 调用(同族形态)。⇒ **实际落库形态**:`FragmentGroupAction.tsx:92` 逐字 `invoke("update_fragment_group", { fragmentId, groupId: target })`(T21 追加轮实测)。 |
| 813 | +> - 🔴 **教训(§C56.3 逐字)**:**计划里凡出现 IPC 载荷的键名,都必须在计划期用「既有同族调用点」对拍一次** —— 本批第 11 例(`**393**/114` 编译不过)与**第 13 例**同属「**计划文本自身没被编译 / 执行过**」这一类。 |
| 814 | +> - ⇒ **口径更新**:本段标题的「第 1–12 例」按本注读作 **13 例**(**规格 §11-7 与本节其余处若仍写「12」,按本加注读**)。 |
| 815 | +
|
| 816 | +> 🔻 **另登记一条「控制方序列」的教训(勿混入上段的计划方序列)** —— **控制方派单缺陷(§C57.2;控制方引述/派单类错误在本批的第 14 例)**: |
| 817 | +> - **事实**:控制方的派单措辞要求「**复用同文件既有形态**」,把 `FeedFragmentList.tsx:109` 的同文件注释(「目标=笔记容器组(feed 地形是碎片容器——**不是笔记去向**)」)当作先例,指定候选组取 `containerGroups`(**container 地形**)。🔴 **那句是 `promote_fragment_to_note`(升为笔记)的去向语义,与 `update_fragment_group`(碎片归组)不是同一件事。** |
| 818 | +> - **由 T23 质疑并成立**(它按派发书实现后自己提出:「`capture_fragment` 真实自动归入的是 **feed** 主题组(`resolve_feed_topic_group`)⇒ 是否改判 feed?」)⇒ **控制方取证后改判**(Rust 侧决定性证据:`commands_groups.rs:36` 的 `terrain` 文档注释 + `:44` 的 `container`/`feed` 白名单 ⇒ **`feed` 是一等公民地形**;`commands_fragments.rs:344-366` 的 `resolve_feed_topic_group` **显式写 `terrain: "feed"`**)⇒ T23 以 `5d59e332` 返工。 |
| 819 | +> - 🔴 **纪律(§C57.2 逐字)**:**「复用同文件既有形态」这个派单措辞,必须附带「该形态服务于哪个流程」的说明** —— **同一文件里的两个流程可以有不同的语义前提**;不附说明的「照它做」会把一个正确先例误用成错误先例。 |
| 820 | +> - ⚠️ **「§C57.2 属控制方序列、不属计划方序列」这一点必须写明**(上段的①②…⑬是**计划编制单元**的错误计数;本条是**控制方派单**的错误)⇒ 引用时**不得**把它写成「计划方第 14 例」。 |
| 821 | +
|
803 | 822 | **诚实代价(不许省略)** |
804 | 823 |
|
805 | 824 | - 🔴 **真机 / WebView2 冒烟由用户裁决跳过**(§C6.4)⇒ **像素 / 观感 / 手感类一律未测**(归批 8)。**不得**出现「已真机确认」类表述。 |
|
829 | 848 |
|
830 | 849 | > 🔴 **并且**:`app/src/views/note/NotesReadingColumn.tsx` **不是**真实路径 —— 实测路径 = **`app/src/components/notes/NotesReadingColumn.tsx`**(`views/note/` 下无该文件)。`rulings.md` §C49.5① 与派发语均写错路径 ⇒ **T21 于落库时就地更正**,**后续引用一律用 `components/notes/`**。 |
831 | 850 | > 🔴 **「恰 300(余 0)」的 6 个文件里,`dialogMigration.e.test.ts` 与 `check-bundle-budget.mjs` 是本批之前/本批新建的判据件**:**加一行就红**,且 `dialogMigration.e.test.ts` 的 `CROSS_LINE_34` 判据**改不动**(§C48.5② 的「潜在陷阱」)。 |
| 851 | + > 🔴 **范围声明(2026-09-13 · T21 追加轮;§C55.3 的裁决)—— 上面那张表是「本批触碰过的件」,不是全树**:它的**取值范围** = 本批(T6/T7/T9/T16/T17/T18/T19/T20/T23)实际改过、且在改动当时余量 ≤5 的件 ∪ 两个判据件。🔴 **它一律不得作为判据输入**。 |
| 852 | + > - 🔴 **全树机器扫描(唯一来源;口径 `countLines()`,域 `app/src/**/*.{ts,tsx}`)**:**T21 于追加轮重跑**(T23 的三条提交已改动行数,故**不抄上游读数**)⇒ **共 579 个文件** · **≥300 = 35 条** · **295–299 = 21 条** · **合计 56 条**。 |
| 853 | + > ⚠️ 对拍上游(§C55.3 的 **578 文件 / ≥300 = 35 / 295–299 = 20 / 合计 55**):**差 1 个文件 + 1 条 295–299**,**逐条归因 = T23 的两处改动** —— ① **新件** `app/src/components/FragmentGroupAction.tsx`(155 行)⇒ 文件数 **578 → 579**;② `app/src/components/FeedFragmentList.test.tsx` 由 **297** 长到 **299**(T23 的 `125eec85` + 再返工 `5d59e332`)⇒ 295–299 档 **20 → 21**。**≥300 档不变(35)**。 |
| 854 | + > - 🔴 **逐字纪律(§C55.3)**:**「手列清单一律不得作为判据输入;以全树脚本扫描为唯一来源」**。上游那份手列清单**已两次失真**(前几轮转述为「10 条」),它漏掉的 45 条里**有两个恰 300/300(余 0)**:`app/src/components/notes/NotesReadingColumn.views.test.tsx` = **300**(**同时是漂移红集成员 F2**)· `app/src/components/KnowledgeDetailPanel.tsx` = **300**;另有 T20 本批新建的 `app/src/components/session-detail/useRevealChoreography.test.tsx` = **298**。⇒ 🔴 **T22 必须给完整两张表**(≥300 / 295–299,逐条 `路径 + 实测行数 + 是否本批新增或被改过`),并逐字写「**任何后续编辑必须先拆件**」。 |
| 855 | + > - 🔴 **同一口径已同步进 `line-limit-exemptions.md`**(行数治理的真源表)⇒ 本条与那张表**必须并读**。 |
832 | 856 | - 🔴 **负载敏感红的「集合」是一组会漂移的成员,不是固定名单**(§C43.3 / §C48.4 / §C50.4 / §C51.5;**T22 的诚实边界不得简化成「只有 W1/A4」**): |
833 | 857 | **JS 侧** `SessionDetailPanel`(**W1 / W2**)· `components/notes/NotesReadingColumn.views`(**F2**)· `SessionViewHost`(**H4b**)· `views/registryResolution.test.ts`(**A1**)· 以及 T15 冷跑见过的 `KnowledgeGraphView`; |
834 | 858 | **Rust 侧** `ffmpeg::tests::run_captured_handles_large_output`(**签名 = 10 s 墙钟超时 + `Io("cmd.exe 执行超时(10s)已终止")`**,裸跑 1.9–42.7 s)。 |
|
846 | 870 | - 🔴 **R4.1 的「5 个粘滞字段形态」** → **批 8**(批 6 登记的 follow-up,本批未承接)。 |
847 | 871 | - 🔴 **两处页内 seek**(`AiRefineCard` / `NoteAiDialog`)→ **批 8**(§C49.3)。 |
848 | 872 | - 🔴 **`update_fragment_group`(#46) 的「接线」那一半**(T21 实测前端命中 0)→ **批 8**。 |
| 873 | + > 🔻 **收口更正(2026-09-13 · T21 追加轮;上一行原文一字未改)—— 本行从「未做」清单撤回,移入「交付」**:`update_fragment_group`(#46) **已在批 7 内由 T23 补做**(`125eec85 feat(components): 片段行补上移动到组入口` + `5f662811` + `5d59e332 fix(components): 碎片归组候选改用 feed 地形组`;T21 独立复测 **PROD 0 → 1**,落点 `app/src/components/FragmentGroupAction.tsx:92`)⇒ 🔴 **「→ 批 8」的处置作废**(依据 `rulings.md` §C56.2:规格处置栏逐字「**补 UI(本批)**」,计划 `:532`/`:2299`/`:2309` 三处指派一致 ⇒ **这是批 7 的交付缺口,不是有意的延期**)。 |
| 874 | + > - 🔴 **逐字登记本条的完整来历(供 T22 的二分清单收录)**:① **计划侧正确且预警过** —— `:2304` 自陈「数一数是 **11** 个名字」、`:2305` 裁决「按名字列全 **11** 个,不删任何一个」;② **漏做** —— T20 的计数口径「6 + T18/T19 的 4 = **10**」**恰好吞掉了被删减的那一个名字**;③ **发现** —— **由 T21 的仪器在收口回写时发现**(前端 `app/src/**` 含测试 **0 命中**,而它仍在 registry);④ **裁决** —— 控制方 §C56.2 判定为**批 7 的交付缺口**并派 T23 补做;⑤ **补做** —— T23 三条提交(含一次由 T23 自己质疑、控制方取证后改判的 **feed 地形返工**);⑥ **更正** —— T21 于追加轮更正规格 §9 与本节。⇒ **缺口成因 = 实做方的计数口径,不是计划缺陷**。 |
849 | 875 | - 🔴 **C7「重启后卡录制」的完整覆盖面**(触发口径偏离:该命令无心跳字段)→ **批 8**(§C54.5⑤)。 |
850 | 876 | - 🔴 **`get_decision` 详情面之外的审计 H7 其余 5 项** → **批 8**(§C11.7 / §C54.3)。 |
851 | 877 | - 🔴 **`SURFACE_TAG_REGISTRY` 对 legacy 文件没有「新增 `<Surface>` 调用点」的合法路径**(**机制缺陷**,不是本批失误)→ **批 8 修**(§C35.2):legacy 行的 `count` **只许降**、`file` 键唯一、**legacy 和锁**又禁止腾挪 ⇒ **任何 legacy 文件内的容器都无法再迁入 `<Surface>`**。**本批的处置 = 接受 19/21**,余 2 处(`LiveImageStrip:109` / `VersionPanel:135`)按新类别 **`legacy-registry-frozen`** 留档、**转批 8**(**不授权抬高 legacy 面**)。 |
|
0 commit comments