Files

73 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ccweb 未路由通知阻塞修复计划
## 目标
修复 Codex App 子线程通知在进程恢复后无法路由、反复同步扫描全部会话文件并占满 Node.js 主线程的问题,恢复 ccweb HTTP 可用性并防止复发。
## 阶段
### Phase 1建立任务上下文并固化根因与验收标准
**Status:** complete
### Phase 2补充可复现的失败回归测试
**Status:** complete
### Phase 3实现线程路由索引与恢复逻辑
**Status:** complete
### Phase 4限制未路由通知的磁盘扫描与日志风暴
**Status:** complete
### Phase 5运行定向回归测试并修正问题
**Status:** complete
### Phase 6执行完整回归与静态检查
**Status:** complete
### Phase 7审查变更与运行风险
**Status:** complete
### Phase 8安全重启并验证本地/外部访问
**Status:** complete
## 验收标准
- 恢复后,父线程及子线程通知均能通过内存索引命中,不对每个 delta 同步扫描全部会话 JSON。
- 未知 threadId 的高频通知采用有界、缓存或节流策略,不造成日志风暴和单核持续 100%。
- 回归测试覆盖恢复态子线程路由、未知线程负缓存/节流和现有通知路由行为。
- 定向回归、完整回归和语法检查通过。
- 重启前确认除当前会话外没有其他 running 会话;满足条件才重启。
- 重启后本地 8002 健康响应CPU 回落且日志不再持续刷未路由通知。
## 决策
- 不通过增大 Node.js 堆上限掩盖问题。
- 优先建立 O(1) threadId 路由索引,并在恢复 `codexapp-state.json` 时重建子线程映射。
- 为真正未知的通知增加负缓存/节流,避免重复全量磁盘扫描与逐条日志。
- 保留用户已有未提交改动,不覆盖无关文件。
## 错误记录
| 错误 | 尝试 | 处理 |
|---|---:|---|
| `strace` 附加进程被系统拒绝 | 1 | 改用实时 CPU、HTTP 探针、日志频率和代码调用链交叉定位 |
| codebase-memory `search_graph` 返回 `Transport closed` | 1 | 索引状态此前为 ready但运行时传输关闭按项目降级规则改用已确认的 qualified_name 与 `rg`/`sed` 精确读取 |
| 更新计划文件时上下文定位失败 | 1 | 重新读取当前文件结构后使用更精确的补丁上下文 |
| 首个实现代理在检索阶段长时间无补丁 | 1 | 中止该轮后复用同一代理,禁止 MCP提供精确状态形状并收敛为本地 TDD 补丁任务 |
| 第二轮实现代理写入补丁后未及时结束回报 | 1 | 中止代理并由主线程接管语法、定向与完整回归验证 |
| 首次读取运行中 app-server 的本地 MCP token 使用了错误环境变量名 | 1 | 只列出环境变量键名确认实际为 `CC_WEB_CODEX_APP_MCP_TOKEN`,未输出 token 值,并成功完成会话状态检查 |
| planning-with-files 完成检查首次报告 `0/0 phases` | 1 | 计划阶段原为中文编号列表;已改为检查脚本可识别的标准阶段标题与状态字段 |
## 计划审查
- 独立计划审查代理已通过,无阻断性问题。
- 执行时显式记录测试命令、预计修改位置和重启前运行会话检查结果。