Files
cc-web/.planning/2026-08-23-gitea-workflow/progress.md

6.1 KiB
Raw Blame History

Gitea Workflow 进度

2026-08-23

当前阶段:需求、协议与架构文档化

  • 已完成用户需求 grilling 对齐。
  • 已确认 cc-web 本地会话、Codex App、MCP 注入和 turn 完成代码入口。
  • 已确认官方 gitea-mcp 的 stdio、环境变量和工具覆盖。
  • 已创建主实施计划,准备并行派发文档与协议核验子任务。

文件

  • .planning/2026-08-23-gitea-workflow/task_plan.md
  • .planning/2026-08-23-gitea-workflow/findings.md
  • .planning/2026-08-23-gitea-workflow/progress.md

测试

测试 结果
当前 git status 工作区初始干净
codebase-memory 索引 ready

2026-08-24

当前阶段:集成验收与交付

  • 已落地 lib/gitea-workflow-domain.js、store、queue、service,统一由 server.js 挂接。
  • 已落地 Webhook HMAC/mention/delivery 去重、HTTPS 工作区 clone/fetch、临时 Git 凭据和脏目录阻塞。
  • 已落地 Codex App 线程级官方 gitea-mcp、turn 标记、回执查询、一次只补发回执和 REST 兜底。
  • 已落地配置、仓库、任务、审计、暂停/恢复/取消/中止管理 API 与前端页面。
  • 专项测试全部通过:Webhook 回归 9 场景、核心 7 项、工作区、Codex、管理页面。
  • npm run regression 已在 60 秒门限内完成并输出 Regression checks passed.;此前的长时观察记录已由最终回归结果覆盖。另已通过 codexapp-unrouted-routing、composer-slash-routing、codexapp-stale-running 目标回归。
  • 当前主机未安装 gitea-mcp 可执行文件,也未配置真实 Gitea host/token;真实出站 MCP/REST 回帖仍需部署后 smoke test。

2026-08-24 主任务终审补强

  • 修正隐藏回执补发轮次的 turn 标识校验:允许初始预分配标识与历史补发标识集合,避免 Agent 已回帖但因 Codex 实际 turnId 变化被误判为缺失。
  • 查询 Gitea 回帖状态为 unknown 时改为保守失败:不自动补发/REST 覆盖,先发送状态 告警并标记 failed_reply,与 CODEX-INTEGRATION、PRD、ARCHITECTURE 统一。
  • 工作区成功/脏目录状态回写 Workflow Store;管理页补齐仓库工作区、队列数、活动任务、 脏目录原因和审计日志镜像;配置接口校验 Gitea 地址并保留 0600 凭据文件。
  • Gitea 管理 JS/CSS 使用独立缓存版本,避免只修改管理资源时命中旧缓存。
  • 修正管理停用仓库后的规范化 Webhook 路径:enqueueNormalizedTask 现在返回明确 ok,对已停用仓库拒绝入队并写入审计,避免通过独立 receiver 绕过停用控制。
  • 管理页保存的并发上限现会在重启后被 Workflow 服务读取;环境变量凭据只同步“已配置” 标志,不把明文 Secret 写入管理状态。
  • 工作区脏目录现在记录 dirtySessionKey:同一 Issue/PR 会话后续 turn 可安全沿用现场, 跳过 fetch/checkout;其他讨论仍进入 blocked_workspace,且每轮结束会重新探测并在清洁后 自动清除脏标记。
  • Webhook 对完整 ccweb-gitea 隐藏标识做前置过滤,即使 Gitea 事件缺少作者字段也不会 触发自循环。
  • 队列的工作区阻塞、失败、取消和中止终态现在统一发送 Gitea 状态评论;REST 兜底成功 会单独标记“REST 兜底回帖”,避免用户只看到初始排队消息。
  • 管理配置更新和控制操作均强制要求 reason,并在接口层返回 reason_required,保证审计 记录不会出现无原因的人工运维动作。

终审验证

测试 结果
Gitea 专项 5 脚本 全部通过
node --check + git diff --check 通过
timeout 60s npm run regression Regression checks passed.
隔离服务启动/HTTP 冒烟 根页面 200;未认证管理 API 401;未配置 Secret 的 Webhook 503

主任务验收补强

  • 复核子任务实际代码、管理页面/API 挂接、文档和持久化边界;未发现重复路由或 覆盖核心模块的问题。
  • 修正 server.js 启动时环境配置同步:只有实际提供的环境字段才覆盖管理镜像, 避免空的 CC_WEB_GITEA_WORKSPACE_ROOT 或并发字段覆盖页面已保存配置。
  • 重新通过五个 Gitea 专项脚本、node --check、git diff --check 和 timeout 60s npm run regression。
  • 隔离实例 HTTP 冒烟再次通过:根页面 200、未认证管理 API 401、未配置 Secret 的 Webhook 503;未触碰当前 PM2 进程。
  • 追加运行时收敛保护:初始/补发 Codex turn 启动被拒绝时立即清理 waiter 并进入 回帖失败/REST 兜底路径;任务持久化 turnState/turnStartedAt/turnUpdatedAt, 管理页可看到更准确的 Turn 状态。
  • 工作区校验新增 Gitea host 白名单,阻止 Webhook 携带跨实例 clone URL;队列恢复 和入队按评论创建时间(缺失时按接收/创建时间)排序,满足同讨论串顺序处理。
  • 上述补强后核心、Webhook、管理专项测试与语法/差异检查均再次通过。
  • 启动配置镜像现在会读取 Secret 文件实际内容后再标记“已配置”,不存在或空文件 不会造成管理页虚报凭据可用;隔离 HTTP 冒烟仍通过。
  • 对“每个 @ 必须有回执”再补强:停用仓库或 Webhook 异步入队异常会发送带任务标识的 Gitea 状态回帖,而不是只写本地日志。
  • 澄清交互采用独立 waiting_user 隐藏回执标识;Agent 提问不会被误判为最终回帖 缺失,也不会触发重复修改型 reply retry。未配置 Bot Token 时 Webhook 直接 503, 防止接受无法回帖的任务。
  • 最终专项脚本、语法检查、差异检查和完整 regression 均通过。
  • 复核“文档与集成测试”子任务回传:7 个 fixture 均可解析,独立脚本未加载 server.js,9/9 场景覆盖验签、过滤、恢复、回帖补偿、MCP 和安全边界;未发现 该子任务修改 server.js 的证据。
  • 主任务随后补上状态评论持久化幂等键(taskId:status),使 ARCHITECTURE/PRD 中的评论幂等契约与运行实现一致;专项测试继续通过。