fix(paired): auto-provision paired workspace so tribunal rooms get a reviewer on registration
Rooms registered as tribunal had no work_dir and no paired_projects row, so ensurePairedProject() returned null, no paired task was ever created, and only the owner ran — the reviewer/arbiter never fired (web-vstock and 4 other rooms). Add ensurePairedWorkspaceProvisioned(): defaults canonical work_dir to groups/<folder>, guarantees it is a standalone git repo with an initial commit (detected via a LOCAL .git so we never walk up into the EJClaw checkout and create a stray worktree), and upserts the paired_projects row. Wire it into setup/register.ts so every newly registered room is immediately usable by the full owner→reviewer→arbiter flow. Adds a regression test.
This commit is contained in:
@@ -9,6 +9,7 @@ import path from 'path';
|
||||
import { GROUPS_DIR } from '../src/config.js';
|
||||
import { assignRoom, initDatabase } from '../src/db.js';
|
||||
import { isValidGroupFolder } from '../src/group-folder.js';
|
||||
import { ensurePairedWorkspaceProvisioned } from '../src/paired-workspace-manager.js';
|
||||
import { logger } from '../src/logger.js';
|
||||
import { emitStatus } from './status.js';
|
||||
|
||||
@@ -109,6 +110,24 @@ export async function run(args: string[]): Promise<void> {
|
||||
});
|
||||
logger.info('Assigned room through canonical room service');
|
||||
|
||||
// Provision the paired workspace so a tribunal room's reviewer/arbiter work
|
||||
// immediately on registration. Without this the room has work_dir=null and
|
||||
// the paired flow never creates a task, so only the owner ever runs.
|
||||
const canonicalWorkDir = ensurePairedWorkspaceProvisioned({
|
||||
chatJid: parsed.jid,
|
||||
groupFolder: parsed.folder,
|
||||
});
|
||||
assignRoom(parsed.jid, {
|
||||
name: parsed.name,
|
||||
folder: parsed.folder,
|
||||
isMain: parsed.isMain,
|
||||
workDir: canonicalWorkDir,
|
||||
});
|
||||
logger.info(
|
||||
{ folder: parsed.folder, canonicalWorkDir },
|
||||
'Provisioned paired workspace for room so reviewer/arbiter run on registration',
|
||||
);
|
||||
|
||||
fs.mkdirSync(path.join(GROUPS_DIR, parsed.folder, 'logs'), {
|
||||
recursive: true,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user