代理实现:Fix: 修复 comment 的 bug #8
Reference in New Issue
Block a user
No description provided.
Delete Branch "agent/issue-7-fix-comment-bug"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
关联 Issue:#7
合并后自动关闭:Closes #7
代理实现报告
Summary
修复了 PR feedback 处理后的 cursor 推进问题:现在只推进到本轮实际处理的人类反馈位置,不再因为 agent 后续评论 id 更大而跳过处理期间新增的人类评论。feedback 路径现在允许无代码改动的处理结果,不再强制 commit。还补充了 PR review 和 inline review comments 的扫描与处理,并在
cleanup_on_success开启时保留后续 feedback 可重新恢复 workspace 的能力。Files changed
src/agent_gitea/db.py:为 PR feedback 增加 review 和 inline comment 独立 cursor,并补充迁移逻辑。src/agent_gitea/gitea.py:增加 Gitea PR review 与 review inline comments API 读取。src/agent_gitea/service.py:统一收集普通 PR 评论、review 正文和 inline comments;修正 cursor 清理策略;支持 feedback 无 diff;成功后按配置清理 workspace。src/agent_gitea/state.py:允许 feedback 无代码改动时从TESTING回到HUMAN_REVIEW_READY。src/agent_gitea/workspace.py:增加未提交改动检测,用于 feedback 路径判断是否需要 commit。tests/test_gitea_service.py:增加 cursor 回归、inline comment、无 diff feedback 和 cleanup 场景测试。Test commands run
uv run pytestuv run pytest tests/test_gitea_service.pyTest results
uv run pytest通过,28 个测试全部成功。uv run pytest tests/test_gitea_service.py通过,14 个测试全部成功。Known risks
PR review API 在较旧或受限的 Gitea 实例上可能返回 404;当前实现会把 404 视为无 review 数据,避免影响普通 PR 评论扫描。
Follow-up suggestions
可以后续补充针对真实 Gitea review payload 的集成测试,确认不同版本中的 review id 和 inline comment id 行为完全符合预期。
人工审核
此 PR 由本地 agent-manager 自动创建,但不会自动合并。
请维护者人工审核、决策并手动合并。
Verdict
APPROVE
Summary
本次实现针对 PR comment/feedback 游标推进问题做了实质修复:处理人工反馈后不再把后续 agent 评论的更大 ID 直接作为已读位置,从而避免漏掉 agent 处理期间新增的人类评论。同时补充了 PR review 正文和 inline review comment 的扫描,并允许反馈处理仅回复说明、不产生代码 diff。
整体改动与 issue 目标相关,测试覆盖了关键回归路径。我未发现需要阻塞合并的正确性问题。
Correctness
核心游标策略是合理的:扫描阶段发现人类反馈时只标记 pending,不前移 cursor;实际处理完成后只前移到本轮快照中已处理的人类反馈位置;没有新的人类反馈时才推进到最新评论位置。这能避免处理期间新增的人类评论被 agent 自己后续评论的 ID 覆盖。
PR review 和 inline review comment 使用独立 cursor,避免普通 issue comment、review、review comment 混用同一个 ID 空间。旧 Gitea 或无 review API 的场景下,相关接口 404 会被当作无 review 数据处理,不影响普通评论扫描。
无代码改动的反馈处理路径从
TESTING回到HUMAN_REVIEW_READY,并跳过 commit/push/reviewer,符合“只需解释或确认”的反馈场景。Scope Control
改动集中在 comment/feedback 扫描、游标持久化、PR feedback 执行路径和相应测试上,范围基本受控。新增的成功后 workspace cleanup 调用不是 comment bug 的核心,但它服务于后续 feedback 可恢复 workspace 的风险闭环,且默认配置为关闭,影响面较小。
未看到无关重构、配置 churn 或与任务目标明显不相关的行为改动。
Test Evidence
已运行:
uv run pytest结果:28 个测试全部通过。
新增/覆盖的关键场景包括:普通 PR 评论触发 feedback、无人工评论时推进 cursor、inline review comment 触发 feedback、处理期间新增人工评论不会被 agent 后续评论跳过、feedback 无代码改动不强制 commit,以及
cleanup_on_success开启后仍能恢复已有分支处理后续反馈。Risks
主要剩余风险在真实 Gitea 实例差异:PR review 与 inline review comment payload 的字段、分页、权限和 ID 行为需要在目标 Gitea 版本上确认。当前单元测试用 mock payload 覆盖了预期路径,但没有真实 API 集成测试。
升级已有数据库后,新增加的 review/review comment cursor 初始为 0。已有
HUMAN_REVIEW_READYPR 如果历史上存在人工 review 或 inline comment,首次扫描可能会把这些历史反馈重新排队一次;这更偏保守,但需要人工知道这个行为。Required Human Checks
建议维护者在目标 Gitea 版本上手动确认一次:普通 PR 评论、review 正文、inline review comment 都能被扫描到,并且 bot 自己发布的 review/report/comment 不会触发反馈循环。
如果生产库已有长期打开的 agent PR,合并后首次 worker 扫描前应预期可能出现一次历史 review feedback 排队。
Suggested PR Comment
审查通过。实现修正了 feedback 处理后 cursor 被 agent 后续评论推进过头的问题,并补充了 PR review/inline comment 的扫描与无代码改动反馈路径。
uv run pytest已通过 28 个测试。剩余建议是在目标 Gitea 版本上做一次真实 PR review/inline comment 的手动验证,确认 payload 与权限行为符合 mock 测试假设。代理评审摘要
结论:
APPROVE审查通过。实现修正了 feedback 处理后 cursor 被 agent 后续评论推进过头的问题,并补充了 PR review/inline comment 的扫描与无代码改动反馈路径。
uv run pytest已通过 28 个测试。剩余建议是在目标 Gitea 版本上做一次真实 PR review/inline comment 的手动验证,确认 payload 与权限行为符合 mock 测试假设。需要人工处理
请人工审核该 PR。agent-manager 不会自动合并、关闭 PR 或提交变更请求。