Queue PR fixes v2#250
Conversation
…080" This reverts commit 09354c8.
|
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 |
|
@codex review |
|
@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 👍 / 👎.
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):
|
|
@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 —
|
|
@copilot review but do not make fixes |
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