{"record":{"id":"a9432dbadf542eb9","repo":"can1357/oh-my-pi","slug":"expected-name-to-be-a-positive-integer-got-a9432d","errorCode":null,"errorMessage":"Expected --${name} to be a positive integer, got ${value}","messagePattern":"Expected --(.+?) to be a positive integer, got (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/coding-agent/src/if-bench/index.ts","lineNumber":56,"sourceCode":"\t};\n}\n\nexport interface IfBenchDependencies {\n\tcreateRuntime?: () => Promise<BenchRuntime>;\n\tstreamSimple?: StreamSimpleFn;\n\tnow?: () => number;\n\trandomSessionId?: () => string;\n\tsleep?: (ms: number) => Promise<void>;\n\twriteStdout?: (text: string) => void;\n\twriteStderr?: (text: string) => void;\n\tsetExitCode?: (code: number) => void;\n\tstdoutIsTTY?: boolean;\n}\n\nfunction positiveInteger(name: string, value: number | undefined, fallback: number): number {\n\tif (value === undefined) return fallback;\n\tif (!Number.isInteger(value) || value <= 0) {\n\t\tthrow new Error(`Expected --${name} to be a positive integer, got ${value}`);\n\t}\n\treturn value;\n}\n\n/** Resolve selectors, run every thread, and render the live board plus scoreboard. */\nexport async function runIfBenchCommand(\n\tcommand: IfBenchCommandArgs,\n\tdeps: IfBenchDependencies = {},\n): Promise<IfBenchSummary> {\n\tif (command.models.length === 0) {\n\t\tthrow new Error(\"Pass at least one model selector, e.g. `omp if-bench opus gpt-5.2`\");\n\t}\n\tconst maxTurns = positiveInteger(\"turns\", command.flags.turns, DEFAULT_TURNS);\n\tconst arrayLength = positiveInteger(\"length\", command.flags.length, DEFAULT_ARRAY_LENGTH);\n\tconst maxTokens = positiveInteger(\"max-tokens\", command.flags.maxTokens, DEFAULT_MAX_TOKENS);\n\tconst nyaMax = positiveInteger(\"nya-max\", command.flags.nyaMax, DEFAULT_NYA_MAX);\n\tconst par = positiveInteger(\"par\", command.flags.par, DEFAULT_PAR);\n\tconst json = command.flags.json === true;","sourceCodeStart":38,"sourceCodeEnd":74,"githubUrl":"https://github.com/can1357/oh-my-pi/blob/969062200754ea02cfac922e5ebb8c608c079e15/packages/coding-agent/src/if-bench/index.ts#L38-L74","documentation":"runIfBenchCommand resolves optional numeric flags (turns, length, max-tokens, nya-max, par) through positiveInteger(), which throws if a flag was supplied but is not a positive integer. Absent flags fall back to defaults without error.","triggerScenarios":"Passing `--turns 0`, `--par -3`, `--max-tokens 2.5`, or any non-positive/non-integer value for turns/length/max-tokens/nya-max/par on the `omp if-bench` command.","commonSituations":"Shell variables interpolating empty or malformed values; typos like `--turns 1.5`; testing degenerate configs such as zero turns.","solutions":["Supply positive integers for each flag (>= 1)","Omit the flag to use its default instead of passing 0","Pre-parse/validate values in wrapper scripts before invoking omp"],"exampleFix":"// before\nomp if-bench opus --turns 0\n// after\nomp if-bench opus --turns 10","handlingStrategy":"validation","validationCode":"function assertPositiveInt(name: string, v: number | undefined): void {\n  if (v !== undefined && (!Number.isInteger(v) || v <= 0)) {\n    throw new Error(`--${name} must be a positive integer`);\n  }\n}\n[\"turns\",\"length\",\"maxTokens\",\"nyaMax\",\"par\"].forEach(k => assertPositiveInt(k, flags[k]));","typeGuard":"function isPositiveInt(v: unknown): v is number {\n  return typeof v === \"number\" && Number.isInteger(v) && v > 0;\n}","tryCatchPattern":"try {\n  await runIfBenchCommand(args);\n} catch (err) {\n  if (err instanceof Error && err.message.startsWith(\"Expected --\")) {\n    console.error(err.message);\n    process.exitCode = 2;\n  } else throw err;\n}","preventionTips":["Omit flags to accept defaults rather than passing 0","Parse CLI numbers with Number.parseInt and reject NaN","Validate shell-interpolated variables before invoking omp"],"tags":["cli","validation","arguments"],"backgroundTag":"invalid-cli-argument","analyzedSha":"969062200754ea02cfac922e5ebb8c608c079e15","analyzedAt":"2026-08-31T10:29:35.737Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}