Skip to content

fix(queue): manual panel retrigger never forces a fresh AI review #3725

Description

@JSONbored

Summary

The "Re-run Gittensory review" checkbox in the PR panel comment does not force a fresh AI review. Checking it re-runs the deterministic gate/disposition pass but silently reuses whatever AI review result (or lack thereof) is already cached/frozen for the current head SHA, instead of producing a new one.

Reproduced live on #3702: the panel shows Code review: No blockers | No AI review summary (reviewerCount: 0). Toggling the rerun checkbox completes a genuine ~13s processing pass but still produces zero reviewers.

Root cause

maybeProcessPrPanelRetrigger in src/queue/processors.ts calls maybePublishPrPublicSurface without setting forceAiReview: true in its options. forceAiReview is a supported field on that function's options type specifically documented for this case (see the comment at its declaration: "an explicit manual re-gate can force a fresh AI opinion, bypassing BOTH the durable cache and the bounded non-cacheable-reuse cooldown"), and it's read in two places downstream:

  • The "frozen for manual review" guard, which reuses the last published AI verdict for PRs held with a manual-review label unless forceAiReview is true.
  • The AI-review cache lookup, which reuses a stored review for the same head SHA + fingerprint unless forceAiReview is true.

The only existing call site that ever sets forceAiReview: true is reReviewStoredPullRequest (the scheduled agent-regate-pr job), gated on that job's own optional force field — which, per its own doc comment, no production scheduler or webhook enqueues today. So the manual-retrigger checkbox path currently has no way to bypass a stale/cached/frozen AI review result.

Fix

Add forceAiReview: true to the options object maybeProcessPrPanelRetrigger passes to maybePublishPrPublicSurface. A user explicitly clicking "re-run review" is exactly the manual-override case forceAiReview was built for.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions