{"record":{"id":"fb2870bf8ba2ec22","repo":"stablyai/orca","slug":"orca-pty-bench-payload-chars-must-be-positive-rec","errorCode":null,"errorMessage":"ORCA_PTY_BENCH_PAYLOAD_CHARS must be positive, received ${PAYLOAD_CHARS}","messagePattern":"ORCA_PTY_BENCH_PAYLOAD_CHARS must be positive, received (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"config/scripts/pty-batch-flush-benchmark.mjs","lineNumber":24,"sourceCode":"const PAYLOAD_CHARS = Number.parseInt(process.env.ORCA_PTY_BENCH_PAYLOAD_CHARS ?? '262144', 10)\nconst RUNS = Number.parseInt(process.env.ORCA_PTY_BENCH_RUNS ?? '30', 10)\nconst MEASURE_TIMER_DELAYS = process.env.ORCA_PTY_BENCH_MEASURE_TIMER_DELAYS !== '0'\nconst INGRESS_CHUNKS = Number.parseInt(process.env.ORCA_PTY_BENCH_INGRESS_CHUNKS ?? '96', 10)\nconst INGRESS_CHUNK_CHARS = Number.parseInt(process.env.ORCA_PTY_BENCH_INGRESS_CHARS ?? '65536', 10)\nconst CHUNK_CHARS = 16 * 1024\nconst MAX_WRITES_PER_SLICE = 2\nconst RECENT_PTY_OUTPUT_LIMIT = 4096\nconst MAX_TAIL_LINES = 2000\nconst MAX_TAIL_CHARS = 256 * 1024\nconst MAX_TAIL_PARTIAL_CHARS = 4000\nconst OSC_TITLE_RE = /\\x1b\\]([012]);([^\\x07\\x1b]*?)(?:\\x07|\\x1b\\\\)/g\nconst URL_CANDIDATE_PATTERN = /\\bhttps?:\\/\\/[^\\s<>\"'`]+/gi\n\nif (!Number.isInteger(PTY_COUNT) || PTY_COUNT <= 0) {\n  throw new Error(`ORCA_PTY_BENCH_PTY_COUNT must be positive, received ${PTY_COUNT}`)\n}\nif (!Number.isInteger(PAYLOAD_CHARS) || PAYLOAD_CHARS <= 0) {\n  throw new Error(`ORCA_PTY_BENCH_PAYLOAD_CHARS must be positive, received ${PAYLOAD_CHARS}`)\n}\nif (!Number.isInteger(RUNS) || RUNS <= 0) {\n  throw new Error(`ORCA_PTY_BENCH_RUNS must be positive, received ${RUNS}`)\n}\nif (!Number.isInteger(INGRESS_CHUNKS) || INGRESS_CHUNKS <= 0) {\n  throw new Error(`ORCA_PTY_BENCH_INGRESS_CHUNKS must be positive, received ${INGRESS_CHUNKS}`)\n}\nif (!Number.isInteger(INGRESS_CHUNK_CHARS) || INGRESS_CHUNK_CHARS <= 0) {\n  throw new Error(`ORCA_PTY_BENCH_INGRESS_CHARS must be positive, received ${INGRESS_CHUNK_CHARS}`)\n}\n\nfunction makePendingData() {\n  const pending = new Map()\n  for (let index = 0; index < PTY_COUNT; index++) {\n    pending.set(`pty-${index}`, `${index}:`.padEnd(PAYLOAD_CHARS, 'x'))\n  }\n  return pending\n}","sourceCodeStart":6,"sourceCodeEnd":42,"githubUrl":"https://github.com/stablyai/orca/blob/1136503c6a231a16dce8f921f6fadb63d181e8db/config/scripts/pty-batch-flush-benchmark.mjs#L6-L42","documentation":"Thrown by config/scripts/pty-batch-flush-benchmark.mjs when ORCA_PTY_BENCH_PAYLOAD_CHARS fails `!Number.isInteger(PAYLOAD_CHARS) || PAYLOAD_CHARS <= 0`. PAYLOAD_CHARS (default 262144) is the per-PTY simulated payload size in characters, fed into `padEnd(PAYLOAD_CHARS, 'x')` in makePendingData(). A non-positive value would produce an empty or invalid payload, so the guard rejects it before the benchmark allocates data.","triggerScenarios":"Set ORCA_PTY_BENCH_PAYLOAD_CHARS to `0`, a negative number, an empty string, or a non-numeric value, then run the benchmark script. The module-level parseInt at line 6 produces NaN for non-numeric input, and line 23-24 throws.","commonSituations":"A user tries to run a 'tiny payload' micro-benchmark and sets PAYLOAD_CHARS=0 thinking it means 'minimal', or a CI matrix template leaves the variable blank. Misunits like `256k` (parseInt yields 256, actually valid but surprising) or `0x100` are common copy-paste mistakes.","solutions":["Set ORCA_PTY_BENCH_PAYLOAD_CHARS to a positive integer (the default 262144 is a sensible baseline).","Unset it to accept the default of 262144.","If you wanted a small-payload run, use a small but positive value such as 1024."],"exampleFix":"// before\nORCA_PTY_BENCH_PAYLOAD_CHARS=0 node config/scripts/pty-batch-flush-benchmark.mjs\n\n// after\nORCA_PTY_BENCH_PAYLOAD_CHARS=1024 node config/scripts/pty-batch-flush-benchmark.mjs","handlingStrategy":"validation","validationCode":"const raw = process.env.ORCA_PTY_BENCH_PAYLOAD_CHARS\nif (raw !== undefined && (!Number.isInteger(Number(raw)) || Number(raw) <= 0)) {\n  throw new Error(`ORCA_PTY_BENCH_PAYLOAD_CHARS='${raw}' must be a positive integer`)\n}","typeGuard":"function isPositiveInt(value) {\n  const n = Number(value)\n  return Number.isInteger(n) && n > 0\n}","tryCatchPattern":null,"preventionTips":["Use units of characters, not KB/MB, for PAYLOAD_CHARS (no `256k` suffixes).","Unset the var rather than setting 0 for a minimal run; use a small positive value.","Document the char-vs-chunk distinction when tuning the ingress model."],"tags":["benchmark","env","config","pty","validation"],"backgroundTag":null,"analyzedSha":"1136503c6a231a16dce8f921f6fadb63d181e8db","analyzedAt":"2026-08-12T23:15:58.167Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}