From 931351dfdee34c98470e7114ae7d60c7fa4273b9 Mon Sep 17 00:00:00 2001 From: NagyVikt Date: Sat, 25 Apr 2026 00:27:02 +0200 Subject: [PATCH] Preserve unknown identity for unclassified lanes The previous owner repair made Codex branches display correctly, but the fallback path also converted truly unclassified active-session CLI values to codex. Keep the fallback as unknown unless branch, session key, or recorded CLI provides a concrete signal. Constraint: Worker viewer uses HivemindSession.cli as a display fallback when agent is generic. Rejected: Hide unknown only in viewer | MCP/API consumers would still receive incorrect codex ownership. Confidence: high Scope-risk: narrow Directive: Do not default active-session cli identity to codex without a concrete identity signal. Tested: node /home/deadpool/Documents/recodee/agents-hivemind/node_modules/.pnpm/vitest@2.1.9_@types+node@22.19.17/node_modules/vitest/vitest.mjs run test/hivemind.test.ts Tested: node /home/deadpool/Documents/recodee/agents-hivemind/node_modules/.pnpm/vitest@2.1.9_@types+node@22.19.17/node_modules/vitest/vitest.mjs run Tested: node /home/deadpool/Documents/recodee/agents-hivemind/node_modules/.pnpm/@biomejs+biome@1.9.4/node_modules/@biomejs/biome/bin/biome check packages/core/src/hivemind.ts packages/core/test/hivemind.test.ts Not-tested: full workspace typecheck; existing baseline lacks @types/better-sqlite3 --- packages/core/src/hivemind.ts | 2 +- packages/core/test/hivemind.test.ts | 37 +++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/packages/core/src/hivemind.ts b/packages/core/src/hivemind.ts index 5466431..7f13d13 100644 --- a/packages/core/src/hivemind.ts +++ b/packages/core/src/hivemind.ts @@ -734,7 +734,7 @@ function activeSessionCli(input: JsonRecord, branch: string, sessionKey: string) const branchAgent = deriveAgentName(branch); if (branchAgent !== 'agent') return branchAgent === 'claude' ? 'claude-code' : branchAgent; - return 'codex'; + return 'unknown'; } function agentFromIde(ide: string): string { diff --git a/packages/core/test/hivemind.test.ts b/packages/core/test/hivemind.test.ts index 0d8c626..f55ded7 100644 --- a/packages/core/test/hivemind.test.ts +++ b/packages/core/test/hivemind.test.ts @@ -12,6 +12,43 @@ afterEach(() => { }); describe('readHivemind', () => { + it('keeps cli unknown when no active-session identity signal is concrete', () => { + dir = mkdtempSync(join(tmpdir(), 'colony-hivemind-')); + const repoRoot = join(dir, 'repo'); + const activeSessionDir = join(repoRoot, '.omx', 'state', 'active-sessions'); + const now = new Date().toISOString(); + mkdirSync(activeSessionDir, { recursive: true }); + writeFileSync( + join(activeSessionDir, 'mcp-123.json'), + `${JSON.stringify( + { + schemaVersion: 1, + repoRoot, + branch: 'main', + taskName: 'MCP tool heartbeat', + agentName: 'unknown', + cliName: 'unknown', + sessionKey: 'mcp-123', + worktreePath: repoRoot, + startedAt: now, + lastHeartbeatAt: now, + state: 'working', + }, + null, + 2, + )}\n`, + 'utf8', + ); + + const snapshot = readHivemind({ repoRoot, now: Date.parse(now), includeStale: true }); + + expect(snapshot.sessions[0]).toMatchObject({ + branch: 'main', + agent: 'agent', + cli: 'unknown', + }); + }); + it('derives codex owner when active-session telemetry says unknown', () => { dir = mkdtempSync(join(tmpdir(), 'colony-hivemind-')); const repoRoot = join(dir, 'repo');