{"record":{"id":"766fd7bbf7d57674","repo":"Yeachan-Heo/oh-my-codex","slug":"worker-workername-not-found-in-team","errorCode":null,"errorMessage":"Worker ${workerName} not found in team","messagePattern":"Worker (.+?) not found in team","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/team/runtime.ts","lineNumber":4706,"sourceCode":"    const task = await readTask(sanitized, taskId, cwd);\n    if (!task) throw new Error(`Task ${taskId} not found`);\n  const manifest = await readTeamManifestV2(sanitized, cwd);\n  const governance = resolveGovernancePolicy(manifest?.governance);\n\n  if (governance.delegation_only && workerName === 'leader-fixed') {\n    throw new Error('delegation_only_violation');\n  }\n\n  if (governance.plan_approval_required && task.requires_code_change === true) {\n    const approved = await isTaskApprovedForExecution(sanitized, taskId, cwd);\n    if (!approved) {\n      throw new Error('plan_approval_required');\n    }\n  }\n  const config = await readTeamConfig(sanitized, cwd);\n  if (!config) throw new Error(`Team ${sanitized} not found`);\n  const workerInfo = config.workers.find(w => w.name === workerName);\n  if (!workerInfo) throw new Error(`Worker ${workerName} not found in team`);\n  const dispatchPolicy = resolveDispatchPolicy(manifest?.policy, config.worker_launch_mode);\n\n  const claim = await claimTask(sanitized, taskId, workerName, task.version ?? 1, cwd);\n  if (!claim.ok) {\n    if (claim.error === 'blocked_dependency') {\n      throw new Error(`blocked_dependency:${(claim.dependencies ?? []).join(',')}`);\n    }\n    throw new Error(claim.error);\n  }\n\n  try {\n    // Retry dispatch up to 2 times to handle trust prompts during assignment (fixes #393).\n    const approvedExecutionState = await resolvePersistedApprovedTeamExecutionContinuityState(\n      sanitized,\n      config.leader_cwd ?? cwd,\n      config.team_state_root ?? resolveCanonicalTeamStateRoot(config.leader_cwd ?? cwd),\n    );\n    const persistedUltragoalContext = await readPersistedTeamUltragoalContext(","sourceCodeStart":4688,"sourceCodeEnd":4724,"githubUrl":"https://github.com/Yeachan-Heo/oh-my-codex/blob/3ad79a8a6fe6e95fdbb8c00e40716fffe4011ce2/src/team/runtime.ts#L4688-L4724","documentation":"Thrown when the requested workerName does not match any entry in config.workers for the team. Assignment requires an existing, configured worker.","triggerScenarios":"Passing a worker name that is not in the team config — e.g. a worker that was removed by scale-down, renamed, or simply mistyped.","commonSituations":"Stale references to scaled-down workers; worker renamed in config but callers not updated; concurrent scale-down racing with dispatch.","solutions":["Read the team config and dispatch to one of the existing config.workers names","If the worker should exist, re-add/scale up the worker before assignment","Re-check the worker list immediately before dispatch to avoid scale-down races"],"exampleFix":"// before\nawait assignTask(team, taskId, 'worker-3', cwd);\n\n// after\nconst config = await readTeamConfig(team, cwd);\nif (!config?.workers.some(w => w.name === 'worker-3')) throw new Error('worker-3 not in team; refresh worker list');\nawait assignTask(team, taskId, 'worker-3', cwd);","handlingStrategy":"validation","validationCode":"const config = await readTeamConfig(teamName, cwd);\nif (!config?.workers.some(w => w.name === workerName)) throw new Error('unknown worker');","typeGuard":"function isKnownWorker(config: TeamConfig, name: string): boolean {\n  return config.workers.some(w => w.name === name);\n}","tryCatchPattern":"try { await assignTask(t, id, w, cwd); } catch (e) { if (/^Worker .+ not found/.test((e as Error).message)) w = latestWorkerName(t); else throw e; }","preventionTips":["Resolve worker names from the live config instead of caching them","Re-validate after scale-down/scale-up events","Avoid races between scaling and dispatch"],"tags":["worker","not-found"],"backgroundTag":"entity-not-found","analyzedSha":"3ad79a8a6fe6e95fdbb8c00e40716fffe4011ce2","analyzedAt":"2026-08-27T22:18:39.783Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}