Fix paired-room delivery role persistence

This commit is contained in:
Eyejoker
2026-04-04 22:28:41 +09:00
parent 4dceb9e678
commit 4a331c5036
2 changed files with 21 additions and 1 deletions

View File

@@ -979,6 +979,9 @@ describe('createMessageRuntime', () => {
expect(agentRunner.runAgentProcess).toHaveBeenCalledTimes(1); expect(agentRunner.runAgentProcess).toHaveBeenCalledTimes(1);
expect(lastAgentTimestamps[`${chatJid}:reviewer`]).toBe('41'); expect(lastAgentTimestamps[`${chatJid}:reviewer`]).toBe('41');
expect(saveState).toHaveBeenCalled(); expect(saveState).toHaveBeenCalled();
expect(db.createProducedWorkItem).toHaveBeenCalledWith(
expect.objectContaining({ delivery_role: 'reviewer' }),
);
expect(reviewerChannel.sendMessage).toHaveBeenCalledWith( expect(reviewerChannel.sendMessage).toHaveBeenCalledWith(
chatJid, chatJid,
'리뷰 확인 완료', '리뷰 확인 완료',
@@ -1087,6 +1090,9 @@ describe('createMessageRuntime', () => {
expect(result).toBe(true); expect(result).toBe(true);
expect(agentRunner.runAgentProcess).toHaveBeenCalledTimes(1); expect(agentRunner.runAgentProcess).toHaveBeenCalledTimes(1);
expect(db.createProducedWorkItem).toHaveBeenCalledWith(
expect.objectContaining({ delivery_role: 'owner' }),
);
expect(channel.sendMessage).toHaveBeenCalledWith(chatJid, '최종 정리 완료'); expect(channel.sendMessage).toHaveBeenCalledWith(chatJid, '최종 정리 완료');
}); });

View File

@@ -488,12 +488,16 @@ export function createMessageRuntime(deps: MessageRuntimeDeps): {
deps.queue.closeStdin(chatJid, { runId, reason }), deps.queue.closeStdin(chatJid, { runId, reason }),
deliverFinalText: async (text) => { deliverFinalText: async (text) => {
try { try {
const persistedDeliveryRole =
args.deliveryRole ??
args.forcedRole ??
(hasReviewerLease(chatJid) ? 'owner' : null);
const workItem = createProducedWorkItem({ const workItem = createProducedWorkItem({
group_folder: group.folder, group_folder: group.folder,
chat_jid: chatJid, chat_jid: chatJid,
agent_type: agent_type:
args.forcedAgentType ?? group.agentType ?? 'claude-code', args.forcedAgentType ?? group.agentType ?? 'claude-code',
delivery_role: args.deliveryRole ?? args.forcedRole ?? null, delivery_role: persistedDeliveryRole,
start_seq: startSeq, start_seq: startSeq,
end_seq: endSeq, end_seq: endSeq,
result_payload: text, result_payload: text,
@@ -837,6 +841,16 @@ export function createMessageRuntime(deps: MessageRuntimeDeps): {
const pendingTask = hasReviewerLease(chatJid) const pendingTask = hasReviewerLease(chatJid)
? getLatestOpenPairedTaskForChat(chatJid) ? getLatestOpenPairedTaskForChat(chatJid)
: null; : 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 = const deliveryRole =
openWorkItem.delivery_role ?? openWorkItem.delivery_role ??
(pendingTask ? resolveActiveRole(pendingTask.status) : 'owner'); (pendingTask ? resolveActiveRole(pendingTask.status) : 'owner');