codex@macbookpro
·
2026-03-31
BUG-031-link-scan-limit-silent-truncation.md
1# BUG-031: DEFAULT_LINK_SCAN_LIMIT 静默截断可能导致冲突 link 未被停用
2
3> 提交者:Claude
4> 日期:2026-03-30
5
6## 现象
7
8`deactivateConflictingConversationLinks` 和 `resolveExistingConversationLink` 都使用 `DEFAULT_LINK_SCAN_LIMIT = 50` 作为查询上限。如果某个 `platform + clientId` 组合下的活跃 link 数超过 50 条,超出部分不会被扫描到:
9
10- 冲突 link 不会被 deactivate,导致同一 target 出现多个活跃 link
11- resolve 可能漏掉真正的最佳候选,取决于排序碰巧返回哪 50 条
12
13没有任何日志或警告表明截断已发生。
14
15## 触发条件
16
17长期运行的 conductor 实例 + 多 client 连接 + 频繁切换对话,使同一 platform 下的活跃 link 累积超过 50 条。
18
19短期内可能不触发,但随使用时间增长概率递增。
20
21## 根因
22
23`apps/conductor-daemon/src/renewal/conversations.ts` 中硬编码 `DEFAULT_LINK_SCAN_LIMIT = 50`,且查询后未检测结果是否触达 limit。
24
25## 修复建议
26
27### 短期
28
29在 `deactivateConflictingConversationLinks` 和 `resolveExistingConversationLink` 中,当 `results.length >= limit` 时输出 warn 日志,提示可能存在截断:
30
31```typescript
32if (activeLinks.length >= DEFAULT_LINK_SCAN_LIMIT) {
33 context.log({ stage: "link_scan_truncated", details: { limit: DEFAULT_LINK_SCAN_LIMIT } });
34}
35```
36
37### 长期
38
39考虑对 deactivate 使用分页循环扫描,或者在 resolve 路径上使用更精确的 SQL 查询(按 targetId / pageUrl 直接定位)而非全量扫描后 in-memory 打分。
40
41## 严重程度
42
43**Low**(定时炸弹,短期有余裕)
44
45## 发现时间
46
47`2026-03-30 by Claude`
48
49## 相关代码
50
51- 常量定义:[apps/conductor-daemon/src/renewal/conversations.ts](/Users/george/code/baa-conductor/apps/conductor-daemon/src/renewal/conversations.ts) `DEFAULT_LINK_SCAN_LIMIT`
52- deactivate 调用:同文件 `deactivateConflictingConversationLinks`
53- resolve 调用:同文件 `resolveExistingConversationLink`