Files
orca/src/cli/format-recovery.test.ts
T
Brennan Benson 78d5920446 fix(orchestration-cli): point dropped mutations at --retry-request (#14586)
* fix(orchestration-cli): guide dropped mutations to idempotent retry

* test(orchestration-cli): preserve read-only drop message

* fix(orchestration): harden mutation replay identity

* fix(orchestration): preserve replay across remints

* fix(orchestration): defer local mutation identity
2026-08-14 18:11:12 -07:00

74 lines
2.6 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import { formatCliError } from './format'
import { RuntimeClientError, RuntimeRpcFailureError } from './runtime-client'
describe('CLI error recovery', () => {
it('prints did-you-mean next steps for an unknown-command error carrying data', () => {
const error = new RuntimeClientError('invalid_argument', 'Unknown command: worktree remov', {
suggestions: ['worktree rm'],
nextSteps: ['Did you mean: orca worktree rm']
})
const output = formatCliError(error)
expect(output).toContain('Unknown command: worktree remov')
expect(output).toContain('Next step: Did you mean: orca worktree rm')
})
it('prefers structured recovery over generic computer hints in text output', () => {
const error = new RuntimeClientError('invalid_argument', 'Unknown flag --forcce', {
nextSteps: ['Did you mean: --force']
})
const output = formatCliError(error, { commandPath: ['computer', 'click'] })
expect(output).toContain('Next step: Did you mean: --force')
expect(output).not.toContain('Fix the command flags or RPC params')
})
it('prefers RPC recovery over generic computer hints in text output', () => {
const error = new RuntimeRpcFailureError({
id: 'req_rpc_recovery',
ok: false,
error: {
code: 'invalid_argument',
message: 'Unknown runtime argument',
data: { nextSteps: ['Use the runtime-specific option'] }
},
_meta: { runtimeId: 'runtime_local' }
})
const output = formatCliError(error, { commandPath: ['computer', 'click'] })
expect(output).toContain('Next step: Use the runtime-specific option')
expect(output).not.toContain('Fix the command flags or RPC params')
})
it('keeps generic computer hints when an RPC error has no recovery data', () => {
const error = new RuntimeRpcFailureError({
id: 'req_rpc_fallback',
ok: false,
error: { code: 'invalid_argument', message: 'Invalid computer argument' },
_meta: { runtimeId: 'runtime_local' }
})
const output = formatCliError(error, { commandPath: ['computer', 'click'] })
expect(output).toContain('Fix the command flags or RPC params')
})
it('does not replace mutation recovery with generic runtime startup advice', () => {
const error = new RuntimeClientError(
'runtime_unavailable',
'Re-issue the same command with --retry-request mutation_1.',
{ orchestrationRequestId: 'mutation_1' }
)
const output = formatCliError(error)
expect(output).toContain('--retry-request mutation_1')
expect(output).not.toContain('orca open')
})
})