stablyai/orca · warning · Error

Worktree is no longer registered with Git and its directory

Error message

Worktree is no longer registered with Git and its directory is already gone.

What it means

Thrown (UNREGISTERED_MISSING_WORKTREE_MESSAGE) when isAlreadyRemovedWorktreePath is true (directory already gone) but args.force is false AND removedMeta is undefined. Without persisted metadata proving Orca owned the row, the main process won't clear Orca-only state for an unregistered, already-deleted path; it requires the renderer recovery path.

Source

Thrown at src/main/ipc/worktrees.ts:2597

                  localWorktreeGitOptions
                )
                runtime.clearOptimisticReconcileToken(args.worktreeId)
                removeWorktreeMetadataAndTransientState(store, args.worktreeId, removalHostId)
                preservedBranchCleanupByScope.delete(
                  preservedBranchCleanupScopeKey({
                    worktreeId: args.worktreeId,
                    hostId: removalHostId
                  })
                )
                invalidateAuthorizedRootsCache()
                notifyWorktreesChanged(mainWindow, repoId)
                return {}
              }
            }
            if (await isAlreadyRemovedWorktreePath(repo, worktreePath, localWorktreeGitOptions)) {
              if (!args.force && !removedMeta) {
                // Why: without persisted metadata, require the renderer recovery path before deleting Orca-only state for an unregistered path.
                throw new Error(UNREGISTERED_MISSING_WORKTREE_MESSAGE)
              }
              // Why: a manually deleted worktree is already gone; persisted metadata proves it was an Orca-known row, so no force is needed.
              if (repo.connectionId) {
                await cleanupUnusedWorktreePushTargetRemoteSsh(
                  provider!,
                  repo.path,
                  args.worktreeId,
                  removedPushTarget,
                  store
                )
              } else {
                await cleanupUnusedWorktreePushTargetRemote(
                  repo.path,
                  args.worktreeId,
                  removedPushTarget,
                  store,
                  localWorktreeGitOptions
                )

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Retry with args.force true so Orca clears the dangling state even without metadata.
  2. If the worktree was never Orca-tracked, no removal is needed — drop the stale renderer row locally.
  3. Ensure worktree metadata is persisted at creation so future removals have removedMeta to rely on.

Example fix

// before
invoke('worktrees:remove', { worktreeId, force: false })
// after
invoke('worktrees:remove', { worktreeId, force: true })
Defensive patterns

Strategy: retry

Type guard

function isUnregisteredMissingMessage(e: unknown): boolean {
  return e instanceof Error && e.message.startsWith('Worktree is no longer registered with Git and its directory is already gone')
}

Try / catch

try {
  await invoke('worktrees:remove', { worktreeId, force: false })
} catch (e) {
  if (isUnregisteredMissingMessage(e)) {
    // No metadata + already gone: clear dangling Orca state with force.
    await invoke('worktrees:remove', { worktreeId, force: true })
  } else throw e
}

Prevention

When it happens

Trigger: A non-force worktrees:remove for a worktree whose directory is already gone and for which the store holds no WorktreeMeta (never persisted, or metadata was wiped).

Common situations: User deleted the worktree directory out-of-band and the Orca metadata row was never written or was cleared; the path is gone but Orca can't prove prior ownership.

Related errors


AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12). Data as JSON: /api/errors/515c3f7d1ffffe9a. Report an issue: GitHub.