Skip to content

Commit 64b4977

Browse files
committed
fix(review): 保鲜 diff 逐步比对/校对重跑清 pending/SE 精确过滤 + 豁免与开放项登记
1 parent 44f2271 commit 64b4977

6 files changed

Lines changed: 43 additions & 16 deletions

File tree

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,11 @@ pub async fn proofread_run(
146146
}
147147
}
148148
let db = st.db.clone();
149+
// 审查 TD-B:重复 run 前清上次 pending(采纳/回退历史保留——与 second_pass
150+
// 重跑语义对齐;清理失败不阻断(记录日志,重复建议由裁决面兜底)
151+
if let Err(e) = db.clear_refine_drafts(session_id, ORIGIN_PROOFREAD, crate::db_session_refine::STATUS_PENDING) {
152+
eprintln!("[Proofread] 旧 pending 清理失败(继续本次校对): {e}");
153+
}
149154
let material = load_material(&db, session_id)?;
150155
let flat = flatten(&material);
151156
let capped = flat.len() > MAX_SENTENCES_PER_RUN;

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -311,19 +311,19 @@ impl Db {
311311
}
312312
stats.total += 1;
313313
}
314-
// 保鲜 diff:模板当前行范围 vs 首步快照有无出入(执行即保鲜——提示修订)
314+
// 保鲜 diff(2026-09-06 审查 TD-C 修):模板当前行范围整段 vs 启动快照
315+
// 全步骤文本——第 2..N 步改动同样提示(原实现仅比首步)
315316
let note = match self.get_note(run.note_id)? {
316317
Some(n) => n,
317318
None => return Ok(Some(SopRunDetail { run, steps, stats, freshness_changed: false })),
318319
};
319320
let tmpl = self.get_sop_template(run.template_id)?;
320-
let current_first = tmpl.as_ref().map(|t| {
321-
lines_to_steps(&note.content, t.start_line, t.end_line)
322-
.first()
323-
.map(|s| s.clone())
324-
});
325-
let snapshot_first = steps.first().map(|s| s.text_snapshot.clone());
326-
let freshness_changed = current_first.flatten() != snapshot_first;
321+
let current_text = tmpl
322+
.as_ref()
323+
.map(|t| lines_to_steps(&note.content, t.start_line, t.end_line).join("\n"))
324+
.unwrap_or_default();
325+
let snapshot_text = steps.iter().map(|s| s.text_snapshot.as_str()).collect::<Vec<_>>().join("\n");
326+
let freshness_changed = current_text != snapshot_text;
327327
Ok(Some(SopRunDetail { run, steps, stats, freshness_changed }))
328328
}
329329

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,10 @@ fn freshness_diff_detects_template_edit() {
112112
let run_id = db.start_sop_run(&tmpl).unwrap();
113113
let before = db.sop_run_detail(run_id).unwrap().unwrap();
114114
assert!(!before.freshness_changed);
115-
// 编辑正文(改首步文字)→ 保鲜 diff 亮起
115+
// 编辑正文(改第二步行文字——首步不变)→ 保鲜 diff 亮起(TD-C:逐步 diff)
116116
let note = db.get_note(nid).unwrap().unwrap();
117-
let changed = note.content.replace("第一步 卸眼唇", "第一步 卸眼唇唇彩");
117+
let changed = note.content.replace("第二步 卸全脸", "第二步 卸全脸(按摩)");
118118
db.update_note(nid, &note.title, &changed).unwrap();
119119
let after = db.sop_run_detail(run_id).unwrap().unwrap();
120-
assert!(after.freshness_changed, "执行即保鲜:正文有出入提示修订");
120+
assert!(after.freshness_changed, "执行即保鲜:第二步行文字有出入也提示修订");
121121
}

‎app/src/pages/NotesPage.tsx‎

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -382,21 +382,23 @@ export default function NotesPage({ focusNoteId, focusNoteSearch, focusGroupId,
382382
}, [refreshToken]);
383383

