1Second timeout parser reads a bare number as seconds, not millisecondslib/review-timeout.ts
2Import still points to the helper deleted by this PRlib/tasks.ts
3The fix patches one caller; the shared client still drops the errorapi/teams.ts
lib/review-timeout.ts
717273
−+
const timeoutMs = parseReviewTimeout(value);const timeoutMs = parseDurationMs(value);// shared parser owns supported units and validation
A second timeout parser reads numbers differently · AI Architecture Review
The new review-only parser duplicates the platform duration parser but treats a bare number as seconds instead of milliseconds. Use the shared parser and delete the duplicate.
IonWarp caught it CodeRabbit, Greptile and Qodo missed it
IonWarpbotcommented on line 76
P2Dead branches in getBaseConditions: auth conditions are never falsy · AI Architecture Review
getBaseConditions() branches on `authConditions && filterConditions` then `else if (authConditions)`, but getAuthorizationConditions() is declared `Promise<Prisma.Sql>` and every return path (user/org/team scope, invalid options, non-owner/admin) yields a Prisma.Sql object, which is always truthy. The `else if (filterConditions)` and final `else return NOTHING_CONDITION` branches can therefore never run; they are defensive scaffolding for a null-auth case that cannot occur.
LowKnown issue in the AI Architecture Review benchmark · caught by DeepSeek V4.1 FlashSee the graded case
P2Unused private getEvaluationContext copy left in ClientPermissionsV2 · AI Architecture Review
getEvaluationContext builds a DefaultEvaluationContext with the kc.client.id attribute, a hand-rolled copy of the block inside V1 ClientPermissions.canExchangeTo. In V2 canExchangeTo throws UnsupportedOperationException, so nothing reads this helper: a grep for getEvaluationContext across services/src/main/java/org/keycloak/services/resources/admin/permissions returns only the declaration itself. Dead copy-paste scaffolding in a newly added class.
LowKnown issue in the AI Architecture Review benchmark · caught by DeepSeek V4.1 FlashSee the graded case
AI Architecture Review on the benchmark
IonWarp's models and the review apps, graded on the same open-source pull requests.
Blue: DeepSeek V4.1 Flash, the model IonWarp runs for AI Architecture Review. Yellow: GLM 5.3, the model a failed review retries on. Sorted by Reviewer Score (F1 counts 3×, time and cost 1× each). Review times come from runs on Sep 8–24, 2026 (models) and Jan 23–Apr 7, 2026 (apps). Click a column heading to sort.
Why IonWarp runs DeepSeek V4.1 Flash: in a trial of our specialist reviewers on production pull requests on 23 September 2026 it filed about as many findings per review as GLM 5.3 Flash at high effort (0.93 against 1.02) for a third of the cost ($0.039 against $0.125), and 3 of its 64 findings were refuted.
Pricing
Simple pricing for your whole team.
One workspace price with seats included. Credits pool across your team. Unlimited repos on every plan.
AI Architecture Review is on Pro and Max, from $49 a month with 5 seats and a 7-day trial.
P2Dead branches in getBaseConditions: auth conditions are never falsy · AI Architecture Review
getBaseConditions() branches on `authConditions && filterConditions` then `else if (authConditions)`, but getAuthorizationConditions() is declared `Promise<Prisma.Sql>` and every return path (user/org/team scope, invalid options, non-owner/admin) yields a Prisma.Sql object, which is always truthy. The `else if (filterConditions)` and final `else return NOTHING_CONDITION` branches can therefore never run; they are defensive scaffolding for a null-auth case that cannot occur.