refactor: internalize setRegisteredGroup export

This commit is contained in:
Eyejoker
2026-03-31 22:27:17 +09:00
parent 6b7367c072
commit 1f1842773e
5 changed files with 67 additions and 53 deletions

View File

@@ -7,6 +7,7 @@ import { describe, it, expect, beforeEach } from 'vitest';
import { import {
_initTestDatabase, _initTestDatabase,
_initTestDatabaseFromFile, _initTestDatabaseFromFile,
_setRegisteredGroupForTests,
assignRoom, assignRoom,
claimServiceHandoff, claimServiceHandoff,
completeServiceHandoffAndAdvanceTargetCursor, completeServiceHandoffAndAdvanceTargetCursor,
@@ -43,7 +44,6 @@ import {
markWorkItemDelivered, markWorkItemDelivered,
markWorkItemDeliveryRetry, markWorkItemDeliveryRetry,
setSession, setSession,
setRegisteredGroup,
setRouterStateForService, setRouterStateForService,
setExplicitRoomMode, setExplicitRoomMode,
storeChatMetadata, storeChatMetadata,
@@ -720,7 +720,7 @@ describe('message query LIMIT', () => {
describe('registered group isMain', () => { describe('registered group isMain', () => {
it('persists isMain=true through set/get round-trip', () => { it('persists isMain=true through set/get round-trip', () => {
setRegisteredGroup('dc:main', { _setRegisteredGroupForTests('dc:main', {
name: 'Main Chat', name: 'Main Chat',
folder: 'discord_main', folder: 'discord_main',
trigger: '@Andy', trigger: '@Andy',
@@ -736,7 +736,7 @@ describe('registered group isMain', () => {
}); });
it('omits isMain for non-main groups', () => { it('omits isMain for non-main groups', () => {
setRegisteredGroup('group@g.us', { _setRegisteredGroupForTests('group@g.us', {
name: 'Family Chat', name: 'Family Chat',
folder: 'discord_family-chat', folder: 'discord_family-chat',
trigger: '@Andy', trigger: '@Andy',
@@ -750,14 +750,14 @@ describe('registered group isMain', () => {
}); });
it('filters duplicate jid registrations by agent type', () => { it('filters duplicate jid registrations by agent type', () => {
setRegisteredGroup('dc:shared', { _setRegisteredGroupForTests('dc:shared', {
name: 'Shared Room', name: 'Shared Room',
folder: 'shared-room', folder: 'shared-room',
trigger: '@Andy', trigger: '@Andy',
added_at: '2024-01-01T00:00:00.000Z', added_at: '2024-01-01T00:00:00.000Z',
agentType: 'claude-code', agentType: 'claude-code',
}); });
setRegisteredGroup('dc:shared', { _setRegisteredGroupForTests('dc:shared', {
name: 'Shared Room', name: 'Shared Room',
folder: 'shared-room', folder: 'shared-room',
trigger: '@Codex', trigger: '@Codex',
@@ -828,14 +828,14 @@ describe('room assignment writes', () => {
describe('paired room registration', () => { describe('paired room registration', () => {
it('detects when both Claude and Codex are registered on the same jid', () => { it('detects when both Claude and Codex are registered on the same jid', () => {
setRegisteredGroup('dc:123', { _setRegisteredGroupForTests('dc:123', {
name: 'Paired Room', name: 'Paired Room',
folder: 'paired-room', folder: 'paired-room',
trigger: '@Andy', trigger: '@Andy',
added_at: '2024-01-01T00:00:00.000Z', added_at: '2024-01-01T00:00:00.000Z',
agentType: 'claude-code', agentType: 'claude-code',
}); });
setRegisteredGroup('dc:123', { _setRegisteredGroupForTests('dc:123', {
name: 'Paired Room', name: 'Paired Room',
folder: 'paired-room', folder: 'paired-room',
trigger: '@Codex', trigger: '@Codex',
@@ -853,7 +853,7 @@ describe('paired room registration', () => {
}); });
it('does not mark solo rooms as paired', () => { it('does not mark solo rooms as paired', () => {
setRegisteredGroup('dc:solo', { _setRegisteredGroupForTests('dc:solo', {
name: 'Solo Claude Room', name: 'Solo Claude Room',
folder: 'solo-claude', folder: 'solo-claude',
trigger: '@Andy', trigger: '@Andy',
@@ -866,14 +866,14 @@ describe('paired room registration', () => {
}); });
it('keeps inferred room mode available when no explicit override exists', () => { it('keeps inferred room mode available when no explicit override exists', () => {
setRegisteredGroup('dc:legacy-paired', { _setRegisteredGroupForTests('dc:legacy-paired', {
name: 'Legacy Paired', name: 'Legacy Paired',
folder: 'legacy-paired', folder: 'legacy-paired',
trigger: '@Andy', trigger: '@Andy',
added_at: '2024-01-01T00:00:00.000Z', added_at: '2024-01-01T00:00:00.000Z',
agentType: 'claude-code', agentType: 'claude-code',
}); });
setRegisteredGroup('dc:legacy-paired', { _setRegisteredGroupForTests('dc:legacy-paired', {
name: 'Legacy Paired', name: 'Legacy Paired',
folder: 'legacy-paired', folder: 'legacy-paired',
trigger: '@Codex', trigger: '@Codex',
@@ -966,14 +966,14 @@ describe('paired room registration', () => {
}); });
it('keeps room-level metadata synced on setRegisteredGroup helper writes', () => { it('keeps room-level metadata synced on setRegisteredGroup helper writes', () => {
setRegisteredGroup('dc:room-settings', { _setRegisteredGroupForTests('dc:room-settings', {
name: 'Room Settings Test', name: 'Room Settings Test',
folder: 'room-settings-test', folder: 'room-settings-test',
trigger: '@Claude', trigger: '@Claude',
added_at: '2024-01-01T00:00:00.000Z', added_at: '2024-01-01T00:00:00.000Z',
agentType: 'claude-code', agentType: 'claude-code',
}); });
setRegisteredGroup('dc:room-settings', { _setRegisteredGroupForTests('dc:room-settings', {
name: 'Room Settings Test', name: 'Room Settings Test',
folder: 'room-settings-test', folder: 'room-settings-test',
trigger: '@Codex', trigger: '@Codex',
@@ -1082,14 +1082,14 @@ describe('paired room registration', () => {
}); });
it('lets explicit single override dual registration for paired-room checks', () => { it('lets explicit single override dual registration for paired-room checks', () => {
setRegisteredGroup('dc:explicit-single', { _setRegisteredGroupForTests('dc:explicit-single', {
name: 'Explicit Single', name: 'Explicit Single',
folder: 'explicit-single', folder: 'explicit-single',
trigger: '@Andy', trigger: '@Andy',
added_at: '2024-01-01T00:00:00.000Z', added_at: '2024-01-01T00:00:00.000Z',
agentType: 'claude-code', agentType: 'claude-code',
}); });
setRegisteredGroup('dc:explicit-single', { _setRegisteredGroupForTests('dc:explicit-single', {
name: 'Explicit Single', name: 'Explicit Single',
folder: 'explicit-single', folder: 'explicit-single',
trigger: '@Codex', trigger: '@Codex',
@@ -1105,7 +1105,7 @@ describe('paired room registration', () => {
}); });
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', () => {
setRegisteredGroup('dc:explicit-tribunal', { _setRegisteredGroupForTests('dc:explicit-tribunal', {
name: 'Explicit Tribunal Claude', name: 'Explicit Tribunal Claude',
folder: 'explicit-tribunal-claude', folder: 'explicit-tribunal-claude',
trigger: '@Andy', trigger: '@Andy',
@@ -1131,7 +1131,7 @@ describe('paired room registration', () => {
}); });
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', () => {
setRegisteredGroup('dc:explicit-tribunal-codex', { _setRegisteredGroupForTests('dc:explicit-tribunal-codex', {
name: 'Explicit Tribunal Codex', name: 'Explicit Tribunal Codex',
folder: 'explicit-tribunal-codex', folder: 'explicit-tribunal-codex',
trigger: '@Codex', trigger: '@Codex',

View File

@@ -1987,7 +1987,10 @@ export function getRegisteredGroup(
return getLegacyRegisteredGroup(db, jid, agentType); return getLegacyRegisteredGroup(db, jid, agentType);
} }
export function setRegisteredGroup(jid: string, group: RegisteredGroup): void { function writeLegacyRegisteredGroupAndSyncRoomSettings(
jid: string,
group: RegisteredGroup,
): void {
const existingRoomMode = getStoredRoomModeRow(jid); const existingRoomMode = getStoredRoomModeRow(jid);
if (!isValidGroupFolder(group.folder)) { if (!isValidGroupFolder(group.folder)) {
throw new Error(`Invalid group folder "${group.folder}" for JID ${jid}`); throw new Error(`Invalid group folder "${group.folder}" for JID ${jid}`);
@@ -2017,6 +2020,17 @@ export function setRegisteredGroup(jid: string, group: RegisteredGroup): void {
tx(); tx();
} }
/**
* @internal Test/migration helper for seeding legacy capability rows.
* Runtime code must use assignRoom() so room_settings remains the explicit SSOT.
*/
export function _setRegisteredGroupForTests(
jid: string,
group: RegisteredGroup,
): void {
writeLegacyRegisteredGroupAndSyncRoomSettings(jid, group);
}
export function assignRoom( export function assignRoom(
chatJid: string, chatJid: string,
input: AssignRoomInput, input: AssignRoomInput,
@@ -3337,7 +3351,7 @@ function migrateJsonState(): void {
if (groups) { if (groups) {
for (const [jid, group] of Object.entries(groups)) { for (const [jid, group] of Object.entries(groups)) {
try { try {
setRegisteredGroup(jid, group); writeLegacyRegisteredGroupAndSyncRoomSettings(jid, group);
} catch (err) { } catch (err) {
logger.warn( logger.warn(
{ jid, folder: group.folder, err }, { jid, folder: group.folder, err },

View File

@@ -1,12 +1,12 @@
import { describe, it, expect, beforeEach, vi } from 'vitest'; import { describe, it, expect, beforeEach, vi } from 'vitest';
import { import {
_setRegisteredGroupForTests,
_initTestDatabase, _initTestDatabase,
storeMessage, storeMessage,
storeChatMetadata, storeChatMetadata,
createProducedWorkItem, createProducedWorkItem,
getOpenWorkItem, getOpenWorkItem,
setRegisteredGroup,
getLastBotFinalMessage, getLastBotFinalMessage,
markWorkItemDelivered, markWorkItemDelivered,
} from './db.js'; } from './db.js';
@@ -56,7 +56,7 @@ 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';
setRegisteredGroup(jid, { _setRegisteredGroupForTests(jid, {
name: 'Paired Room', name: 'Paired Room',
folder: 'paired-room', folder: 'paired-room',
trigger: '@claude', trigger: '@claude',
@@ -64,7 +64,7 @@ describe('hasReviewerLease', () => {
agentType: 'claude-code', agentType: 'claude-code',
}); });
setRegisteredGroup(jid, { _setRegisteredGroupForTests(jid, {
name: 'Paired Room', name: 'Paired Room',
folder: 'paired-room', folder: 'paired-room',
trigger: '@codex', trigger: '@codex',
@@ -78,7 +78,7 @@ describe('hasReviewerLease', () => {
it('returns false when only claude-code is registered', () => { it('returns false when only claude-code is registered', () => {
const jid = 'dc:single-claude'; const jid = 'dc:single-claude';
setRegisteredGroup(jid, { _setRegisteredGroupForTests(jid, {
name: 'Single Claude', name: 'Single Claude',
folder: 'single-claude', folder: 'single-claude',
trigger: '@claude', trigger: '@claude',
@@ -92,7 +92,7 @@ describe('hasReviewerLease', () => {
it('returns false when only codex is registered', () => { it('returns false when only codex is registered', () => {
const jid = 'dc:single-codex'; const jid = 'dc:single-codex';
setRegisteredGroup(jid, { _setRegisteredGroupForTests(jid, {
name: 'Single Codex', name: 'Single Codex',
folder: 'single-codex', folder: 'single-codex',
trigger: '@codex', trigger: '@codex',
@@ -180,7 +180,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
setupChat(jid); setupChat(jid);
// Register as paired room // Register as paired room
setRegisteredGroup(jid, { _setRegisteredGroupForTests(jid, {
name: 'Paired Room', name: 'Paired Room',
folder: 'paired-room', folder: 'paired-room',
trigger: '@claude', trigger: '@claude',
@@ -188,7 +188,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
agentType: 'claude-code', agentType: 'claude-code',
}); });
setRegisteredGroup(jid, { _setRegisteredGroupForTests(jid, {
name: 'Paired Room', name: 'Paired Room',
folder: 'paired-room', folder: 'paired-room',
trigger: '@codex', trigger: '@codex',
@@ -225,7 +225,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
setupChat(jid); setupChat(jid);
// Register only one bot // Register only one bot
setRegisteredGroup(jid, { _setRegisteredGroupForTests(jid, {
name: 'Single Bot', name: 'Single Bot',
folder: 'single-bot', folder: 'single-bot',
trigger: '@claude', trigger: '@claude',
@@ -257,7 +257,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
setupChat(jid); setupChat(jid);
// Register as paired room // Register as paired room
setRegisteredGroup(jid, { _setRegisteredGroupForTests(jid, {
name: 'Paired Room', name: 'Paired Room',
folder: 'paired-room', folder: 'paired-room',
trigger: '@claude', trigger: '@claude',
@@ -265,7 +265,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
agentType: 'claude-code', agentType: 'claude-code',
}); });
setRegisteredGroup(jid, { _setRegisteredGroupForTests(jid, {
name: 'Paired Room', name: 'Paired Room',
folder: 'paired-room', folder: 'paired-room',
trigger: '@codex', trigger: '@codex',
@@ -297,7 +297,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
setupChat(jid); setupChat(jid);
// Register as paired room // Register as paired room
setRegisteredGroup(jid, { _setRegisteredGroupForTests(jid, {
name: 'Paired Room', name: 'Paired Room',
folder: 'paired-room', folder: 'paired-room',
trigger: '@claude', trigger: '@claude',
@@ -305,7 +305,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
agentType: 'claude-code', agentType: 'claude-code',
}); });
setRegisteredGroup(jid, { _setRegisteredGroupForTests(jid, {
name: 'Paired Room', name: 'Paired Room',
folder: 'paired-room', folder: 'paired-room',
trigger: '@codex', trigger: '@codex',
@@ -336,7 +336,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
setupChat(jid); setupChat(jid);
// Register as paired room // Register as paired room
setRegisteredGroup(jid, { _setRegisteredGroupForTests(jid, {
name: 'Paired Room', name: 'Paired Room',
folder: 'paired-room', folder: 'paired-room',
trigger: '@claude', trigger: '@claude',
@@ -344,7 +344,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
agentType: 'claude-code', agentType: 'claude-code',
}); });
setRegisteredGroup(jid, { _setRegisteredGroupForTests(jid, {
name: 'Paired Room', name: 'Paired Room',
folder: 'paired-room', folder: 'paired-room',
trigger: '@codex', trigger: '@codex',
@@ -384,7 +384,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
setupChat(jid); setupChat(jid);
// Register as paired room // Register as paired room
setRegisteredGroup(jid, { _setRegisteredGroupForTests(jid, {
name: 'Paired Room', name: 'Paired Room',
folder: 'paired-room', folder: 'paired-room',
trigger: '@claude', trigger: '@claude',
@@ -392,7 +392,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
agentType: 'claude-code', agentType: 'claude-code',
}); });
setRegisteredGroup(jid, { _setRegisteredGroupForTests(jid, {
name: 'Paired Room', name: 'Paired Room',
folder: 'paired-room', folder: 'paired-room',
trigger: '@codex', trigger: '@codex',
@@ -440,7 +440,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
setupChat(jid); setupChat(jid);
// Register as paired room // Register as paired room
setRegisteredGroup(jid, { _setRegisteredGroupForTests(jid, {
name: 'Paired Room', name: 'Paired Room',
folder: 'paired-room', folder: 'paired-room',
trigger: '@claude', trigger: '@claude',
@@ -448,7 +448,7 @@ describe('isDuplicateOfLastBotFinal (runtime function)', () => {
agentType: 'claude-code', agentType: 'claude-code',
}); });
setRegisteredGroup(jid, { _setRegisteredGroupForTests(jid, {
name: 'Paired Room', name: 'Paired Room',
folder: 'paired-room', folder: 'paired-room',
trigger: '@codex', trigger: '@codex',

View File

@@ -2,6 +2,7 @@ import { describe, it, expect, beforeEach, vi } from 'vitest';
import { ASSISTANT_NAME } from './config.js'; import { ASSISTANT_NAME } from './config.js';
import { import {
_setRegisteredGroupForTests,
_initTestDatabase, _initTestDatabase,
assignRoom, assignRoom,
createTask, createTask,
@@ -10,7 +11,6 @@ import {
getRegisteredGroup, getRegisteredGroup,
getStoredRoomSettings, getStoredRoomSettings,
getTaskById, getTaskById,
setRegisteredGroup,
} from './db.js'; } from './db.js';
import { processTaskIpc, IpcDeps } from './ipc.js'; import { processTaskIpc, IpcDeps } from './ipc.js';
import { DEFAULT_WATCH_CI_MAX_DURATION_MS } from './task-watch-status.js'; import { DEFAULT_WATCH_CI_MAX_DURATION_MS } from './task-watch-status.js';
@@ -52,9 +52,9 @@ beforeEach(() => {
}; };
// Populate DB as well // Populate DB as well
setRegisteredGroup('main@g.us', MAIN_GROUP); _setRegisteredGroupForTests('main@g.us', MAIN_GROUP);
setRegisteredGroup('other@g.us', OTHER_GROUP); _setRegisteredGroupForTests('other@g.us', OTHER_GROUP);
setRegisteredGroup('third@g.us', THIRD_GROUP); _setRegisteredGroupForTests('third@g.us', THIRD_GROUP);
deps = { deps = {
sendMessage: async () => {}, sendMessage: async () => {},
@@ -119,7 +119,7 @@ describe('schedule_task authorization', () => {
...OTHER_GROUP, ...OTHER_GROUP,
agentType: 'codex', agentType: 'codex',
}; };
setRegisteredGroup('other@g.us', groups['other@g.us']); _setRegisteredGroupForTests('other@g.us', groups['other@g.us']);
await processTaskIpc( await processTaskIpc(
{ {

View File

@@ -1,10 +1,10 @@
import { beforeEach, describe, expect, it } from 'vitest'; import { beforeEach, describe, expect, it } from 'vitest';
import { import {
_setRegisteredGroupForTests,
_setStoredRoomOwnerAgentTypeForTests, _setStoredRoomOwnerAgentTypeForTests,
_initTestDatabase, _initTestDatabase,
setExplicitRoomMode, setExplicitRoomMode,
setRegisteredGroup,
} from './db.js'; } from './db.js';
import { import {
activateCodexFailover, activateCodexFailover,
@@ -22,14 +22,14 @@ beforeEach(() => {
describe('service-routing global failover', () => { describe('service-routing global failover', () => {
it('uses codex-review as owner during global failover', () => { it('uses codex-review as owner during global failover', () => {
setRegisteredGroup('dc:paired', { _setRegisteredGroupForTests('dc:paired', {
name: 'Paired Room', name: 'Paired Room',
folder: 'paired-room', folder: 'paired-room',
trigger: '@Andy', trigger: '@Andy',
added_at: '2024-01-01T00:00:00.000Z', added_at: '2024-01-01T00:00:00.000Z',
agentType: 'claude-code', agentType: 'claude-code',
}); });
setRegisteredGroup('dc:paired', { _setRegisteredGroupForTests('dc:paired', {
name: 'Paired Room', name: 'Paired Room',
folder: 'paired-room', folder: 'paired-room',
trigger: '@Codex', trigger: '@Codex',
@@ -57,14 +57,14 @@ describe('service-routing global failover', () => {
}); });
it('restores default lease after global failover is cleared', () => { it('restores default lease after global failover is cleared', () => {
setRegisteredGroup('dc:paired', { _setRegisteredGroupForTests('dc:paired', {
name: 'Paired Room', name: 'Paired Room',
folder: 'paired-room', folder: 'paired-room',
trigger: '@Andy', trigger: '@Andy',
added_at: '2024-01-01T00:00:00.000Z', added_at: '2024-01-01T00:00:00.000Z',
agentType: 'claude-code', agentType: 'claude-code',
}); });
setRegisteredGroup('dc:paired', { _setRegisteredGroupForTests('dc:paired', {
name: 'Paired Room', name: 'Paired Room',
folder: 'paired-room', folder: 'paired-room',
trigger: '@Codex', trigger: '@Codex',
@@ -85,14 +85,14 @@ describe('service-routing global failover', () => {
}); });
it('uses explicit single room mode to suppress reviewer lease on dual registration', () => { it('uses explicit single room mode to suppress reviewer lease on dual registration', () => {
setRegisteredGroup('dc:explicit-single', { _setRegisteredGroupForTests('dc:explicit-single', {
name: 'Explicit Single', name: 'Explicit Single',
folder: 'explicit-single', folder: 'explicit-single',
trigger: '@Andy', trigger: '@Andy',
added_at: '2024-01-01T00:00:00.000Z', added_at: '2024-01-01T00:00:00.000Z',
agentType: 'claude-code', agentType: 'claude-code',
}); });
setRegisteredGroup('dc:explicit-single', { _setRegisteredGroupForTests('dc:explicit-single', {
name: 'Explicit Single', name: 'Explicit Single',
folder: 'explicit-single', folder: 'explicit-single',
trigger: '@Codex', trigger: '@Codex',
@@ -110,14 +110,14 @@ describe('service-routing global failover', () => {
}); });
it('uses stored owner agent type when room_settings selects a different owner', () => { it('uses stored owner agent type when room_settings selects a different owner', () => {
setRegisteredGroup('dc:stored-owner-claude', { _setRegisteredGroupForTests('dc:stored-owner-claude', {
name: 'Stored Owner Claude', name: 'Stored Owner Claude',
folder: 'stored-owner-claude', folder: 'stored-owner-claude',
trigger: '@Andy', trigger: '@Andy',
added_at: '2024-01-01T00:00:00.000Z', added_at: '2024-01-01T00:00:00.000Z',
agentType: 'claude-code', agentType: 'claude-code',
}); });
setRegisteredGroup('dc:stored-owner-claude', { _setRegisteredGroupForTests('dc:stored-owner-claude', {
name: 'Stored Owner Claude', name: 'Stored Owner Claude',
folder: 'stored-owner-claude', folder: 'stored-owner-claude',
trigger: '@Codex', trigger: '@Codex',
@@ -139,7 +139,7 @@ describe('service-routing global failover', () => {
}); });
it('falls back to the available service when stored owner agent type is unavailable', () => { it('falls back to the available service when stored owner agent type is unavailable', () => {
setRegisteredGroup('dc:stored-owner-fallback', { _setRegisteredGroupForTests('dc:stored-owner-fallback', {
name: 'Stored Owner Fallback', name: 'Stored Owner Fallback',
folder: 'stored-owner-fallback', folder: 'stored-owner-fallback',
trigger: '@Andy', trigger: '@Andy',
@@ -157,7 +157,7 @@ describe('service-routing global failover', () => {
}); });
it('creates a same-service reviewer lease when explicit tribunal is runnable on a solo registration', () => { it('creates a same-service reviewer lease when explicit tribunal is runnable on a solo registration', () => {
setRegisteredGroup('dc:explicit-tribunal', { _setRegisteredGroupForTests('dc:explicit-tribunal', {
name: 'Explicit Tribunal Claude', name: 'Explicit Tribunal Claude',
folder: 'explicit-tribunal-claude', folder: 'explicit-tribunal-claude',
trigger: '@Andy', trigger: '@Andy',
@@ -175,7 +175,7 @@ describe('service-routing global failover', () => {
}); });
it('keeps reviewer lease disabled when explicit tribunal cannot deliver the configured reviewer', () => { it('keeps reviewer lease disabled when explicit tribunal cannot deliver the configured reviewer', () => {
setRegisteredGroup('dc:explicit-tribunal-codex', { _setRegisteredGroupForTests('dc:explicit-tribunal-codex', {
name: 'Explicit Tribunal Codex', name: 'Explicit Tribunal Codex',
folder: 'explicit-tribunal-codex', folder: 'explicit-tribunal-codex',
trigger: '@Codex', trigger: '@Codex',