From b02c509eb80dffddad598ec7f8d1a3c14914c186 Mon Sep 17 00:00:00 2001 From: Eyejoker Date: Tue, 31 Mar 2026 04:01:53 +0900 Subject: [PATCH] feat: owner can also summon arbiter via BLOCKED/NEEDS_CONTEXT verdict --- src/paired-execution-context.ts | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/paired-execution-context.ts b/src/paired-execution-context.ts index b71259c..8901abb 100644 --- a/src/paired-execution-context.ts +++ b/src/paired-execution-context.ts @@ -472,6 +472,34 @@ export function completePairedExecutionContext(args: { return; } + // Owner blocked/needs_context → request arbiter (same as reviewer path). + // Without this, only reviewer verdicts can summon the arbiter, leaving + // owner-side deadlocks (e.g. owner can't implement reviewer's request) + // without a resolution mechanism. + if (task.status !== 'merge_ready') { + const normalOwnerVerdict = classifyReviewerVerdict(args.summary); + if ( + (normalOwnerVerdict === 'blocked' || + normalOwnerVerdict === 'needs_context') && + isArbiterEnabled() + ) { + updatePairedTask(taskId, { + status: 'arbiter_requested', + arbiter_requested_at: now, + updated_at: now, + }); + logger.info( + { + taskId, + ownerVerdict: normalOwnerVerdict, + summary: args.summary?.slice(0, 100), + }, + 'Owner blocked/needs_context — requesting arbiter', + ); + return; + } + } + // Normal turn → auto-trigger reviewer (if within round trip limit) if (task.round_trip_count >= PAIRED_MAX_ROUND_TRIPS) { logger.info(