stablyai/orca · error · Error
Invalid --synthetic-spinner-animation: ${options.syntheticSp
Error message
Invalid --synthetic-spinner-animation: ${options.syntheticSpinnerAnimation} What it means
Thrown by parseArgs when --synthetic-spinner-animation is not one of the two allowed values ('smooth' or 'steps'). The synthetic spinner fixture only supports those two animation styles; anything else is rejected before measurement.
Source
Thrown at config/scripts/run-idle-cpu-benchmark.mjs:130
'syntheticSpinnerSteps'
]) {
if (!Number.isFinite(options[key]) || options[key] < 0) {
throw new Error(`Invalid --${key}: ${options[key]}`)
}
}
options.worktrees = Math.max(1, Math.floor(options.worktrees))
options.intervalMs = Math.max(250, Math.floor(options.intervalMs))
options.lineageDepth = Math.floor(options.lineageDepth)
options.agentsPerWorktree = Math.floor(options.agentsPerWorktree)
options.zustandPublications = Math.floor(options.zustandPublications)
options.zustandPublicationIntervalMs = Math.max(
1,
Math.floor(options.zustandPublicationIntervalMs)
)
options.syntheticVisibleSpinners = Math.max(0, Math.floor(options.syntheticVisibleSpinners))
options.syntheticSpinnerSteps = Math.max(1, Math.floor(options.syntheticSpinnerSteps))
if (!['smooth', 'steps'].includes(options.syntheticSpinnerAnimation)) {
throw new Error(`Invalid --synthetic-spinner-animation: ${options.syntheticSpinnerAnimation}`)
}
if (options.lineageDepth > 0 && options.worktrees < 2) {
throw new Error('--lineage-depth requires at least two --worktrees')
}
const publicationSpanMs =
Math.max(0, options.zustandPublications - 1) * options.zustandPublicationIntervalMs
if (publicationSpanMs > options.sampleMs) {
throw new Error(
`Zustand publication span ${publicationSpanMs}ms exceeds --sample-ms ${options.sampleMs}`
)
}
return options
}
function printUsage() {
console.log(
`Usage: node config/scripts/run-idle-cpu-benchmark.mjs [options]\n\nOptions:\n --warmup-ms <n> Time to wait after app readiness before sampling (default ${DEFAULT_WARMUP_MS})\n --sample-ms <n> Sampling window duration (default ${DEFAULT_SAMPLE_MS})\n --interval-ms <n> Sampling cadence (default ${DEFAULT_INTERVAL_MS})\n --worktrees <n> Seed repo worktree count, including primary (default ${DEFAULT_WORKTREE_COUNT})\n --lineage-depth <n> Nest all worktrees under one expanded lineage, up to this depth\n --agents-per-worktree <n> Seed this many visible inline agent rows per worktree\n --zustand-publications <n> Publish exactly this many store updates during sampling\n --zustand-publication-interval-ms <n> Publication cadence (default ${DEFAULT_ZUSTAND_PUBLICATION_INTERVAL_MS})\n --headful Show the Electron window while measuring\n --skip-build Reuse out/main/index.js instead of building first\n --output <path> Write JSON report to this path\n --disable-renderer-animations Inject measurement-only CSS that disables animations/transitions\n --synthetic-visible-spinners <n> Measurement-only: add visible working spinners\n --synthetic-spinner-animation <smooth|steps> Spinner animation style (default smooth)\n --synthetic-spinner-steps <n> Step count for --synthetic-spinner-animation steps (default 12)\n`
)
}View on GitHub (pinned to 1136503c6a)
Solutions
- Use exactly 'smooth' or 'steps'.
- If using steps, also set --synthetic-spinner-steps to the desired step count.
Example fix
# before node config/scripts/run-idle-cpu-benchmark.mjs --synthetic-spinner-animation linear # after node config/scripts/run-idle-cpu-benchmark.mjs --synthetic-spinner-animation steps --synthetic-spinner-steps 12
Defensive patterns
Strategy: validation
Validate before calling
const SPINNER_ANIMATIONS = new Set(['smooth', 'steps'])
if (!SPINNER_ANIMATIONS.has(options.syntheticSpinnerAnimation)) {
throw new Error(`Invalid --synthetic-spinner-animation: ${options.syntheticSpinnerAnimation}. Use smooth|steps.`)
} Type guard
function isSpinnerAnimation(value) { return value === 'smooth' || value === 'steps' } Try / catch
try {
options = parseArgs(argv)
} catch (err) {
if (/Invalid --synthetic-spinner-animation/.test(err.message)) { printUsage(); process.exit(2) }
throw err
} Prevention
- Constrain enum-like flags with a Set and list allowed values in the error.
- Keep the allowed-values list identical in parse, help, and tests.
When it happens
Trigger: Passing --synthetic-spinner-animation linear / bounce / ease / '' / a typo like 'step' (singular).
Common situations: Guessing an animation name, typos, stale value from an older version that accepted more styles.
Related errors
- --higher-is-better requires a metric key
- Usage: node config/scripts/compare-benchmark-artifacts.mjs -
- Missing value for ${arg}
- Unknown argument: ${arg}
- --boundary must be child or worker
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/48eda81b4a0b78f2.
Report an issue: GitHub.