refactor: remove paired room legacy helper

This commit is contained in:
Eyejoker
2026-03-31 20:18:37 +09:00
parent 141898f764
commit 0a41d9ea3b
3 changed files with 16 additions and 22 deletions

View File

@@ -35,7 +35,6 @@ import {
getPairedTaskById, getPairedTaskById,
getPairedWorkspace, getPairedWorkspace,
getRouterStateForService, getRouterStateForService,
isPairedRoomJid,
getSession, getSession,
getTaskById, getTaskById,
listPairedWorkspacesForTask, listPairedWorkspacesForTask,
@@ -796,7 +795,7 @@ describe('paired room registration', () => {
]); ]);
expect(getExplicitRoomMode('dc:123')).toBeUndefined(); expect(getExplicitRoomMode('dc:123')).toBeUndefined();
expect(getEffectiveRoomMode('dc:123')).toBe('tribunal'); expect(getEffectiveRoomMode('dc:123')).toBe('tribunal');
expect(isPairedRoomJid('dc:123')).toBe(true); expect(getEffectiveRuntimeRoomMode('dc:123')).toBe('tribunal');
}); });
it('does not mark solo rooms as paired', () => { it('does not mark solo rooms as paired', () => {
@@ -809,7 +808,7 @@ describe('paired room registration', () => {
}); });
expect(getRegisteredAgentTypesForJid('dc:solo')).toEqual(['claude-code']); expect(getRegisteredAgentTypesForJid('dc:solo')).toEqual(['claude-code']);
expect(isPairedRoomJid('dc:solo')).toBe(false); expect(getEffectiveRuntimeRoomMode('dc:solo')).toBe('single');
}); });
it('keeps inferred room mode available when no explicit override exists', () => { it('keeps inferred room mode available when no explicit override exists', () => {
@@ -831,7 +830,6 @@ describe('paired room registration', () => {
expect(getExplicitRoomMode('dc:legacy-paired')).toBeUndefined(); expect(getExplicitRoomMode('dc:legacy-paired')).toBeUndefined();
expect(getEffectiveRoomMode('dc:legacy-paired')).toBe('tribunal'); expect(getEffectiveRoomMode('dc:legacy-paired')).toBe('tribunal');
expect(getEffectiveRuntimeRoomMode('dc:legacy-paired')).toBe('tribunal'); expect(getEffectiveRuntimeRoomMode('dc:legacy-paired')).toBe('tribunal');
expect(isPairedRoomJid('dc:legacy-paired')).toBe(true);
}); });
it('backfills inferred room modes for legacy SQL rows missing room_settings', () => { it('backfills inferred room modes for legacy SQL rows missing room_settings', () => {
@@ -899,7 +897,6 @@ describe('paired room registration', () => {
expect(getExplicitRoomMode('dc:legacy-sql')).toBeUndefined(); expect(getExplicitRoomMode('dc:legacy-sql')).toBeUndefined();
expect(getEffectiveRoomMode('dc:legacy-sql')).toBe('tribunal'); expect(getEffectiveRoomMode('dc:legacy-sql')).toBe('tribunal');
expect(getEffectiveRuntimeRoomMode('dc:legacy-sql')).toBe('tribunal'); expect(getEffectiveRuntimeRoomMode('dc:legacy-sql')).toBe('tribunal');
expect(isPairedRoomJid('dc:legacy-sql')).toBe(true);
}); });
it('lets explicit single override dual registration for paired-room checks', () => { it('lets explicit single override dual registration for paired-room checks', () => {
@@ -923,7 +920,6 @@ describe('paired room registration', () => {
expect(getExplicitRoomMode('dc:explicit-single')).toBe('single'); expect(getExplicitRoomMode('dc:explicit-single')).toBe('single');
expect(getEffectiveRoomMode('dc:explicit-single')).toBe('single'); expect(getEffectiveRoomMode('dc:explicit-single')).toBe('single');
expect(getEffectiveRuntimeRoomMode('dc:explicit-single')).toBe('single'); expect(getEffectiveRuntimeRoomMode('dc:explicit-single')).toBe('single');
expect(isPairedRoomJid('dc:explicit-single')).toBe(false);
}); });
it('lets explicit tribunal become runnable when the configured reviewer can run on the solo registration', () => { it('lets explicit tribunal become runnable when the configured reviewer can run on the solo registration', () => {
@@ -944,14 +940,12 @@ describe('paired room registration', () => {
expect(getEffectiveRuntimeRoomMode('dc:explicit-tribunal')).toBe( expect(getEffectiveRuntimeRoomMode('dc:explicit-tribunal')).toBe(
'tribunal', 'tribunal',
); );
expect(isPairedRoomJid('dc:explicit-tribunal')).toBe(true);
clearExplicitRoomMode('dc:explicit-tribunal'); clearExplicitRoomMode('dc:explicit-tribunal');
expect(getExplicitRoomMode('dc:explicit-tribunal')).toBeUndefined(); expect(getExplicitRoomMode('dc:explicit-tribunal')).toBeUndefined();
expect(getEffectiveRoomMode('dc:explicit-tribunal')).toBe('single'); expect(getEffectiveRoomMode('dc:explicit-tribunal')).toBe('single');
expect(getEffectiveRuntimeRoomMode('dc:explicit-tribunal')).toBe('single'); expect(getEffectiveRuntimeRoomMode('dc:explicit-tribunal')).toBe('single');
expect(isPairedRoomJid('dc:explicit-tribunal')).toBe(false);
}); });
it('keeps explicit tribunal non-runnable when the configured reviewer service is unavailable', () => { it('keeps explicit tribunal non-runnable when the configured reviewer service is unavailable', () => {
@@ -969,7 +963,6 @@ describe('paired room registration', () => {
expect(getEffectiveRuntimeRoomMode('dc:explicit-tribunal-codex')).toBe( expect(getEffectiveRuntimeRoomMode('dc:explicit-tribunal-codex')).toBe(
'single', 'single',
); );
expect(isPairedRoomJid('dc:explicit-tribunal-codex')).toBe(false);
}); });
}); });

View File

@@ -1974,7 +1974,12 @@ export function inferRoomModeFromRegisteredAgentTypes(
return types.has('claude-code') && types.has('codex') ? 'tribunal' : 'single'; return types.has('claude-code') && types.has('codex') ? 'tribunal' : 'single';
} }
export function inferRoomModeForJid(jid: string): RoomMode { /**
* Internal registration/backfill helper.
* This infers the stored room mode from current registrations and must not be
* treated as runtime source-of-truth by callers.
*/
function inferStoredRoomModeForJid(jid: string): RoomMode {
return inferRoomModeFromRegisteredAgentTypes( return inferRoomModeFromRegisteredAgentTypes(
getRegisteredAgentTypesForJid(jid), getRegisteredAgentTypesForJid(jid),
); );
@@ -2022,7 +2027,7 @@ function upsertStoredRoomMode(
} }
function syncInferredRoomModeForJid(chatJid: string): void { function syncInferredRoomModeForJid(chatJid: string): void {
upsertStoredRoomMode(chatJid, inferRoomModeForJid(chatJid), 'inferred'); upsertStoredRoomMode(chatJid, inferStoredRoomModeForJid(chatJid), 'inferred');
} }
export function getExplicitRoomMode(chatJid: string): RoomMode | undefined { export function getExplicitRoomMode(chatJid: string): RoomMode | undefined {
@@ -2070,10 +2075,6 @@ export function getEffectiveRuntimeRoomMode(chatJid: string): RoomMode {
: 'single'; : 'single';
} }
export function isPairedRoomJid(jid: string): boolean {
return getEffectiveRuntimeRoomMode(jid) === 'tribunal';
}
function backfillStoredRoomModes(database: Database): void { function backfillStoredRoomModes(database: Database): void {
const rows = database const rows = database
.prepare( .prepare(

View File

@@ -7,11 +7,11 @@ import {
createProducedWorkItem, createProducedWorkItem,
getOpenWorkItem, getOpenWorkItem,
setRegisteredGroup, setRegisteredGroup,
isPairedRoomJid,
getLastBotFinalMessage, getLastBotFinalMessage,
markWorkItemDelivered, markWorkItemDelivered,
} from './db.js'; } from './db.js';
import { normalizeMessageForDedupe } from './router.js'; import { normalizeMessageForDedupe } from './router.js';
import { hasReviewerLease } from './service-routing.js';
import { isDuplicateOfLastBotFinal } from './message-runtime.js'; import { isDuplicateOfLastBotFinal } from './message-runtime.js';
beforeEach(() => { beforeEach(() => {
@@ -52,7 +52,7 @@ const setupChat = (jid: string) => {
); );
}; };
describe('isPairedRoomJid', () => { describe('hasReviewerLease', () => {
it('returns true when both claude-code and codex are registered', () => { it('returns true when both claude-code and codex are registered', () => {
const jid = 'dc:paired-room'; const jid = 'dc:paired-room';
@@ -72,7 +72,7 @@ describe('isPairedRoomJid', () => {
agentType: 'codex', agentType: 'codex',
}); });
expect(isPairedRoomJid(jid)).toBe(true); expect(hasReviewerLease(jid)).toBe(true);
}); });
it('returns false when only claude-code is registered', () => { it('returns false when only claude-code is registered', () => {
@@ -86,7 +86,7 @@ describe('isPairedRoomJid', () => {
agentType: 'claude-code', agentType: 'claude-code',
}); });
expect(isPairedRoomJid(jid)).toBe(false); expect(hasReviewerLease(jid)).toBe(false);
}); });
it('returns false when only codex is registered', () => { it('returns false when only codex is registered', () => {
@@ -100,7 +100,7 @@ describe('isPairedRoomJid', () => {
agentType: 'codex', agentType: 'codex',
}); });
expect(isPairedRoomJid(jid)).toBe(false); expect(hasReviewerLease(jid)).toBe(false);
}); });
}); });
@@ -209,7 +209,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
); );
// Verify it's a paired room // Verify it's a paired room
expect(isPairedRoomJid(jid)).toBe(true); expect(hasReviewerLease(jid)).toBe(true);
// Verify duplicate detection works via the actual runtime function // Verify duplicate detection works via the actual runtime function
expect( expect(
@@ -246,7 +246,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
); );
// Verify it's NOT a paired room // Verify it's NOT a paired room
expect(isPairedRoomJid(jid)).toBe(false); expect(hasReviewerLease(jid)).toBe(false);
// Duplicate check should be bypassed (return false) // Duplicate check should be bypassed (return false)
expect(isDuplicateOfLastBotFinal(jid, 'DONE — Task completed')).toBe(false); expect(isDuplicateOfLastBotFinal(jid, 'DONE — Task completed')).toBe(false);