From 4a331c50368f3f721e9f37fd5b3d2197aadd9875 Mon Sep 17 00:00:00 2001 From: Eyejoker Date: Sat, 4 Apr 2026 22:28:41 +0900 Subject: [PATCH] Fix paired-room delivery role persistence --- src/message-runtime.test.ts | 6 ++++++ src/message-runtime.ts | 16 +++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/message-runtime.test.ts b/src/message-runtime.test.ts index 6c4490a..59dc408 100644 --- a/src/message-runtime.test.ts +++ b/src/message-runtime.test.ts @@ -979,6 +979,9 @@ describe('createMessageRuntime', () => { expect(agentRunner.runAgentProcess).toHaveBeenCalledTimes(1); expect(lastAgentTimestamps[`${chatJid}:reviewer`]).toBe('41'); expect(saveState).toHaveBeenCalled(); + expect(db.createProducedWorkItem).toHaveBeenCalledWith( + expect.objectContaining({ delivery_role: 'reviewer' }), + ); expect(reviewerChannel.sendMessage).toHaveBeenCalledWith( chatJid, '리뷰 확인 완료', @@ -1087,6 +1090,9 @@ describe('createMessageRuntime', () => { expect(result).toBe(true); expect(agentRunner.runAgentProcess).toHaveBeenCalledTimes(1); + expect(db.createProducedWorkItem).toHaveBeenCalledWith( + expect.objectContaining({ delivery_role: 'owner' }), + ); expect(channel.sendMessage).toHaveBeenCalledWith(chatJid, '최종 정리 완료'); }); diff --git a/src/message-runtime.ts b/src/message-runtime.ts index e4ed7ca..821556a 100644 --- a/src/message-runtime.ts +++ b/src/message-runtime.ts @@ -488,12 +488,16 @@ export function createMessageRuntime(deps: MessageRuntimeDeps): { deps.queue.closeStdin(chatJid, { runId, reason }), deliverFinalText: async (text) => { try { + const persistedDeliveryRole = + args.deliveryRole ?? + args.forcedRole ?? + (hasReviewerLease(chatJid) ? 'owner' : null); const workItem = createProducedWorkItem({ group_folder: group.folder, chat_jid: chatJid, agent_type: args.forcedAgentType ?? group.agentType ?? 'claude-code', - delivery_role: args.deliveryRole ?? args.forcedRole ?? null, + delivery_role: persistedDeliveryRole, start_seq: startSeq, end_seq: endSeq, result_payload: text, @@ -837,6 +841,16 @@ export function createMessageRuntime(deps: MessageRuntimeDeps): { const pendingTask = hasReviewerLease(chatJid) ? getLatestOpenPairedTaskForChat(chatJid) : null; + if (hasReviewerLease(chatJid) && openWorkItem.delivery_role == null) { + log.warn( + { + workItemId: openWorkItem.id, + chatJid, + pendingTaskStatus: pendingTask?.status ?? null, + }, + 'Paired-room delivery retry is missing a persisted delivery role; falling back to inferred routing', + ); + } const deliveryRole = openWorkItem.delivery_role ?? (pendingTask ? resolveActiveRole(pendingTask.status) : 'owner');