Skip to content

Commit 2ef1579

Browse files
committed
docs: 更正 emit 计数与文件内限定措辞(评审 follow-up)
1 parent 5cfce9b commit 2ef1579

2 files changed

Lines changed: 2 additions & 2 deletions

File tree

‎app/src-tauri/src/commands_goals_milestones.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
//!
33
//! @ai-context: 从 commands_goals.rs 拆出(≤300 行约束 / AGENTS.md §3)。
44
//! 本文件 7 条命令**全部广播 `DataDomain::Goals`**(REQ-278 前端刷新
5-
//! 的唯一触发源),共 **6 处** emit:`add_goal_milestone` 是**唯一无条件**
5+
//! 的唯一触发源),共 **6 处** emit:`add_goal_milestone` 是**本文件内唯一无条件**
66
//! 发的一位(新增即变),其余 5 条包在 `if ok { … }` 里(未落库不发)。
77
//! 搬动时**禁止**改域名、禁止去掉/加上 `if ok` 条件——缩进层级即语义。
88
//! @ai-context: inner 函数统一收 &Db(commands_groups/commands_settlement 先例)

‎docs/superpowers/plans/2026-09-11-frontend-redesign-batch0c3-rust-splits.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ node scripts/line-limits.mjs --full
225225
1. **1s 主循环节拍顺序不可变**:门控 250ms → 暂停检查 → 恢复沿 `sleep(100ms)` → `comp_epoch` → 媒体 1s → 负载 2s → 采样 1s(内含 fg 2s / tier 观测 / override 消费 / 领域 150s / 播放器 5s / 信息 10s)→ 15s 诊断 → `sleep(50ms)`。块间**隐式数据流**必须保持:`stats.diff_pass/ocr_ok` 在 `process_frame` 内更新、**其后**被 tier 观测读差量;`accumulated_ocr_text` 更新后被领域重评读;`got_frame` 由 `process_frame`/`capture_latest_only` **内部清零**(契约注释)再被读。
226226
2. **`if let Some(f) = latest_frame.lock()…clone()` 的守卫活到整个 `if let` 块结束**(edition 2021)⇒ 816–875 与 451–476 的**持锁窗口逐字保留**,**禁止**把 clone 提到 `if` 之前。
227227
3. **嵌套锁顺序不得倒置**:`profile_override` → `applied_profile`(693 取锁 → 728 取锁 → 729 `emit`,IPC 在持锁中发出);700 也在持 `profile_override` 时取 `applied_tier`。
228-
4. **`db 写 → pause.request_* → app.emit` 三元组顺序**在 6 处(424–439 / 460–473 / 517–527 / 830–833 / 848–862 / 869–872)反复出现,不可重排;**15 处 emit 的事件名逐字不变**。
228+
4. **`db 写 → pause.request_* → app.emit` 三元组顺序**在 6 处(424–439 / 460–473 / 517–527 / 830–833 / 848–862 / 869–872)反复出现,不可重排;**16 处 emit 的事件名逐字不变**(⚠️ 本行原写 15 —— 评审复算基线实为 **16** 处、9 个 live 事件名计数不变;分析报告 §1 的 15 是错的,登记表已记录)。
229229
5. **9 条同步原语归属**:`stop`(SeqCst) / `speech_active`(**Relaxed,勿改 SeqCst**) / `subtitle_segments`(762 的守卫必须保持短) / `latest_frame` / `media_sound`(锁中毒按无声处理,**勿加 `unwrap`**) / 4 个 override 槽(本线程是唯一消费者,`guard.take()`) / `pause`(`total_paused_ms` 的唯一维护者是**捕获线程**,本文件只读) / `ScreenCaptureSampler`(**非 Send 的 COM 对象**,本线程内创建与显式释放)。本文件 **0 个 `spawn` / 0 个 mpsc/watch/oneshot**(线程由 `live_session.rs:304` spawn)。
230230
6. **FFI 边界**:`engines.recognize_image_timeout(img, crate::engine::OCR_REQUEST_TIMEOUT)`(H2 的有界等待)**不得**被"统一"成无界 `recognize_image`;`bgraw.is_empty()` 的双重提前返回不可合并;`bgra_to_rgb_image` 返回 `Option` 需失败即返回。
231231
7. **`Ctx` 聚合的坑**:`screen.as_mut()` 与 `&mut liveness`/`&mut trigger` 同时借用 ⇒ 逐块按字段借用而非整 `&mut self`;`image_store`/`foreground_monitor` 是**按值传入的 `mut` 局部量**(非 `Arc`)⇒ 建字段时保留 move 语义;`&ui_junk`(共享借用)与 `&mut last_changed_texts` 混用。

0 commit comments

Comments
 (0)