Skip to content

Commit 6c33318

Browse files
committed
docs(standards): 登记 commands_ai_refine 拆分记录
1 parent 5b9a4b5 commit 6c33318

1 file changed

Lines changed: 1 addition & 0 deletions

File tree

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,3 +189,4 @@
189189
> **★ 与分析的实现偏差(实测修正,2 处)**:① 分析 §2/§8-S1..S3 提议「`lib.rs:399` 后插 3 行 `mod`」,**计划书 Global Constraints 优先**:3 个模块全部由**父模块自己**用 `#[path]` 声明(`mod render;` / `mod purify;` / `mod chain;`),`lib.rs` **一行未动**(同时避开分析 U6 指出的并行 `lib.rs` 冲突面)。② `render_screen_points` 在拆后**全仓无任何消费者**(唯一调用点在过滤链内)⇒ 若 chain 直接写 `super::render::render_screen_points`,父模块的 `pub use` 绑定就成了 `unused_imports` 警告(`-D warnings` 下 = clippy error +1);故 chain 改为**经父模块再导出消费** `use super::render_screen_points;`,既消除警告又保住 `crate::note_filter::render_screen_points` 这个拆前就存在的入口名。③ S2 中间步主文件仍需 `use self::purify::{concat_transcript, is_filler_only, is_fragment, is_purified_empty, purify_segment};`(`filter_note_transcript` 当时尚未迁出),S3 随函数迁出**同步下线**该行(否则 `unused_imports`)——这是分 3 步走带来的、每步都自洽的必要动作。
190190
> **★ 门禁与未验证(诚实单列)**:`cargo build` exit 0(三步各一次,S3 后无新增警告)· `cargo test --test app_lib_tests` **2359 passed / 0 failed / 6 ignored**(三步各一次,与开工基线逐项相同;开工时任务书写 2357,实测 2359 = 并行 Task 2 新增 2 个 `types_contract_tests` 快照用例,**用例数不减**)· 域内 **62 例逐文件计数不变**(`note_filter` 25 = tests 11 + golden 14 / `note_filter_ai` 13 / `note_filter_discourse` 8 / `note_filter_ocr` 16)· `node scripts/line-limits.mjs --full` exit 0(`>600` 硬限 **0**、棘轮名单**空**)· `cargo clippy -- -D warnings`:**未采到干净基线** —— 开工时那次采集被本任务自身的中间编辑态污染(报 8 个 E0255/E0425,均属"再导出已加、定义未删"的瞬时态),随后共享工作树持续被 4 位并行实施者的中间态打断(`ai_refine_task/vision.rs` 未闭合定界符等),故本任务**只给出收工侧实测**:S3 后 `cargo build` **0 warning**,新增 3 个文件无 `unused_imports`/`dead_code` 类告警(期间唯一一次自引入的 `unused_imports` 已在 `38557f8b`→S3 之间修正)。**未验证**:真机 IPC 冒烟未做(本任务不改命令名/事件名/`invoke` 面);`.qoder/repowiki/**` 里 `note_filter.rs#L…` 行锚点随拆分失效(生成物,非门禁)。
191191
> **★ 2026-09-11 逐条复核(批 0-C2 Task 6「登记表收敛」)**:本节当时共 **31 条记录**(计划书写 16 条、派发词写 22 条 —— 差额是 0-C2/0-C3 各任务陆续回写所致),逐条按**当前实测**核对「≤300 无需登记 / 登记移除」结论(口径 = `scripts/line-limits.mjs` 的 `countLines`,即全部行数含空行)。**6 条被否证、已就地标注更正**(记 `⚠️ 2026-09-11 复核更正`,写明复核值,不删除):`engine_worker.rs` **321** · `db_migrations.rs` **573** / `db_notes.rs` **366** / `db_notes_tests.rs` **337** · `live_session.rs` **394** / `live_session_lifecycle.rs` **376** · `GroupSidebar.tsx` **519** / `RouteInfoPopover.tsx` **375** · `dxgi_capture.rs` **331** · `NoteEditView.tsx` **411**(原更正只写到 306,续增后补记)—— 这些文件均已在上表 301–600 档登记(生成器补登)。**2 条为信息性补充**(记 `(2026-09-11 复核:…)`):`live_frame_process.rs` **529** · `live_session.rs` 394 / `live_session_frame.rs` **174**。**其余记录逐条复核实测值与记录一致**(`video_profile` 285 + 2 文件 157/236 · `lib.rs` 577 / `app_commands.rs` 503 · `live_pipeline_diag.rs` 已删除 · `streaming_asr` 466 / `streaming_endpoint.rs` 114 · `lib.rs` v0.7.5 一条与「重新越线并登记」自洽 · `note_filter.rs` v0.7.5 → `note_filter_ai.rs` 255 · `ai_refine_protocol.rs` 295 · `EnrichPanel.tsx` 324(既有更正成立)· `app/src/types.ts` 20 · `SessionDetailPanel` 296 + 4 文件 · `NotesPage` 295 + 9 文件 · `SessionListPanel` 298 + 8 文件 · `NoteListView` 241 + 9 文件 · `ClassroomPage` 278 + 7 文件 · `artifact_templates` 222 + 2 文件 · `types.rs` 32 + 6 文件 + 契约测试 129 · `live_session_frame` Task 3 → 174 + 6 文件 · `ai_refine_task` 260 + 4 文件 277/117/77/26 · `commands_goals` 272 + 3 文件 197/181/97)。**未纳入本次结论**:`db_goals.rs` 与 `note_filter.rs` 两条记录属**进行中**任务(其实施者仍在续拆 ⇒ 数字仍在变),故只读不改、留待其自身收尾回写。复核一律**不做删除** —— 本节是历史证据链,被否证条目只就地标注复核值与日期。
192+
> 已拆分:app/src-tauri/src/commands_ai_refine.rs(2026-09-11 批 0-C3 Task 4,**分 4 个原子提交** `d2443ce9`「步 1 — 目录模块 + dto/registry/gate」/ `e41023a6`「步 2 — 工作台域」/ `d012c219`「步 3 — 会话生命周期域」/ `e962b22a`「步 4 — 采纳落库/历史域」,登记值 751 超 600 硬限;⚠️ **`FROZEN_OVER_LIMIT` 行的删除不在本任务任何提交里** —— 本任务第 1 步在工作树里删掉该行后,它被并行提交 **`a0c5e62f`**(「拆 note_filter 第 1 步 — 渲染层」,其显式路径含 `scripts/line-limits.mjs`;同一提交还连带带走了 `db_goals.rs` 那行,见 `git log -S" 'app/src-tauri/src/commands_ai_refine.rs'," -- scripts/line-limits.mjs` = 只有 `a0c5e62f` 与本工具引入提交 `8ba2cf84`)。代价:`a0c5e62f` 那棵树里 `commands_ai_refine.rs` 实测仍 **751 > 600** 而棘轮名单已空 ⇒ **该提交点触发规则 (a)**;HEAD 与本任务 4 个提交各自自洽。同样地,本任务第 2/3 步的 `--write` 结果被并行提交 `74e9a5c6`/`ab515560` 连带落库(`--write` 幂等 ⇒ 内容相同,非丢失)):改成**目录模块**(`app/src-tauri/src/commands_ai_refine/`,**不再有 `commands_ai_refine.rs`** ⇒ 二者不可并存 E0761)——`mod.rs`(**37 行**:原 12 行文件头逐字 + 子模块职责注释 + 6 条 `mod` 声明 + 4 条门面重导出)· `dto.rs`(**66 行**:4 个 IPC 契约类型 `AiRefineResult`/`RefineStrategyInfo`/`AiTaskHandle`/`RefineEstimateView`,原 51–101)· `registry.rs`(**110 行**:`TASKS_CAP` + `AiTaskEntry` + `set_task`/`trim_tasks`/`task_seq`/`task_seq_lower_bound`/`claim_task_id`/`task_registry`,原 35–49 + 573–642)· `gate.rs`(**60 行**:`BALANCE_SAFETY_FACTOR` + `ensure_balance_for`,原 644–688,**兑现本表原「拆分计划」列写的门控拆分**)· `workbench.rs`(**212 行**:`WorkbenchData` + `refine_workbench` + `stats_from` + **整个内联 `#[cfg(test)] mod tests`(2 用例)**,原 447–571 + 690–751)· `session.rs`(**260 行**:`MOCK_ENV` + 6 条会话生命周期命令,原 33–34 + 103–330)· `apply.rs`(**132 行**:`ai_task_history` + `ai_refine_apply`,原 332–445)。7 文件全部 ≤300 ⇒ 本表条目整条移除(本文写作时表中已无该行)。**★ 外部引用面零改动**:`lib.rs:48` 的 `mod commands_ai_refine;` **一行未动**(`mod.rs` 正是它的解析目标),10 文件 20 处 `crate::commands_ai_refine::X` 引用逐字未改(`pub use` 4 项 / `pub(crate) use` 3 项按原声明可见性分开写,避免 E0365;`dto/gate/registry` 保持私有 `mod`,只有承载命令的 3 个子模块写 `pub(crate) mod`)。**★ D2 注册路径(本任务唯一静默风险面)**:9 条命令定义随域下沉,`app/src-tauri/src/app_commands.rs` 的注册条目**同批**改成三段路径(步 1 0 条 / 步 2 1 条 `refine_workbench` / 步 3 6 条 session / 步 4 2 条 apply),IPC 名 = 路径**末段**(`tauri-macros-2.6.3/src/command/handler.rs:46-58`)⇒ **9 个 IPC 名逐字不变**,前端 `invoke` 与 capabilities ACL 零影响。机械证据:`node scripts/check-command-registry.mjs` = ✅ 定义 334 / 注册 334 / 重复 0;`probe-registry-parity.mjs verify …snap-registry-baseline.json app/src-tauri/src/app_commands.rs` = ✅ 按末段名 **334 条逐条相同** + 打印 9 条本任务的「路径前缀变化」(`refine_workbench` 属步 2,其余 8 条属步 3/4)。**★ 与计划书/分析报告的四处偏差(读码 + 编译器实测后以代码为准)**:① **`mod workbench;` 必须写成 `pub(crate) mod workbench;`(session/apply 同)** —— 注册清单在 `app_commands.rs`(crate 根下的**兄弟**模块)按 `crate::commands_ai_refine::workbench::refine_workbench` 解析,裸 `mod` 下当场报 **E0603「module `workbench` is private」×2**(实测,见 `cargo build` 首轮)。② **`pub use workbench::WorkbenchData;` 未写进门面** —— `WorkbenchData` 在原文件的模块外**零 Rust 引用**(前端有自己的 TS 接口),私有模块里的 `pub use` 会触发 `unused_imports`(实测 warning);删掉它不改变任何外部可见面(前端经 `invoke` 拿 JSON,不依赖 Rust 侧路径)。③ **`gate.rs` 与 `dto/registry` 同落步 1**(不是计划书的步 2):实测若只拆 `dto`(51 行)+ `registry`(86 行),主文件 ≈630 **仍 >600**,棘轮行删不掉 ⇒ 把 45 行的 `gate` 一起放进步 1,实测 **582 ≤600**,同提交删棘轮行(但该删除被 `a0c5e62f` 连带,见上)。④ **`stats_from` 保持私有,零可见性放宽**:分析 D4 的 `pub(super)` 是为「`refine_workbench` 留在主文件」的中间态准备的;终态把 `refine_workbench` 与 `stats_from` 放进同一文件(`workbench.rs`)⇒ 两处调用(524/540 原行号)与测试同文件,**D4 的放宽不再必要**,本任务实际**未改任何既有项的可见性**。**★ 行为等价证据(`superpowers/sdd/…/tmp/task4-verify.mjs`,可复跑)**:① 每个新文件的正文块 = 拆前 751 行快照对应行区间的**逐字拼接**(逐字节比较,含 CRLF),段落边界全部落在**条目边界**上(每段首行是 `///`/`pub`/`const`/`#[`,末行是该项的收尾)——**没有任何函数被跨文件切开** ⇒ 语句顺序、`await` 位置、`if let`/早退、表达式求值顺序机械保持;② **覆盖**:快照非空行(除 `use` 块 14–31)**700 条 ↔ 正文块非空行 700 条**(零丢行、零多行);③ **不可测维度计数对拍**(两侧都排除文件头与 `use` 块):`#[tauri::command]` 9/9 · `pub struct` 6/6 · `#[serde(rename_all="camelCase")]` 5/5 · `.lock()` 锁点 **12/12** · `drop(guards)` 1/1 · `spawn_blocking` 2/2 · `fetch_add` 5/5 · `Ordering::Relaxed` 1/1 · `emit(` 1/1 · `"ai:task-update"` 2/2 · `#[cfg(test)]` 1/1 · `#[test]` 2/2 · `eprintln!` 2/2 · `let _ =` 3/3。**★ 计划「等价核对」四条逐条结论**:① `ai_refine_start`(原 137–250)**作为一整段 114 行逐字搬运**到 `session.rs`,段落顺序(授权闸门 → mock → 密钥 → **去重 → 余额硬拦截 → 配额 try_consume + 显式 `drop(guards)`** → `claim_task_id` → 注册表 insert+`trim_tasks` → `insert_ai_task` 落库(失败仅 `eprintln!`)→ `resolve` → `spawn_blocking`)**不可重排、不可能提前/延后 await**(同一函数体内逐字未动,机械可证);② 9 条注册路径与 `check-command-registry` 全绿 + 探针按末段名逐条相同(见上);③ 本文件覆盖极低(**9 个 command 与 `ensure_balance_for`/`set_task`/`trim_tasks` 全仓 0 测试**)⇒ 已额外做逐字 + 计数对拍兜底,**真机 IPC 冒烟未做(诚实单列:本任务未起 dev server,9 个入口的可达性只由编译期路径解析 + 注册门禁 + 探针兜底)**;④ 既有缺陷**一处未修**(`BALANCE_SAFETY_FACTOR` 与文案 "×1.2" 重复、`let _ =` 吞采纳标记/成本回填、`set_task` 锁中毒静默、去重 TOCTOU、async 内同步余额 HTTP、`MOCK_ENV` 直读全局 env、`unwrap_or(50).min(200)` 魔法上界、`session_id<=0` 四处重复)。**门禁**:`cargo build` exit 0(4 步各一次,零新增警告)· `cargo test --test app_lib_tests` **2359 passed / 0 failed / 6 ignored**(与基线逐字相同;步 4 首轮 `ffmpeg::tests::run_captured_handles_large_output` 因 5 个并行 cargo 抢占导致 cmd 10s 超时失败一次,**重跑即绿**,与本改动无关)· `cargo clippy -- -D warnings` **15 error = 基线 15(逐条同名,未增)** · `node scripts/line-limits.mjs --full` **exit 0**,`>600` **0**(棘轮名单已空),本文件条目整条移除 · 7 文件实测 **37/66/110/60/212/260/132**(合计 877 = 751 + 126 行新写的文件头/`use`/`mod`/门面)。

0 commit comments

Comments
 (0)