Skip to content

Commit 622f692

Browse files
committed
docs(standards): 贴边件清单一律以全树扫描为准
依据 = `rulings.md` **§C55.3**(控制方实测纠错第 13 例:贴边件清单「不是 10 条」+ 裁决「手列清单一律以全树脚本扫描为唯一来源」)+ **§C57.4③**(`FeedFragmentList.tsx` 进全树扫描)。 形态 = **原文 + 就地加注**(上一轮的批 7 收口加注六条逐字保留,本块为**追加**)⇒ 本提交 **+16 行 / −0 行**。 【逐字对照:改了哪几行 / 原文是什么】 - **位点**:本文件末 = 上一轮我写的「批 7 收口就地加注 · … 贴边件清单(余量 ≤5,共 10 条)落在 `v0.22`…」那条 bullet。 - **原文(保留,一字未动)**:整条,含「**本批的贴边件清单(余量 ≤5,共 10 条)落在 `v0.22` 批 7 节的「诚实代价」**……**任何后续编辑必须先拆件**……⇒ **以 `components/notes/` 为准**。」 - **加注(新增)**:`---` + 新块「🔴🔴 **批 7 收口就地加注 · 「贴边件清单」的口径更正:手列清单一律作废,以全树脚本扫描为唯一来源**」,含: ① **被更正的对象**(那份 10 条是手列清单,取值范围 = 本批触碰过的件;**一律不得作为判据输入**;上游已判其两次失真); ② 🔴 **全树机器扫描(唯一来源,口径 `countLines()`,域 `app/src/**/*.{ts,tsx}`)**:上游 §C55.3 = **578 / ≥300 = 35 / 295–299 = 20 / 合计 55**;🔴 **T21 追加轮重跑 = 579 / 35 / 21 / 56**; ③ **差额逐条归因**:新件 `FragmentGroupAction.tsx`(155)⇒ 文件数 +1;`FeedFragmentList.test.tsx` **297 → 299** ⇒ 295–299 档 +1;**≥300 档不变**; ④ **域内恰 300(余 0)= 6 条**(逐条列名)+ ⚠️ **口径更正**:手列清单真正漏掉的域内 300/300 是 **1 条** = `NotesReadingColumn.views.test.tsx`(§C55.3 同时点名的 `KnowledgeDetailPanel.tsx` **本就在清单内**)⇒ 以实测名单为准;另注 `scripts/check-bundle-budget.mjs` = 300 但**不在本域**; ⑤ **本域两张完整表**(≥300 的 35 条逐条 `路径 + 行数`;295–299 的 21 条逐条 `路径 + 行数`)—— 供 T22 直接对拍; ⑥ 🔴 **纪律逐字**「**手列清单一律不得作为判据输入;以全树脚本扫描为唯一来源**」+ T22 必须给完整两张表(逐条 `路径 + 实测行数 + 是否本批新增或被改过`)并逐字写「**任何后续编辑必须先拆件**」; ⑦ 🔴 `FeedFragmentList.tsx` 是本轮**新增的「恰 299」**(T23 的返工把 300 降到 299 ⇒ 余 1),**仍在 ≥295 面内**; ⑧ 与 `v0.22` 批 7 节的同口径**必须并读**。 【T21 追加轮自跑读数(非转述)】 - 全树扫描:**579 文件**(域内)· **≥300 = 35 条** · **295–299 = 21 条** · 合计 **56**。 - 上游对拍(§C55.3):**578 / 35 / 20 / 55** ⇒ **差 1 文件 + 1 条 295–299**,**逐条归因 = T23 的两处改动**(见上 ③)。 【门禁读数(串行,工作树;与上游逐条对账)】 - `node scripts/docs-check.mjs` ⇒ **exit 0** ·「扫描 **281** / 检查 **181**」⇒ 与上游 **281/181 逐字一致** - `node scripts/line-limits.mjs --full` ⇒ **exit 0** ·「>600 硬限 **0** · 301–600 档 **121** · 登记条目 **121**」⇒ 与上游**逐字一致**(本表 301–600 档表体**零改动**) - `node scripts/check-command-registry.mjs` ⇒ **exit 0** ·「定义 **311** / 注册 **311** / 重复 **0**」⇒ 与上游**逐字一致** - `node scripts/check-exemption-prose.mjs` ⇒ **exit 0** ·「✅ 散文与真源一致(本脚本非门禁、只能手工跑;批 8 候选闸)」⇒ **上一轮的散文数字未被本提交破坏** - `git diff --numstat -- <本文件>` ⇒ **16 / 0**;`git diff` 的 `^-` 行数 = **0**;`#`–`####` 标题逐条对拍 = **HEAD 4 / 工作树 4 / 差异 0 处**;行数 **246 → 262** 【诚实边界】 - 🔴 **两张表只在 `app/src/**/*.{ts,tsx}` 域内成立**(与 `line-limits.mjs` 的 `SOURCE_EXT` 一致)⇒ **不含 `scripts/**` 与 `.css`**;`scripts/check-bundle-budget.mjs`(300/300)与 `app/src/ui/primitives/motion.css`(335)**都不在这两个数里**(`.css` 不在门禁视野;`.mjs` 不在本域)。 - 🔴 **一处对上游点名的实测异议已如实登记**:§C55.3 说手列清单「漏掉的 45 条里有两个恰 300/300」并点名 `NotesReadingColumn.views.test.tsx` 与 `KnowledgeDetailPanel.tsx`;按 T21 追加轮实测,**后者本就在那份 10 条清单内**(该清单第 6 行 = `app/src/components/KnowledgeDetailPanel.tsx | 300/300 | 0`)⇒ **真正漏掉的域内 300/300 = 1 条**。**以实测为准**,并**未改动 §C55.3 的文本**(它属台账,不在本单元的写集)。 - **本提交不改 `v0.22`**(同口径的加注已在 `03339ed8` 落地)⇒ 两处**并读**、互指。
1 parent 03339ed commit 622f692

