Skip to content

Commit 167eef8

Browse files
committed
docs(standards): 登记 SessionListPanel 拆分移除记录
1 parent 129b422 commit 167eef8

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
| app/src-tauri/src/capture/audio_loopback.rs | 558 | ADR-007 重连机制(重试循环/退避/恢复回调)内聚于捕获线程实现,拆出需跨函数传递 COM 生命周期参数,内聚性优先;2026-08 A1 硬暂停(端点 Stop/Start + 暂停时长补偿 + 残留缓冲清空)再增 | 若再增长:将 run_capture_inner 拆至 audio_loopback_session.rs |
3636
| app/src-tauri/src/screen_merge.rs | 548 | v0.7.3(REQ-155/158):屏级聚合纯函数域(聚类/行合并/角色分类/块去重)+ v0.7.5 净化纯函数(单字符/边缘条带/零跨度合并/图去重/包含率)——纯逻辑内聚便于单测 | 若再增长:零跨度合并与图去重拆至 screen_fix.rs |
3737
| app/src/components/action-center/ActionCenterPanel.tsx | 537 | v0.20.5 行动中心独立页化:原 ActionCenterOverlay.tsx(509 行登记)更名迁移至 action-center/ 并去遮罩/关闭形态(refreshToken 切回重载)——编排内聚(TD-2026-09-06-G 预留目录兑现);2026-09-06 实测登记 | 若再增长:队列/历史/SOP 三区拆至 action-center/ 子组件 |
38-
| app/src/pages/ClassroomPage.tsx | 534 | 超硬限(>600 行),不允许豁免 —— 装配层页面:左栏配置区(就绪清单/窗口选择/实时捕获/视频导入/OCR 设备/词表/素材)+ 右栏内容区;v0.15 左栏列状态再增;v0.19.2/3(REQ-271/273 + 审查即修:状态机看门狗/预同步/文案收口,+43,实测 745)——**超 600 硬限为预存债务(TD-2026-08-30-A:v0.14 前已越线)持续累增,拆分计划(LiveCaptureCard)顺延待执行** | 若再增长:将实时捕获卡片拆出 LiveCaptureCard(状态与事件监听下沉)——超硬限必须拆 |
3938
| app/src-tauri/src/commands_knowledge_core.rs | 529 | v0.13.1(REQ-202~205):知识体系命令域(概念/模型/引用/审计——commands 9-18)内聚;源 commands_knowledge.rs(18 命令 + 校验)超限按规格 §四拆,本文件承接后半;commands 薄壳 + inner 纯函数 + @ai-context 注释内聚于命令域 | 若再增长:引用与审计拆至 commands_knowledge_links.rs |
4039
| app/src-tauri/src/live_frame_process.rs | 529 | v0.6.0 ADR-011 拆分产物:帧处理域(网格差异触发/两级判变/带外事件驱动/UI 面板抑制/字幕落库)内聚;process_frame 上下文参数 20+;H2 修复(OCR 热路径切超时变体)+ L2 修复(score 口径诚实化)行数微增 + v0.11.5 Task 2 新颖度变化区域接线再增 | 若再增长:handle_subtitle_frame 与 persist_voted_subtitle 拆至 live_subtitle_persist.rs |
4140
| app/src-tauri/src/engine.rs | 526 | 引擎池句柄与同步 API(双 worker 编排 + ADR-009 设备状态 + M7 心跳/失败/缓存计数 + 有界等待变体);三维复审 #5 超时排空机制(drain_asr/ocr_backlog)与 #3 ASR_FILE_TIMEOUT 文件级超时常量接入后,worker 主循环与请求协议按登记计划拆至 engine_worker.rs(见文末"已拆分"注记)回归本值 | 若再增长:排空机制与同步 API 变体拆至 engine_request.rs |
@@ -51,7 +50,6 @@
5150
| app/src-tauri/src/db_sessions.rs | 482 | 会话仓储;批 4 delete_sessions_batch + 审查修复轮 3(transaction() 改造)——2026-09-09 实测纠偏(登记值 394 过期) | 若再增长:recent_ocr_texts 等建议查询拆至 db_sessions_queries.rs |
5251
| app/src-tauri/src/commands_ai_enrich.rs | 479 | v0.8.0 M3(REQ-142)+ F1/F2/F3:知识补充命令域(九子项校验/预估/异步任务/采纳/撤销 + 配额去重门控 + 成本硬拦截 + 任务落库)——与精修共用任务注册表上下文,命令域内聚;2026-09 修复(章节目录注入/逐块审查回执)微增 | 若再增长:门控/拦截拆至 commands_ai_enrich_gate.rs |
5352
| app/src-tauri/src/region_tracker.rs | 478 | v0.4.0 M2(REQ-037)起:ROI 跟踪状态机(播放区域检测/锁定聚簇/重扫/前台切换冻结)+ 纯函数单测内联;与 RoiTracker 状态强耦合 | 若再增长:lock_roi/prior_roi 纯函数拆至 region_lock.rs |
54-
| app/src-tauri/src/live_session_frame.rs | 476 | 超硬限(>600 行),不允许豁免 —— 屏幕采样线程(采样循环/暂停隔离/播放器检测/tier 重评/视频档案重评)单单体函数——TD-24-A 拆分方案已登记(SessionFrameCtx 聚合 + 段落方法提取),本轮评估:与 lib.rs 同批后置 | 若再增长:按 Ctx 聚合方案拆至 live_session_frame_scan.rs |
5553
| app/src-tauri/src/layout_analyzer.rs | 475 | v0.5.0 M3(REQ-047):规则版版面分析(行/列投影 + 表格线检测 + 区域分类启发式)内聚于同一分类管线;审查加固(公式启发 + 低信息纯色方差滤除) | 若再增长:区域分类启发式拆至 layout_classify.rs |
5654
| app/src-tauri/src/commands_session_note.rs | 472 | 既有登记 314 为过期快照——2026-09-06 实测纠偏(v0.20 装载合成/web 分支/批量 inner 扩展后 +144) | 若再增长:convert_to_note 拆至 commands_session_note_convert.rs |
5755
| app/src/components/RefineWorkbench.tsx | 471 | 并排双栏(规则版 + 精修版)+ 章节级 diff 高亮 + 同步滚动 +(自动摘取,待细化) | 若再增长:按职责拆分 |
@@ -72,6 +70,7 @@
7270
| app/src-tauri/src/db_note_groups_tests.rs | 426 | v0.11.0 组数据层测试域 + v0.14.1 删除/影响面用例(级联归零/悬空清理/迁移回归)——单模块 #[path] 挂载(video_profile_tests.rs 同款先例),组删除语义变更集中验证 | 若再增长:删除/影响面组拆至 db_note_groups_delete_tests.rs |
7371
| app/src-tauri/src/analysis.rs | 423 | v0.5.0 M2 起结构化分析编排域(章节/重点/术语/讲者 + 事件消费 + step_boundaries/practice_segments/player_actions 三字段 + 审查修复按类型判定);各机制输出聚合内聚于单一分析函数 | 若再增长:build_chapter_signals 事件版拆至 analysis_signals.rs |
7472
| app/src-tauri/src/artifact_templates_tests.rs | 423 | 产物模板测试域(五档案模板 + 代码块/步骤卡扩展 + 叙事变体 golden)单模块 #[path] 挂载 | 若再增长:代码块/步骤卡组拆至 artifact_code_tests.rs |
73+
| app/src/pages/ClassroomPage.tsx | 421 | 超硬限(>600 行),不允许豁免 —— 装配层页面:左栏配置区(就绪清单/窗口选择/实时捕获/视频导入/OCR 设备/词表/素材)+ 右栏内容区;v0.15 左栏列状态再增;v0.19.2/3(REQ-271/273 + 审查即修:状态机看门狗/预同步/文案收口,+43,实测 745)——**超 600 硬限为预存债务(TD-2026-08-30-A:v0.14 前已越线)持续累增,拆分计划(LiveCaptureCard)顺延待执行** | 若再增长:将实时捕获卡片拆出 LiveCaptureCard(状态与事件监听下沉)——超硬限必须拆 |
7574
| app/src-tauri/src/app_setup.rs | 420 | 本模块承载 setup 的 AppState 初始化(数据目录/DB/引擎池/可校准(自动摘取,待细化) | 若再增长:按职责拆分 |
7675
| app/src-tauri/src/bin/asr_eval.rs | 418 | 目的——"无人工语料也能测 ASR"(2026-09-03 用户裁决①):(自动摘取,待细化) | 若再增长:按职责拆分 |
7776
| app/src-tauri/src/vocab.rs | 416 | 词表域(存储/纠错/候选提取/n-gram 分词)内聚;分词纯逻辑与存储同域便于单测 | 若再增长:collect_tokens/split_runs 拆至 vocab_tokens.rs |
@@ -178,3 +177,4 @@
178177
> 等价性回归修正:SessionDetailPanel 拆分后复核发现,单屏 toast 与框选态随 `SessionScreenCards` 下沉会**随原料视图卸载而丢失**——「保存 toast 的 4s 内」或「框选进行中」切到笔记预览再切回时状态提前消失,属用户可见行为差异(本批红线是纯重构、行为等价)。已按 `fix(ui): 屏卡 toast/框选态上提至数据 hook(等价性回归)` 把两者上提至 `hooks/useSessionDetailData.ts`(该 hook 由面板在早返回之前调用、面板跨视图切换不卸载 ⇒ 状态寿命与拆分前一致;toast 定时器卸载清理随之上移,注册/清理时机同为面板挂载/卸载),屏卡组件改为接收值 + setter 共 5 个 prop:`selectingScreen` / `onSelectScreen` / `panelToast` / `onShowToast` / `onClearToast`。行数影响:面板 288 → 296(≤300)、hook 191 → 237、屏卡 198 → 192;DOM 结构、文案、`seg-`/`ocr-` 锚点、`invoke` 参数与时机均未变。
179178
> 已拆分:app/src/pages/NotesPage.tsx(2026-09-11 批 0-C2 Task 1,分 9 个原子提交 88b45e8c / c1840067 / 6ef2060a / b3adbe66 / 2f11a140 / 9c3cabef / 8ff7d73f / 114e4d41 / 61a4022b,登记值 602 超 600 硬限;⚠️ `FROZEN_OVER_LIMIT` 行的删除**不在本任务任何提交里** —— 它由并行提交 `c409a956`(lib.rs 拆注册清单,其显式路径清单含 `scripts/line-limits.mjs`)连带落库,因为本任务第 1 步已在工作树里把该行删掉;代价是 `c409a956` 那棵树的 `NotesPage.tsx` 仍是 602 行 ⇒ 该提交点 (a) 不自洽(HEAD 自洽、本任务 10 个提交逐个自洽)。复现:`git log -p -- scripts/line-limits.mjs`):按实测结构分析拆出 **9 个单元**——`hooks/useNotesSealedFilter.ts`(50 行,SE 封存 #树洞 显隐开关 + 精确匹配过滤纯函数,refreshToken 由页面注入)· `hooks/useNotesPageEditing.ts`(81 行,编辑态 + Ctrl+E/ESC 单一 window 监听 + 编辑器命令式出口,selectedRef 由页面持有并注入)· `hooks/useNotesBatchActions.ts`(94 行,单删/批量删 + 空组清理留痕 toast 独占实例)· `hooks/useNotesListData.ts`(144 行,列表/过滤态/组与标签色/refreshToken/seqRef/handleNoteChanged 单一真源 + useDbRefresh 常驻订阅)· `hooks/useNotesDeepLink.ts`(106 行,focusNoteId ∪ focusNoteSearch 合并单 effect + focusGroupId 仅过滤不展开)· `components/notes/NotesOverlays.tsx`(69 行,AI 对话框/模型卡槽/图片预览/清理 toast 的条件门控与 key 语义)· `components/notes/NotesReadingColumn.tsx`(150 行,右栏 flex:1 宿主 + editor/auxPanels/headerExtra 三插槽)· `components/notes/NotesListColumn.tsx`(130 行,中栏三形态原位切换 + 折叠态也渲染的 ColumnResizer,顶层 fragment)· `components/notes/NotesGroupsColumn.tsx`(81 行,左栏组侧栏 + 手柄;**第 9 步 = S8 后实测 305 > 300 的兜底**,取自结构分析 §3.2 的 S9 备选,非计划书首列的 8 文件)。主文件回归 **295 行**(纯编排层:页面态 + 三栏/覆盖层装配 + 页面级动作),9 个新文件均 ≤300 行无需登记,本表条目整条移除。`NotesPage` 的 7 个 props 契约零变化,唯一生产消费者 `App.tsx` 未改,`NotesPage.test.tsx`(2 例:编辑完成刷新 / ESC flush 顺序)**零修改通过**。分步实测:602 →(封存)588 →(编辑态)556 →(删除)506 →(列表数据)416 →(深链)371 →(覆盖层)367 →(右栏)318 →(中栏)305 →(左栏)295。**等价证据**:全量 `npx vitest run` 104 文件 / 811 用例全绿(拆前基线 103/809;文件数增量来自并行批次的他人新增,本任务未改任何测试);`npx tsc --noEmit` exit 0;机械不变式探针 `probe-verbatim-strings.mjs`(13 段用户可见文案 + 10 个 IPC 命令名,全树计数)在每步与收尾均一致。**明确保留的既有缺陷**(本批只搬不改):J1-3 大纲折叠死局 / J1-6 大纲宽度假可调 / J1-8 三处硬编码 56px。**未做**:`docs/tech-debt/review-2026-09-11.md` 的 TD-2026-09-09-D 状态回写(该目录未入库,留待 0-C2 收口统一处理)。
180179
> 已拆分:app/src/components/SessionListPanel.tsx(2026-09-11 批 0-C2 Task 5,分 6 个原子提交 2d0cddad / f012968f / 8773a665 / 96dc41cf / 2e339a0c / dd4dabf6,登记值 604 超 600 硬限):按实测结构分析拆出 **8 个单元**——`utils/sessionEligibility.ts`(17 行,`isSessionConvertible` 纯函数:行内 canConvert / 批量 eligible 过滤 / 右键菜单 canConvert 三处同口径)· `hooks/useSessionSelection.ts`(102 行,多选态机:selected/anchor/selectionMode + `visibleOrderRef` 同 tick 镜像 + 裁剪 effect 的 `changed ? next : cur` 同引用 + clearSelection/exitBatch/enterSelectionMode/rowOpen/rowModifier/toggleAllVisible;visibleOrder 由面板注入而不在本 hook 推导)· `hooks/useSessionListView.ts`(105 行,matchFilters/sorted/filtered/groupedView/visibleOrder 纯派生链 + StatusFilter/ConvertedFilter/SortBy 三类型)· `hooks/useSessionSearch.ts`(76 行,三模式搜索态 + **本文件唯一两个 invoke 落点** search_session_segments / search_ocr_blocks)· `components/SessionSearchBar.tsx`(84 行,三模式单输入框)· `components/SessionSearchHits.tsx`(80 行,段命中/画面命中两视图)· `components/SessionListBody.tsx`(117 行,列表容器 + 全部分支 + renderRow 行工厂)· `components/SessionSelectionToolbar.tsx`(122 行,**一个文件两个导出**:具名 `SessionSelectionControls`=头部 chip + 「选择」按钮、默认导出=底部批量栏)。主文件回归 **298 行**(纯编排层),8 个新文件均 ≤300 行无需登记,本表条目整条移除。18 个 props 契约零变化,唯一生产消费者 `pages/SessionsPage.tsx` 未改,`SessionListPanel.test.tsx`(316 行 / 9 例,invoke 全 mock)**零修改通过**。分步实测:604 →(可转化纯函数)598 →(选择态机)547 →(视图模型)491 →(搜索三件套)371 →(列表区)342 →(选择与批量栏)299 →(JSDoc/注释再平衡)298。**★ 与计划书/分析报告的两处系统性偏差(读码后以代码为准)**:① 分析报告 §3.1/§4.1 把 `batchBusy` + `batchBusyRef` + `runBatchConvert` 划给 Toolbar —— 实测**批量转会先 clearSelection 使批量栏立即卸载**,状态随组件走会让「pending 期间重新勾选」的连点拦截失效(行为不等价)⇒ 三者与新增 `runBatchDelete` **一律留在面板**,Toolbar 做成纯展示;R5「state 与 ref 必须同属一处」仍满足。② 分析报告把「chip + 「选择」按钮」(列表头部,L346–362)与「底部批量栏」(L527–586)同列进一个组件,但两者 DOM 位置不相邻 ⇒ 同一文件导出两个组件分别就位,DOM 层级与拆前逐字一致(Fragment 不入 DOM)。**Esc 三级退出链(R1,最高危)**:监听**留在面板**(deps `[contextMenu, selectionMode, selected.size, exitBatch]` 逐字不变),**未新建第二个 window keydown**,菜单优先 `return` ⇒ 菜单开启时按 Esc 只关菜单、选集保留。同时保留 R2(visibleOrderRef 镜像)/R3(裁剪返回同引用)/R4(全选三态口径=visibleOrder 而非 filtered)/R6(批量转「转前清选集」与批量删「成功后清选集」**不对称**,未统一)。**机械等价证据**:`probe-verbatim-strings.mjs`(35 段用户可见文案 + 2 个 IPC 命令名,按 app/src 全树计数)在拆前快照与**每一步 + 收尾**均 100% 一致;`npx vitest run` **104 文件 / 811 用例全绿**(与拆前基线逐数相同,用例数不减);`npx tsc --noEmit` exit 0;`node scripts/line-limits.mjs --full` exit 0,>600 硬限 9 → 7。**登记表人工列**:第 1 步曾把本行「拆分计划」列改写为八文件边界(**该文本随第 6 步 `--write` 整行移除而不再出现在本表**,逐字存档于提交 `2d0cddad` 的 docs/standards/line-limit-exemptions.md)——「8 文件边界」的权威记录即本条目。**未验证(诚实单列)**:`SessionRowContextMenu` 全仓无测试文件 ⇒ 右键菜单坐标钳制(232×300 硬编码)、危险项红字、`canConvert` 显隐、透明背板收起只能人工验证;本任务**未跑 WebView2 手工核对**(详见 `.superpowers/sdd/2026-09-11-frontend-redesign-batch0c2-frontend-splits/task-5-report.md`)。
180+
> 已拆分:app/src/components/NoteListView.tsx(2026-09-11 批 0-C2 Task 2,登记值 654 超 600 硬限;`FROZEN_OVER_LIMIT` 行由**本任务**在第 1 步删除,但该行删除被并行提交 `14b8aaa6`(拆 types.rs 第 2 步,其显式路径含 `scripts/line-limits.mjs`)在工作树里连带落库 —— 与 Task 1 同款跨任务连带,复现:`git log -p -- scripts/line-limits.mjs`):按实测结构分析拆出 **9 个单元**——`utils/noteSectionModel.ts`(117 行,展示节/全局可见序/scope 键/裸折叠键/手动底序纯函数,含 `grouped` 死载荷去重后的单次分桶)· `hooks/useNoteSections.ts`(91 行,裸键折叠记忆 localStorage 读写 + treeMode/sections/visibleOrder 接线)· `hooks/useNoteOrders.ts`(57 行,序行 store:note_order_list/note_group_order_list 拉取 + note_order_save/note_order_clear 整表覆写 + refreshToken 重拉;**兑现本表原「拖拽/移动接线拆至 useNoteOrders.ts」计划**)· `hooks/useNoteMoves.ts`(173 行,拖拽/移动三入口 moveToGroup/moveWithinScope/handleDropOnRow + **共用同一 `dropBusyRef` 实例**——硬性同文件约束)· `hooks/useNoteListSelection.ts`(133 行,多选三通道 + 菜单三态 + **唯一 Esc handler 优先级链** + visibleIdsRef 镜像 + 选集裁剪 + 批量删除)· `hooks/useNoteMarquee.ts`(76 行,划选整块:window 四路监听 + rAF 节流 + `elementFromPoint`→`closest('[id^="note-row-"]')` 判定逐字不动)· `components/NoteListBody.tsx`(110 行,滚动容器 + 节/行装配 + 行色条)· `components/NoteListToolbar.tsx`(95 行,标题栏 + 搜索/排序/标签;导出 `ghostBtn` 供批量菜单复用)· `components/NoteListBatchMenu.tsx`(100 行,**一个文件两个导出**:`NoteListBatchBar` 批量栏 + `NoteListBatchContextMenu` 选集菜单(受控,菜单态与 Esc 链留在 selection hook,防双 window keydown))。另有 1 个独立小提交删除 `grouped` 死载荷(−14 行,输出不变)。主文件回归 **241 行**(纯编排层:props + 5 个 hook 组合 + orderActions + JSX 装配),9 个新文件均 ≤300 行无需登记,本表条目整条移除。**公共 API 冻结零变化**:default export · `export type SortMode` · 再导出 `{ parseTags, fmtDate }`(NoteReadingView / parseTags.test 依赖)· 27 个 props 契约不变,唯一生产消费者 `pages/NotesPage.tsx` 未改。分步实测:654 →(去重)642 →(节模型)582 →(序行 store)556 →(移动接线)442 →(多选与菜单)365 →(划选)328 →(折叠与节派生)290 →(列表体)267 →(顶栏)235 →(批量栏与选集菜单)230 →(头注释收敛)241。**等价证据**:全量 `npx vitest run` 104 文件 / 811 用例全绿(拆前基线 103/809;**本任务新增 `components/NoteListView.fold.test.tsx`(78 行 / 2 例)**=唯一增量,既有 3 个 NoteListView 测试文件零修改通过);`npx tsc --noEmit` exit 0;机械不变式探针 `probe-verbatim-strings.mjs`(27 段用户可见文案 + 5 个 IPC 命令名,全树计数)在**每一步与收尾**均完全一致。**R3 键派生守卫**:新增测试对折叠记忆的**写**(`notes:group-fold:1`、断言不写 `notes:group-fold:g:1`)与**读**(预置裸键 ⇒ 组 body 不渲染)两侧断言裸键,防 scopeKey 误用导致用户折叠记忆静默失效(既有 tree.test.tsx 每测 `localStorage.clear()` 恰好掩盖该错)。**未验证(诚实单列)**:WebView2 真实 HTML5 DnD 全矩阵(组头/行间/跨组/置顶行/折叠目标/平铺禁用/并发二次 drop)· 划选真实指针命中与拖出窗口松手 · 折叠记忆跨重启保持 · 空组清理留痕 toast —— 本任务**未跑 Tauri 真机手工核对**(详见 `.superpowers/sdd/2026-09-11-frontend-redesign-batch0c2-frontend-splits/task-2-report.md`)。

0 commit comments

Comments
 (0)