# Codex 用户任务识别与历史误收记录：后端交接

## 问题与已确认事实

2026-10-23 用户反馈任务下拉出现大量“Codex / 已中断”。本机采集日志对照 Codex 原生任务目录后确认：后台生成输入建议、项目建议、建议审查和记忆整理的临时会话，也产生了 Hook 事件。旧采集器只排除带 `agent_id/subagent_id` 的事件，未核对会话是否为用户可见任务，因此为每个临时 session 创建了默认标题任务。

本次只读核对快照：253 个已采集任务，13 个为原生目录内真实任务，标题均一致；240 个默认标题记录中，237 个明确匹配后台请求（输入建议 192、项目建议 20、建议审查 10、记忆整理 15），另 3 个仅有 Interrupt、无用户提问，暂不确认为用户任务。这些历史记录已有云端 ACK。数据会继续变化，数字不能作为生产清理条件。

图中另有 8 个真实任务未出现在采集日志，不能把这批后台记录改名来冒充它们。现有机制只采集实际收到的 Hook，不枚举/自动补传全部历史。未找到记录不等于没有历史正文；遗漏原因与补传应独立核验，不能用标题猜测关联。

## 本次插件已经处理

- 本机按已绑定的 Codex home 和原生 session ID 核验用户任务。读取 `threads.name` 正式标题，同一任务改名不改变 task ID、事件或排序时间。
- 持久化根任务（含用户要求工具创建的任务）正常显示；子代理及已确认后台请求不入库上传。来源尚未确认的事件保留在本机待核验，不显示、不上传，原生目录稍后出现后自动恢复。
- 原生目录暂时不可读时保留已确认的真实任务及最近有效名称；未接入、排除、暂停、不同账号的标题和队列不被顺带导入。
- 本机历史分类采用附加状态表，保留原始事件，便于复核和撤销；原云端 task/source/event ID 和 ACK 不重建。
- 针对旧云端默认标题的小型任务，插件通过已有权限校验的 `events/list` 在后台读取完整历史进行核验。命中明确后台请求或只有空 Interrupt 的条目从新版列表隐藏。最多 4 个并发，缓存仅保存账号、团队、来源、任务、版本特征和判定，不保存第二份正文。读取失败、内容截断、历史不完整不能判断为后台任务。
- 正常正式标题先显示；核验期间提示“正在核对任务来源…”。本机已确认的用户任务不按正文模板误过滤。
- **这不是云端删除。旧客户端仍可能显示历史异常记录。** 服务端分页/数量尚未过滤，因此部分页可能只剩少量或零条可见任务。
- 未修改 Codex Hook 命令或信任配置；无需为了本次插件修复重新授权 Hook。

## 需要后端补齐的协议（提案，尚未调用）

建议扩展现有 `/api/v1/team-codex/sync`、`tasks/list`，不要另建平行任务系统：

1. **任务来源分类**：任务元数据增加受版本控制的 `task_kind: user | internal | unknown`，并返回 `classification_version`、`classification_reason`。保持现有 `source_id/task_id`；同一来源同一真实任务不得因改名或新一轮提问生成新 ID。
2. **历史隐藏/恢复**：提供仅本人或明确授权运维可执行的批量 retire/restore 操作；输入包含原 `source_id/task_id`、预期版本、原因、幂等键。云端落审计及 tombstone，旧客户端重试上传不得静默复活被退役的内部任务。恢复需独立操作和新版本。
3. **先过滤再分页**：`tasks/list` 默认只返回用户任务，后台/退役记录不计入数量，不占分页位置；保留运维审查视图和明确的 pending 数量。未知来源不能伪装已完成迁移。
4. **原文与深链一致**：退役任务的 events/read/share 应返回明确状态；处理现有链接和缓存失效。不能只隐藏列表但继续通过旧链接无提示展示误收内容。
5. **物理清理**：需先备份、审核清单、确认范围和保留期限，再处理正文及分享投影。不得按 `task_title='Codex'` 或 `state='interrupted'` 批量删除；真实用户可使用这个标题，也会正常中断任务。

## 历史数据处理步骤

1. 先 dry-run，按原账号/团队/来源导出候选 task ID、版本、分类依据和数量，不将正文放进公共仓库、日志或群消息。
2. 将源端原生用户任务 ID 与云端映射核对；确认用户任务优先保留。无原生目录证据的记录需核对完整的 Hook 用户请求，而非仅关键词或单条回复。
3. 将明确后台记录软退役；只有 Interrupt 的 3 条先标 unknown，不自动物理删除。
4. 验收列表分页、搜索、统计、旧深链、另一个设备、旧版重试上传及恢复操作。
5. 如需补传遗漏的真实历史任务，单独给出源任务 ID、允许的时间范围、预计事件数和幂等方案；只取真实用户输入及最终回答，不采集工具输出、内部推理或后台请求。

## 联调验收

- 同一真实任务连续提问、暂停、中断、恢复、改名：始终一个入口，名称与原生客户端一致。
- 输入建议/项目建议/记忆整理启动和取消：列表数量不变，无新增“Codex / 已中断”。
- 正式标题恰好为 Codex：仍正常显示；用户引用后台模板讨论问题：不得被当作后台任务。
- 原生目录延迟、损坏、忙锁或重启：已确认任务不消失，未知来源不被当用户上传。
- 跨账号、跨团队、切号中的延迟响应：不复用名称、正文或错误分类缓存。
- 源端已分类的历史任务不能由云端回填复活；云端退役完成后跨设备列表、数量和分页同步正确。

交付边界：本次插件代码解决采集/展示及历史兼容。后端退役、删除、服务端分页过滤尚待实现；本文不是接口已经上线的声明。

## 本次验证结果

- 254 项 Codex 相关测试全通过；随后增加缓存定时复核用例，涉及的 39 项测试再次通过。类型检查、构建及可执行入口检查通过。
- 对 16:40 复制出的真实日志做隔离分类：254 条中 13 个用户任务、238 个后台任务、3 个待核验来源；原始事件数量未变化，正式客户端日志未用于写入测试。
- 3102 实际打开任务下拉：第一页显示“拉取 Arkme 插件最新 dev”和“了解录音器外观设计支持”；第二页显示“查找硬件外观设计公司对话”。这里仍按旧服务端原始记录分页，不能把当前页数量称为全部用户任务数。
- 实际打开设计任务，截图中的“24mm 和 26mm”提问已不含自动浏览器上下文；当前加载的 25 条提问均无该附加块。
- 验证期间出现过云端来源暂不可用，之后读取恢复；这次测试不等于云端可用性或跨设备迁移已经验收。8 个遗漏任务尚未补传，正式客户端尚未升级本次修复。
