Yeachan-Heo/oh-my-codex · error · Error

worktree_not_provisioned:${workerName}

Error message

worktree_not_provisioned:${workerName}

What it means

ensureWorktree returned a disabled workspace (or a fault was injected) while provisioning a worktree for a new worker during scaleUp. The planned worktree could not actually be provisioned.

Source

Thrown at src/team/scaling.ts:1131

            cwd: leaderCwd,
            scope: 'team',
            mode: effectiveWorktreeMode,
            teamName: sanitized,
            workerName,
          });
          if (!worktreePlan.enabled) throw new Error(`worktree_not_planned:${workerName}`);
          const worktreePathExistedBeforeEnsure = existsSync(worktreePlan.worktreePath);
          const branchExistedBeforeEnsure = worktreePlan.branchName
            ? spawnSync('git', ['show-ref', '--verify', '--quiet', `refs/heads/${worktreePlan.branchName}`], {
                cwd: worktreePlan.repoRoot,
                encoding: 'utf-8',
                windowsHide: true,
              }).status === 0
            : false;
          try {
            const ensuredWorkspace = ensureWorktree(worktreePlan);
            throwIfScaleUpFailureInjected(env, 'worktree-ensure-post-create');
            if (!ensuredWorkspace.enabled) throw new Error(`worktree_not_provisioned:${workerName}`);
            workerWorkspace = ensuredWorkspace;
          } catch (error) {
            const recoveredWorkspace = recoverCreatedWorktreeAfterEnsureFailure(
              worktreePlan,
              worktreePathExistedBeforeEnsure,
              branchExistedBeforeEnsure,
            );
            if (recoveredWorkspace) {
              workerWorkspace = recoveredWorkspace;
              provisionedWorktrees.push(recoveredWorkspace);
            }
            throw error;
          }
          if (!workerWorkspace) throw new Error(`worktree_not_provisioned:${workerName}`);
          provisionedWorktrees.push(workerWorkspace);
          throwIfScaleUpFailureInjected(env, 'worktree-post-create');
          workerCwd = workerWorkspace.worktreePath;
        }

View on GitHub (pinned to 3ad79a8a6f)

Solutions

  1. Run 'git worktree list' and clean up stale/corrupt worktrees under .omx/team/<team>/worktrees
  2. Ensure git is on PATH and the repo is healthy (git fsck)
  3. Retry scaleUp after freeing disk space / removing conflicting branches or worktree dirs
Defensive patterns

Strategy: fallback

Validate before calling

import { spawnSync } from 'node:child_process';
function worktreesHealthy(repoRoot: string): boolean {
  return spawnSync('git', ['worktree', 'list'], { cwd: repoRoot }).status === 0;
}

Try / catch

catch (e) {
  if ((e as Error).message.startsWith('worktree_not_provisioned')) {
    // fall back to scale-up without worktrees, or clean stale worktrees and retry
    return scaleUp(team, count, { ...opts, worktreeMode: 'none' });
  }
  throw e;
}

Prevention

When it happens

Trigger: Calling scaleUp; planWorktree succeeded but ensureWorktree returned {enabled:false} (e.g. git worktree add failed silently or config disabled) or the 'worktree-ensure-post-create' failure injection fired.

Common situations: git worktree add failing due to name collision, disk full, or corrupt .git/worktrees metadata; environment issue where git is unavailable on PATH.

Related errors


AI-assisted analysis of Yeachan-Heo/oh-my-codex@3ad79a8a6f (2026-08-27). Data as JSON: /api/errors/b41ecaf7bbf3ab78. Report an issue: GitHub.