# 进度记录:排队与运行中图片发送 ## 2026-07-17 ### 阶段 1:核对附件生命周期与现有改动边界 - **状态:** complete - 已完成: - 读取 `planning-with-files`、`todo-list-csv` 与 Trellis 工作流。 - 运行 session catchup 并检查工作树,确认存在其他活跃任务及重叠文件改动。 - 使用 `codebase-memory-mcp` 定位队列、普通发送、steer 和 Codex App 输入构造函数。 - 使用本机 Codex 0.144.1 Schema 验证 `turn/steer` 协议接受 `localImage`。 - 确认 `resolveMessageAttachments` 提供服务端元数据解析、文件存在性和过期校验,可直接复用于 steer。 - 确认会话持久化已有统一的 `attachments` 归一化入口。 - 核对目标函数所在 diff,确认可做局部补丁且不会覆盖当前主题与回归改动。 - 确认 mock 已能把 `localImage` 反映到 steer 输出,测试可直接断言图片文件名。 - 已创建: - `.planning/runtime-image-send/task_plan.md` - `.planning/runtime-image-send/findings.md` - `.planning/runtime-image-send/progress.md` - `.trellis/tasks/07-17-runtime-image-send/` 下的 PRD、技术设计、研究和代理上下文 ### 阶段 2:补充失败回归测试 - **状态:** complete - 已完成: - 新增 `runtime-image-send` 定向回归目标。 - 覆盖前端队列附件契约、成功 steer 图片、stale fallback 图片与历史持久化。 - 审阅并修正 mock 图片 marker:协议断言使用服务端附件 ID,历史断言保留原始文件名。 ### 阶段 3:运行目标回归确认失败 - **状态:** complete - 已执行: - `timeout 60s node scripts/regression.js --target runtime-image-send` - 结果:3.8 秒退出,状态码 1;active steer、stale replacement、前端队列契约均按预期失败。 ### 阶段 4:实现前端附件传递 - **状态:** complete - 已实现: - 队列附件快照、纯图片校验、摘要、删除清理与出队发送。 - 运行中插入附件气泡、WebSocket 发送和 composer 清空。 - 卡片编辑保留附件,正常出队不误删上传记录。 - 阶段验证: - `node --check public/app.js` 通过。 - 定向回归中的前端静态契约已通过,剩余失败均为后端。 ### 阶段 5:实现后端 steer 附件链路 - **状态:** complete - 已实现: - `handleMessage` 向 steer 传递已解析附件和去 path 的持久化附件。 - active steer、纯图片、历史保存和 stale replacement 复用附件。 - 最多等待 2 秒获取 ready turn,并在持久化前重载最新 session,修复两个竞态。 - 阶段验证: - `node --check server.js` 通过。 - 代理运行定向回归已通过。 ### 阶段 6:运行目标回归和静态检查 - **状态:** complete - 已通过: - `node --check public/app.js` - `node --check server.js` - `node --check scripts/regression.js` - `timeout 60s node scripts/regression.js --target runtime-image-send`(4.9 秒) - `timeout 60s node scripts/regression.js --target codexapp-stale-running`(2.9 秒) - 已通过: - `timeout 60s node scripts/regression.js`(完整回归)。 ### 阶段 7:审查差异并修正问题 - **状态:** complete - 已完成审查: - 修复 active steer 失效附件只返回普通 error、用户气泡停在 pending 的问题。 - error/status 现在带 sessionId/clientMessageId,失败输入不持久化。 - 恢复普通消息“校验通过后才取消容量重试”的原有顺序,避免无关语义变化。 - 主代理复验: - 三个修改文件的 `node --check` 通过。 - `runtime-image-send` 定向回归通过。 - 完整回归通过。 ### 阶段 8:检查会话状态并安全重启服务 - **状态:** in_progress - 待执行: - 查询当前会话列表并排除本对话。 - 无其他 running 会话时重启并健康检查;否则暂缓。 ## 测试结果 | 测试 | 预期 | 实际 | 状态 | |------|------|------|------| | 尚未执行 | - | - | 待执行 | | 定向回归红灯 | `--target runtime-image-send` | 三类缺口失败 | 三类缺口失败,3.8 秒 | ✓ | | 定向回归绿灯 | `--target runtime-image-send` | 通过 | 通过,4.9 秒 | ✓ | | stale-running 回归 | `--target codexapp-stale-running` | 通过 | 通过,2.9 秒 | ✓ | | JavaScript 语法 | 三个修改文件 `node --check` | 通过 | 全部通过 | ✓ | | 完整回归 | `timeout 60s node scripts/regression.js` | 通过 | Regression checks passed | ✓ | ## 错误日志 | 时间 | 错误 | 次数 | 处理 | |------|------|------|------| | 2026-07-17 | Trellis 自定义代理 TOML 路径不存在 | 1 | 改用标准协作代理并显式传递任务文件与规范路径 | ## 5 问恢复检查 | 问题 | 回答 | |------|------| | 当前在哪? | 阶段 8,检查会话并安全重启 | | 接下来去哪? | 先补失败回归,再做前后端最小实现 | | 目标是什么? | 排队与运行中插入均支持图片附件 | | 已掌握什么? | 见 `findings.md` | | 已完成什么? | 见上方进度记录 |