Queue PR fixes v2 - #250
Conversation
The latest updates on your projects. Learn more about Vercel for GitHub. |
Warning Rate limit exceeded
To keep reviews running without waiting, you can enable usage-based add-on for your organization. This allows additional reviews beyond the hourly cap. Account admins can enable it under billing. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (3)
📒 Files selected for processing (68)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
arul28
commented
May 4, 2026
@codex review |
arul28
commented
May 4, 2026
@copilot review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit:d54223aef7
ℹ️ 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".
| const commentedReviews = reviews.filter(hasBlockingCommentedReview); | ||
| if (commentedReviews.length > 0) { |
There was a problem hiding this comment.
Deduplicate reviewer history before blocking on comments
getMergeReadinessBlocker treats any historical commented review with a non-empty body as a hard blocker, but prService.getReviews() returns the full /pulls/{n}/reviews history (including superseded reviews from the same reviewer). If someone comments first and later approves, the stale comment entry still matches this filter and auto-merge stays blocked indefinitely even though the latest reviewer state is acceptable. The blocker check should run on each reviewer's latest submission only.
Useful? React with 👍 / 👎.
Uh oh!
There was an error while loading. Please reload this page.
Reviewed. CI is green. Key observations: laneWorktreeLockService — SQLite pathToMergeOrchestrator / getMergeReadinessBlocker — The double-check approach (cached mapPermissionMode (resolverUtils) — The passthrough for runGh spawn — Arguments are passed as an array to main.ts wiring — Minor notes (non-blocking):
|
arul28
commented
May 4, 2026
@copilot review but do not make fixes |
Review of the 3 commits (no fixes): Commit 1 & 2 (already reviewed) Commit 3: "Fix path-to-merge review blockers" (3a625dc) laneWorktreeLockService — |
Uh oh!
There was an error while loading. Please reload this page.
arul28
commented
May 4, 2026
@copilot review but do not make fixes |
Uh oh!
There was an error while loading. Please reload this page.
Reopens the PtM queue fixes after rollback #249 reverted the accidental landing of #241.
This branch reapplies #241 and adds follow-up hardening:
Validated locally:
Greptile Summary
This PR reapplies and hardens the PtM queue fixes from #241, adding the full
pathToMergeOrchestratorstate machine, lane worktree locking, iOS PtM authoring/persistence, and stricter auto-merge readiness checks. All three previously-flagged P1 issues have been addressed: stale COMMENTED reviews are now deduplicated vialatestReviewByReviewer, the lock TTL has been raised to 75 min with heartbeat on everyschedulecall, andisPermanentCleanInventoryBlockerroutes permanent CI blockers topauseLoopinstead ofparkConverged.Confidence Score: 4/5
Safe to merge; the one remaining P2 edge case (infinite parkConverged loop when autoMerge:true + GitHub auto-merge disabled) requires explicitly non-default settings to trigger
All three previous P1 findings are resolved. Only one P2 remains: isPermanentCleanInventoryBlocker's regex doesn't cover GitHub-CLI 'auto-merge not enabled' errors, leaving a residual indefinite polling loop for a non-default configuration. No P0 issues found across the 71-file change set.
apps/desktop/src/main/services/prs/pathToMergeOrchestrator.ts — isPermanentCleanInventoryBlocker gap noted above
Important Files Changed
Flowchart
%%{init: {'theme': 'neutral'}}%% flowchart TD Start([startPathToMerge]) --> AcquireLock[Acquire lane worktree lock\n ownerKind: path_to_merge] AcquireLock -- locked by another --> BlockStart([blockedBy: LaneWorktreeLockBlocker]) AcquireLock -- acquired --> Schedule[schedule waitingOnReview\n heartbeatLoopLock on each schedule] Schedule --> Iteration[runIterationInner] Iteration --> CheckEnabled{autoConvergeEnabled?} CheckEnabled -- no --> ClearTimer[clearTimer] CheckEnabled -- yes --> Refresh[prService.refresh] Refresh --> CheckMerged{pr.state?} CheckMerged -- merged --> Cleanup[runPostMergeCleanup\n releaseLock\n stop] CheckMerged -- closed --> PauseLoop([pauseLoop: PR closed\n releaseLock]) CheckMerged -- open --> EarlyMerge{earlyMergeOnGreen\n& CI passing\n& reviewClean?} EarlyMerge -- yes autoMerge:false --> ParkConverged([parkConverged: click merge when ready\n schedules waitingOnReview]) EarlyMerge -- yes autoMerge:true --> MergeLadder[runMergeLadder] MergeLadder -- merged REST/admin --> Done([releaseLock, stop]) MergeLadder -- auto_armed --> ParkAutoArmed([parkAutoArmed\n schedules waitingOnReview]) MergeLadder -- conflict --> ConflictStrategy[applyConflictStrategy] ConflictStrategy --> Schedule EarlyMerge -- no or blocked --> TerminalGate{CI + review\nterminal?} TerminalGate -- no --> WarmingSchedule([schedule warming]) TerminalGate -- yes --> AtCap{currentRound >= maxRounds?} AtCap -- no --> DispatchFix[launchPrIssueResolutionChat\n heartbeat shared lock] DispatchFix --> Schedule AtCap -- yes --> AtCapPolicy{decideAtCapAction} AtCapPolicy -- stop --> HardCap([pauseLoop: hard cap\n releaseLock]) AtCapPolicy -- wait --> WarmingSchedule AtCapPolicy -- dispatch_ci --> DispatchFix AtCapPolicy -- merge_now --> CleanLadder[runMergeLadder\n clean inventory path] CleanLadder -- merged --> Done CleanLadder -- auto_armed --> ParkAutoArmed CleanLadder -- conflict --> ConflictStrategy CleanLadder -- blocked isPermanentBlocker --> PauseLoop2([pauseLoop: cannot auto-merge\n releaseLock]) CleanLadder -- blocked not permanent --> ParkConverged CleanLadder -- failed --> PauseLoop2 Stop([stopPathToMerge]) --> ReleaseLock[releasePtmLock\n clearTimer\n autoConvergeEnabled: false]Prompt To Fix All With AI
Reviews (3): Last reviewed commit: "Fix clean inventory merge blocker loop" | Re-trigger Greptile