6.1 KiB
6.1 KiB
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 中的评论幂等契约与运行实现一致;专项测试继续通过。