fix(ai-review): mode-aware inconclusive copy + structural classification for claude-code auth errors - #8795
Conversation
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
Logic backtestReplayed 0 historical case(s) for Backtest comparison:
|
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
loopover-ui | 2fa6c25 | Commit Preview URL Branch Preview URL |
Jul 26 2026, 06:26 AM |
…ion for claude-code auth errors (#8791) Two alignment gaps from the 2026-07-26 inconclusive-verdict trace: - The inconclusive finding unconditionally said "dual-model AI review" — on a single-reviewer-with-fallback deployment (the AI_PROVIDER=a,b default without AI_DUAL_REVIEW) that misdescribed a provider-chain outage as a two-model disagreement and sent the incident's debugging down the wrong path. The ok-result now carries plannedReviewerCount (the resolved plan's independent slots, distinct from reviewerCount's produced-output count) and the copy matches what actually ran. - isStructuralProviderConfigError only matched codex_* auth shapes, so an expired Claude Code token (claude_code_no_oauth_token, claude_code_error_401/403) burned the full retry budget every review instead of earning the structural circuit-breaker cooldown. The claude-code shapes now join the codex ones; 429s and exit/stall errors stay transient.
|
Important 🟪🟪🟪🟪🟪🟪🟪🟪🟪🟪🟪🟪 🔍 LoopOver is reviewing…AI analysis is in progress. This comment will update when the review is complete. 🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed · 🟪 Reviewing |
2fa6c25 to
d2a14b8
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #8795 +/- ##
==========================================
- Coverage 93.81% 92.26% -1.55%
==========================================
Files 797 797
Lines 79606 79608 +2
Branches 24125 24127 +2
==========================================
- Hits 74684 73453 -1231
- Misses 3556 5090 +1534
+ Partials 1366 1065 -301
Flags with carried forward coverage won't be shown. Click here to find out more.
|
Summary
The other half of the inconclusive-verdict incident cleanup (sibling of #8794), closing the two alignment gaps found in the 2026-07-26 trace.
Changes
runLoopOverAiReview's ok-result gainsplannedReviewerCount: 1 | 2(the resolved plan's independent reviewer slots; distinct fromreviewerCount, which counts produced output and is 0 on a fully-failed run). Theai_review_inconclusivefinding's detail now says "dual-model" only when a genuine two-reviewer plan ran, and "one reviewer, including its provider fallback chain" otherwise. The gate-level summaries (rules/advisory.ts+ engine parity twin) were already mode-neutral and are untouched.isStructuralProviderConfigErrornow matchesclaude_code_no_oauth_token/claude_code_error_401/claude_code_error_403alongside the codex shapes (fix(selfhost): validate AI reviewer-provider configuration and add a failure circuit breaker #2626 precedent): an expired/missing Claude Code credential is exactly as deterministic ascodex_no_auth, so it earns the long structural circuit-breaker cooldown instead of burning the full retry budget on every review.claude_code_error_429(rate limit — clears on its own, has its own break) and exit/stall shapes stay transient.Test plan
npm run typecheck— cleanaiReviewCombine: "single"), dual-plan copy pinned, and 7 classifier cases (3 structural claude shapes bare + suffixed, 429/exit/stall non-matches)Closes #8791