384384
// v0.11.0:组过滤在客户端生效(列表已全量加载;组切换零请求)
385-
// v0.20.3(REQ-301):SE 封存默认不可见——#树洞 类 tag 笔记从默认列表排除
385+
// v0.20.3(REQ-301)+2026-09-06 审查(TD-E):SE 封存默认不可见——#树洞
386+
// tag 精确匹配(防“树洞XX”子串误滤);除显式显隐开关外任何视图态均排除
386387
const visibleNotes = useMemo(() => {
387388
let list = groupFilter === null ? notes : notes.filter((n) => n.group_id === groupFilter);
388-
if (!sealedVisible && tagFilter == null) {
389+
if (!sealedVisible) {
389390
list = list.filter((n) => {
390391
try {
391392
const tags = JSON.parse(n.tags ?? "[]") as unknown[];
392-
return !tags.some((t) => String(t).includes("树洞"));
393+
const sealed = tags.some((t) => String(t).replace(/^#/, "").trim() === "树洞");
394+
return !sealed;
393395
} catch {
394396
return true; // tags 非 JSON(旧数据)→ 不误滤
395397
}
396398
});
397399
}
398400
return list;
399-
}, [notes, groupFilter, sealedVisible, tagFilter]);
401+
}, [notes, groupFilter, sealedVisible]);
400402

401403
// v0.14 B:组映射(noteId → 组,resolveNoteColor 组继承档用)
402404
const groupMap = useMemo(() => new Map(groups.map((g) => [g.id, g])), [groups]);

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# 单文件行数豁免登记(AGENTS.md §3:单文件 ≤300 行;300-600 行须登记本清单)
1+
# 单文件行数豁免登记(AGENTS.md §3:单文件 ≤300 行;300-600 行须登记本清单)
22

33
> 登记规则:文件超过 300 行时在此登记(文件 + 行数 + 豁免理由 + 拆分计划)。
44
> 超过 600 行必须硬拆(不允许豁免)。
@@ -71,6 +71,11 @@
7171
| app/src-tauri/src/db_fragments.rs | 309 | 碎片数据层 + v0.19.0(REQ-258)索引生命周期钩子(建/删/升笔记事务内清块重建,+16)——promote 显式事务与知识链接清理同域 | 若再增长:promote_fragment_to_note 事务拆至 db_fragments_promote.rs |
7272
| app/src-tauri/src/windows.rs | 342 | 窗口枚举/评分域 + v0.19.2(REQ-271/272):CaptureWindow.zOrder/systemWindow 字段 + 抖音/快手/B站客户端评分表(+28)——枚举系统副作用与评分纯函数同域便于单测(既有模式) | 若再增长:z 序/系统标记纯函数拆至 windows_meta.rs |
7373
| app/src-tauri/src/live_session_lifecycle.rs | 379 | 会话启动/预热生命周期 + v0.19.2/3(REQ-273 + 审查即修:锁外等待+枚举化+辅助函数抽取,+78)——start/prepare/release 与等待/回退策略强耦合于 impl 生命周期域 | 若再增长:wait_prepared_ready 与回退策略拆至 live_session_start.rs |
74+
| app/src-tauri/src/commands_proofread.rs | 351 | v0.20.2(REQ-270)LLM 校对命令域(预估/门控/分块请求/裁决源列表/失败记账)内聚;2026-09-06 实测登记(TD-2026-09-06-G) | 若再增长:record_proofread_failure 与载荷回写拆至 proofread_apply.rs |
75+
| app/src-tauri/src/commands_web_inbox.rs | 336 | v0.20.4(REQ-304)扩展收件命令域(起停/状态/HTTP 小循环/投递收口/图落盘)内聚;2026-09-06 实测登记(TD-2026-09-06-G) | 若再增长:HTTP 连接处理拆至 web_inbox_http.rs |
76+
| app/src-tauri/src/db_sop.rs | 433 | v0.20.3(REQ-296/297)SOP 三表数据域(模板/run/步骤/保鲜/聚合)+ 审查加固(保链更新/幂等守卫/步数计数)内聚 | 若再增长:run 执行族拆至 db_sop_run.rs |
77+
| app/src-tauri/src/commands_after.rs | 302 | v0.20.3(REQ-294/295/299/300)收尾命令域(批决议/导出/练习/问题)内聚;2026-09-06 实测登记(TD-2026-09-06-G) | 若再增长:批决议核心拆至 weekly_resolve.rs |
78+
| app/src-tauri/src/commands_session_note.rs | 458 | 既有登记 314 为过期快照——2026-09-06 实测纠偏(v0.20 装载合成/web 分支/批量 inner 扩展后 +144) | 若再增长:convert_to_note 拆至 commands_session_note_convert.rs |
7479

7580
## 前端(app/src/,数字来自前端审查快照;Task #9/10 拆分进行中)
7681

@@ -103,6 +108,10 @@
103108
104109
> 登记移除:ai_refine_protocol.rs(2026-09-05 审查 M3)——实测 295 ≤300 无需登记(流式渲染/解析新增后仍合规),原登记 340 不实已撤
105110
| app/src/components/NoteListView.tsx | 524 | v0.19.7(REQ-287)列表交互重构:选择三通道/批量模式/拖拽矩阵(组头与行落点)/手动序消费/划选锚点/选集菜单——编排内聚;纯选择逻辑已拆 noteSelection.ts、组头载荷已拆 NoteTreeSection 导出 | 若再增长:拖拽/划选接线拆至 useNoteListDnD.ts;手动序拆至 useNoteOrders.ts |
111+
| app/src/components/ActionCenterOverlay.tsx | 509 | v0.20.3(REQ-293/294/296/299/300)行动中心 Overlay(裁决四区/批量周回顾/SOP 库/练习问题入口)编排内聚;2026-09-06 实测登记(TD-2026-09-06-G) | 若再增长:队列/历史/SOP 三区拆至独立组件(按 action-center/ 目录) |
112+
| app/src/components/SessionDetailPanel.tsx | 631 | 会话详情面板(原料/预览/离线精修/校对/web 早返回/术语图集);v0.20 系列 +52 后**超 600 硬限**(前置 v0.19.x 已越线,预存债务随 TD-2026-09-06-G 登记)——2026-09-06 实测纠偏(登记值 371 过期) | **超硬限必须拆**:web 早返回与精修区拆至 SessionWebView.tsx / SessionPass2Section.tsx |
113+
| app/src/pages/NotesPage.tsx | 616 | 三栏笔记页编排(组侧栏/列表/阅读编辑 + 行动中心/模型卡/AI/封存过滤);2026-09-06 实测纠偏(登记值 572 过期;超 600 为既有累增债务随 TD-2026-09-06-G 登记) | **超硬限必须拆**:行动中心/封存/模型卡 state 族拆至 useNotesPageActions.ts |
114+
| app/src/components/GroupSidebar.tsx | 442 | 组筛选侧栏(分区/拖拽/徽标/行动中心 ✅ 入口/新建/路由浮层编排);2026-09-06 实测纠偏(登记值 413 过期) | 若再增长:徽标聚合拆至 useGroupSidebarCounts.ts |
106115

107116
## 已拆分 / 登记移除记录
108117

‎docs/versions/v0.20.md‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,17 @@
100100
4. REQ 编号登记(需求池)与核心处理/闪卡轮次的衔接裁决
101101
5. run 完成后可选写一行 meta 到正文末尾(默认关)
102102

103+
## 2026-09-06 审查登记(TD-2026-09-06-A~H 摘要,权威清单见归档)
104+
105+
- **A 有效轴窗边裁剪**:跨采纳窗段覆盖 ≥60% 整段让位,窗外 ≤40% 内容可能缺位(clip 未实现——注释自我矛盾待修)
106+
- **B 校对执行模型**:async 内同步分块请求阻塞 worker(长会话),重复 run 未清上次 pending(护栏部分已修)
107+
- **C 保鲜 diff**:SOP run 结算仅比首步;start 时段漂移 stale 提示未实现
108+
- **D 执行器差异**:READ-DO/CONFIRM 渲染无实质差异;证据图片三入口上传流未接(现为相对路径输入)
109+
- **E SE 覆盖**:封存过滤仅 NotesPage 默认列表(复习面/检索/组视图未覆盖)
110+
- **F web 后置**:kind=web 预览后端未统一路由(前端已规避);渲染型快照与截图兜底、扩展商店发布未做
111+
- **G 基建**:token 非 CSPRNG/ACL 注释漂移;行数豁免登记已按实测更新(命令层/前端文件见 line-limit-exemptions.md)
112+
- **H 未接线面**:完成史 reverted 事件、GoalsPage 回顾流接入、set_task_disposition/练习暂停归档 UI/工具栏「生成 SOP」选区入口
113+
103114
## 场景走查补录(2026-09-05 · G1-G7 裁决)
104115

105116
> 方法:以「眼影晕染进阶」技能场景全流程走查(捕捉→裁决→执行→复盘)反推缺口,逐项裁决定案。

0 commit comments

Comments
 (0)