Files

3.1 KiB
Raw Permalink Blame History

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 计划阶段原为中文编号列表;已改为检查脚本可识别的标准阶段标题与状态字段

计划审查

  • 独立计划审查代理已通过,无阻断性问题。
  • 执行时显式记录测试命令、预计修改位置和重启前运行会话检查结果。