代理实现:Fix: 修复 comment 的 bug #8

Merged
gahow merged 1 commits from agent/issue-7-fix-comment-bug into main 2026-05-06 09:26:53 +00:00
Owner

关联 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 pytest
  • uv run pytest tests/test_gitea_service.py

Test 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 自动创建,但不会自动合并。
请维护者人工审核、决策并手动合并。

关联 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 pytest` - `uv run pytest tests/test_gitea_service.py` ## Test 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 自动创建,但不会自动合并。 请维护者人工审核、决策并手动合并。
gahow added 1 commit 2026-05-06 09:04:28 +00:00
Author
Owner

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_READY PR 如果历史上存在人工 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 测试假设。

## 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_READY` PR 如果历史上存在人工 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 测试假设。
Author
Owner

代理评审摘要

结论:APPROVE

审查通过。实现修正了 feedback 处理后 cursor 被 agent 后续评论推进过头的问题,并补充了 PR review/inline comment 的扫描与无代码改动反馈路径。uv run pytest 已通过 28 个测试。剩余建议是在目标 Gitea 版本上做一次真实 PR review/inline comment 的手动验证,确认 payload 与权限行为符合 mock 测试假设。

需要人工处理

请人工审核该 PR。agent-manager 不会自动合并、关闭 PR 或提交变更请求。

## 代理评审摘要 结论:`APPROVE` 审查通过。实现修正了 feedback 处理后 cursor 被 agent 后续评论推进过头的问题,并补充了 PR review/inline comment 的扫描与无代码改动反馈路径。`uv run pytest` 已通过 28 个测试。剩余建议是在目标 Gitea 版本上做一次真实 PR review/inline comment 的手动验证,确认 payload 与权限行为符合 mock 测试假设。 ## 需要人工处理 请人工审核该 PR。agent-manager 不会自动合并、关闭 PR 或提交变更请求。
gahow merged commit 70a17d6675 into main 2026-05-06 09:26:53 +00:00
gahow deleted branch agent/issue-7-fix-comment-bug 2026-05-06 09:26:53 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gahow/agent-manager#8
No description provided.