Conversation
Generated-By: looper 0.6.0 (runner=worker, agent=codex)
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ec3c2a5a5b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Generated-By: looper 0.6.0 (runner=fixer, agent=opencode)
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: acae49acec
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Keep tolerant review marker recovery scoped to the current loop and preserve pending marker verification across retryable missing-marker resumes.\n\nGenerated-By: looper 0.6.0 (runner=fixer, agent=opencode)
Summary
Issue body:
Summary
Some reviewer runs successfully post a GitHub review with a Looper marker, but the run is still marked failed because the agent did not emit a parsed
__LOOPER_RESULT__marker or because publish-time marker verification does not find the already-posted review.This creates false failed reviewer loops and can trigger duplicate follow-up attempts.
Evidence
Posted review but run failed as missing completion marker
Loop 133 (
powerformer/looper#125) shows the agent posted a GitHub review successfully:The review body includes a Looper marker:
<!-- looper:review id=reviewer:333e9f1e-75cb-466d-9224-13432ab972fe:fdd4dd124989cae611642ba392bfe462694f01b6 head=fdd4dd124989cae611642ba392bfe462694f01b6 outcome=actionable -->But the loop ended as:
Publish step failed despite existing reviews
Loops 325 and 333 failed in
step=publishwith:Then their queue items were cancelled with
loop_terminated, even though the relevant PR already had reviews/approvals in the review list.Root cause
The runner has two separate success signals:
__LOOPER_RESULT__) parsed by the executor.<!-- looper:review ... -->).When (1) is missing, the runner tries to recover by verifying (2), but that verification can miss valid posted reviews due to marker shape, idempotency key mismatch, event type, author, or timing. The fallback then treats the run as failed even though the external side effect already happened.
Relevant code:
internal/agent/executor.go:499-502— failed/missing parse marker handlinginternal/reviewer/runner.go:2083-2118— missing parse marker recovery and finalFailureNonRetryableinternal/reviewer/runner.go:2144+— publish step verification of pending review markersExpected behavior
If a Looper-marked GitHub review exists for the expected head, the reviewer run should converge to success or skipped/idempotent completion even when the agent fails to emit
__LOOPER_RESULT__.It should not leave a failed loop after an external review was already posted.
Proposed fix
PendingReviewand advance to publish/idempotent completion.retryable_after_resumeovernon_retryableso the runner can re-check GitHub state before rerunning the full review.__LOOPER_RESULT__.Issue URL: #225
Agent Summary
Implemented reviewer marker recovery, committed and pushed the branch, but PR creation is still missing because the connector create call was cancelled and gh API calls cannot reach api.github.com.
Issue: #225
Issue URL: #225
Prompt: Implement GitHub issue #225: reviewer: posted reviews can still fail when completion marker parsing or marker verification misses them
Issue body:
Summary
Some reviewer runs successfully post a GitHub review with a Looper marker, but the run is still marked failed because the agent did not emit a parsed
__LOOPER_RESULT__marker or because publish-time marker verification does not find the already-posted review.This creates false failed reviewer loops and can trigger duplicate follow-up attempts.
Evidence
Posted review but run failed as missing completion marker
Loop 133 (
powerformer/looper#125) shows the agent posted a GitHub review successfully:The review body includes a Looper marker:
<!-- looper:review id=reviewer:333e9f1e-75cb-466d-9224-13432ab972fe:fdd4dd124989cae611642ba392bfe462694f01b6 head=fdd4dd124989cae611642ba392bfe462694f01b6 outcome=actionable -->But the loop ended as:
Publish step failed despite existing reviews
Loops 325 and 333 failed in
step=publishwith:Then their queue items were cancelled with
loop_terminated, even though the relevant PR already had reviews/approvals in the review list.Root cause
The runner has two separate success signals:
__LOOPER_RESULT__) parsed by the executor.<!-- looper:review ... -->).When (1) is missing, the runner tries to recover by verifying (2), but that verification can miss valid posted reviews due to marker shape, idempotency key mismatch, event type, author, or timing. The fallback then treats the run as failed even though the external side effect already happened.
Relevant code:
internal/agent/executor.go:499-502— failed/missing parse marker handlinginternal/reviewer/runner.go:2083-2118— missing parse marker recovery and finalFailureNonRetryableinternal/reviewer/runner.go:2144+— publish step verification of pending review markersExpected behavior
If a Looper-marked GitHub review exists for the expected head, the reviewer run should converge to success or skipped/idempotent completion even when the agent fails to emit
__LOOPER_RESULT__.It should not leave a failed loop after an external review was already posted.
Proposed fix
PendingReviewand advance to publish/idempotent completion.retryable_after_resumeovernon_retryableso the runner can re-check GitHub state before rerunning the full review.__LOOPER_RESULT__.Issue URL: #225
Closes #225
Generated by Looper 0.6.0 · runner=worker · agent=codex