1 file changed

Lines changed: 16 additions & 0 deletions

File tree

‎docs/standards/line-limit-exemptions.md‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,3 +244,19 @@
244244
> - 🔴 **门禁盲区一例(§C51.7①)**:`app/src-tauri/src/commands_video.rs` 的**末尾换行被吞**(T21 实测 `s.endsWith("\n") === false`,`countLines()` = **356**)而 **`countLines()` 不变** ⇒ **本表与 `line-limits --full` 都看不见**。机理 = `countLines()` 的定义(`s.split("\n").length - (s.endsWith("\n") ? 1 : 0)`)**对「有无末尾换行」不敏感** —— 这是**口径的性质**,不是缺陷;但 🔴 **任何「逐字节一致」的纯搬迁 / 拆件声明都不许只靠行数**(批 7 的判据已升级为 **`Buffer.equals` 逐字节对拍 + `digest` / `sha256`**,§C26.4 / §C29)。**登记为技术债**(批 8 可考虑加一条「末尾换行 / EOF 形态」的机器判据)。
245245
> - 🔴 **散文对拍探针 = 批 8 的候选闸(§C11.8 ③)**:`scripts/check-exemption-prose.mjs`(批 7 T11 新建,**112 行**;口径 = `countLines()` 同源实现)把**本表的散文数字与 `check-command-registry.mjs` 的门禁读数对拍**(如「散文『311 条』== 门禁『定义 311』」;两态都成立、中途未同步期为**真阳性** `EXIT=1`)。🔴 **已入库,但不入八闸 / CI / husky**(理由:八闸的集合是批 8 治理收口的对账基线,本批扩闸会让逐字对账漂移;散文数字天然易漂 ⇒ 硬门禁会频繁假红)⇒ **手工跑**(`--help` 与头注都自述「非门禁」)。**并进入 `pr-check.yml` 的 paths-filter 缺口名单**(§C41.4 U2;**缺口形态未变、逃逸文件集合 +1** —— 同源事实见 [`performance.md`](performance.md) 的懒侧门禁节)。⚠️ **探针按路径定位、不按死锚行号**(本表的 `:45` 因 T6 删行已下移为 **`:44`**,即 `app_commands.rs` 那行,其散文现为 **「311 条」**、行数值 **478**,T21 实测两者与门禁读数一致)。
246246
> - 🔴 **本批的贴边件清单(余量 ≤5,共 10 条)落在 [`v0.22` 批 7 节的「诚实代价」](../versions/v0.22.md)**(母本体例同批 4 的「9 个贴边文件」):**任何后续编辑必须先拆件**。其中 `app/src/components/notes/NotesReadingColumn.tsx` 的路径在批 7 台账(`rulings.md` §C49.5①)与派发语里被写成 `app/src/views/note/NotesReadingColumn.tsx` —— 🔴 **该路径不存在**(实测该文件在 `components/notes/`)⇒ **以 `components/notes/` 为准**。
247+
248+
---
249+
250+
> 🔴🔴 **批 7 收口就地加注 · 「贴边件清单」的口径更正:手列清单一律作废,以全树脚本扫描为唯一来源(§C55.3 / §C57.4③;2026-09-13 · T21 追加轮,**上面全部原文一字未改**)**:
251+
>
252+
> - **被更正的对象**:本表上面那条与 [`v0.22` 批 7 节「诚实代价」](../versions/v0.22.md) 里的**「本批 10 个贴边件」是**手列清单**(取值范围 = 本批实际触碰过、且改动当时余量 ≤5 的件 ∪ 两个判据件)⇒ 🔴 **它一律不得作为判据输入**。上游已判其**两次失真**(前几轮转述成「10 条」,而全树真值远大于此)。
253+
> - 🔴 **全树机器扫描(唯一来源;口径 `countLines()`,域 `app/src/**/*.{ts,tsx}`)**:
254+
> · **上游(§C55.3 时点)** = **578** 文件 · **≥300 = 35 条** · **295–299 = 20 条** · **合计 55**。
255+
> · 🔴 **T21 于追加轮重跑**(T23 的三条提交已改动行数 ⇒ **不抄上游读数**)= **579** 文件 · **≥300 = 35 条** · **295–299 = 21 条** · **合计 56**。
256+
> · **差额逐条归因**:① **新件** `app/src/components/FragmentGroupAction.tsx`(**155 行**,T23 的 `125eec85`)⇒ 文件数 **578 → 579**;② `app/src/components/FeedFragmentList.test.tsx` **297 → 299**(T23 的 `125eec85` + 返工 `5d59e332`)⇒ **295–299 档 20 → 21**。🔴 **≥300 档不变(35)**。
257+
> - **域内恰 300(余 0)者 = 6 条**(T21 追加轮实测):`app/src/components/KnowledgeDetailPanel.tsx` · `app/src/components/notes/NotesReadingColumn.tsx` · **`app/src/components/notes/NotesReadingColumn.views.test.tsx`** · `app/src/hooks/useLiveCaptureControl.tsx` · `app/src/ui/primitives/dialogMigration.e.test.ts` · `app/src/views/session/SessionTriTrackView.tsx`。⚠️ **口径更正(按实测)**:其中 **5 条**在上游那份 10 条手列清单里;🔴 **手列清单真正漏掉的域内 300/300 是 1 条** = **`NotesReadingColumn.views.test.tsx`**(§C55.3 同时点名了 `KnowledgeDetailPanel.tsx`,而它**本就在清单内**——转述已两次失真,故**以本表的实测名单为准**)。另:`scripts/check-bundle-budget.mjs` = **300** 但**不在本域**(`.mjs` 不在 `SOURCE_EXT`),它只出现在手列清单里。
258+
> - **本域两张完整表(T21 追加轮实测,供 T22 直接对拍)**:
259+
> · **≥300(35 条)**:`pages/ChatPage.tsx` 579 · `types/knowledge.ts` 559 · `App.tsx` 549 · `components/action-center/ActionCenterPanel.tsx` 538 · `components/GroupSidebar.tsx` 518 · `components/GroupSidebar.test.tsx` 497 · `components/RefineWorkbench.tsx` 497 · `components/KnowledgeCanvasView.tsx` 467 · `components/ProfileDetector.tsx` 448 · `pages/KnowledgePage.tsx` 444 · `components/GoalDetail.tsx` 427 · `components/NoteEditView.tsx` 412 · `components/RichEditorView.tsx` 409 · `components/AiProviderSettings.tsx` 391 · `components/RouteInfoPopover.tsx` 376 · `components/KnowledgeCanvasView.test.tsx` 368 · `types/session.ts` 367 · `components/NotePreviewView.tsx` 364 · `pages/SessionsPage.tsx` 355 · `components/NoteLinkToSystem.tsx` 352 · `components/NoteReadingView.tsx` 343 · `components/EnrichPanel.tsx` 327 · `components/AiConversationDock.tsx` 318 · `components/LiveProfileStrip.tsx` 316 · `components/SessionListPanel.test.tsx` 316 · `components/NoteLinkToSystem.test.tsx` 308 · `types/goals.ts` 308 · `components/KnowledgeTreeView.tsx` 305 · `utils/canvasElements.ts` 301 · 恰 300 的 **6 条**见上。
260+
> · **295–299(21 条)**:`components/ClassroomCapturePanel.tsx` 299 · `components/FeedFragmentList.test.tsx` 299 · **`components/FeedFragmentList.tsx` 299** · `components/RefineLaunchDialog.tsx` 299 · `shell/TopBar.test.tsx` 299 · `ui/primitives/style-seams.test.ts` 299 · `ui/primitives/textBaseline.ts` 299 · `views/session/useTriTrackAlign.test.tsx` 299 · `components/session-detail/useRevealChoreography.test.tsx` 298 · `components/SessionListPanel.tsx` 298 · `ui/primitives/style-contract.test.ts` 298 · `views/note/noteViews.test.tsx` 298 · `components/review/useRevealMemory.test.tsx` 297 · `types/ai.ts` 297 · `ui/primitives/ConfirmDialog.test.tsx` 297 · `components/confirmMigration.test.tsx` 296 · `components/RefineWorkbench.test.tsx` 296 · `ui/primitives/emptyStateRatchet.test.ts` 296 · `ui/primitives/Modal.test.tsx` 296 · `components/session-detail/SessionViewHost.test.tsx` 295 · `pages/NotesPage.tsx` 295。
261+
> - 🔴 **纪律(§C55.3 逐字)**:**「手列清单一律不得作为判据输入;以全树脚本扫描为唯一来源」**。⇒ 🔴 **T22 必须在报告里给完整两张表**(≥300 / 295–299,逐条 `路径 + 实测行数 + 是否本批新增或被改过`),并逐字写「**任何后续编辑必须先拆件**」。🔴 **`FeedFragmentList.tsx` 是本轮新增的「恰 299」**(T23 的返工把它从 300 降到 299 ⇒ **余 1**),**它仍在 ≥295 面内**。
262+
> - 🔴 **同口径已同步进 [`v0.22` 批 7 节](../versions/v0.22.md)**(其「诚实代价」段的贴边件表后已加范围声明与全树读数)⇒ **本条与那张表必须并读**。

0 commit comments

Comments
 (0)