{"record":{"id":"eaab7d1e5bff29ee","repo":"affaan-m/ECC","slug":"invalid-flagname-value-eaab7d","errorCode":null,"errorMessage":"Invalid ${flagName}: ${value}","messagePattern":"Invalid (.+?): (.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"scripts/operator-readiness-dashboard.js","lineNumber":53,"sourceCode":"    '  --use-env-github-token     Keep GITHUB_TOKEN when invoking gh',\n    '  --generated-at <iso>       Override generatedAt for deterministic tests',\n    '  --exit-code                Return 2 when the objective is not ready',\n    '  --help, -h                 Show this help',\n  ].join('\\n'));\n}\n\nfunction readValue(args, index, flagName) {\n  const value = args[index + 1];\n  if (!value || value.startsWith('--')) {\n    throw new Error(`${flagName} requires a value`);\n  }\n  return value;\n}\n\nfunction parseIntegerFlag(value, flagName) {\n  const parsed = Number.parseInt(value, 10);\n  if (!Number.isFinite(parsed) || parsed < 0) {\n    throw new Error(`Invalid ${flagName}: ${value}`);\n  }\n  return parsed;\n}\n\nfunction normalizeRelativePrefix(value) {\n  const normalized = String(value || '')\n    .replace(/\\\\/g, '/')\n    .replace(/^\\.\\/+/, '')\n    .replace(/\\/+$/, '');\n  return normalized ? `${normalized}/` : '';\n}\n\nfunction parseArgs(argv) {\n  const args = argv.slice(2);\n  const parsed = {\n    allowUntracked: [],\n    exitCode: false,\n    format: 'markdown',","sourceCodeStart":35,"sourceCodeEnd":71,"githubUrl":"https://github.com/affaan-m/ECC/blob/8321021c54d670126ce3b2969d5deb880b4b0c2a/scripts/operator-readiness-dashboard.js#L35-L71","documentation":"parseIntegerFlag parses a CLI flag value as a non-negative base-10 integer (e.g. for limits, ports, or refresh intervals). If parseInt yields NaN/Infinity or a negative number, it throws this error naming the flag and the offending raw value. It guarantees downstream code only ever receives a valid non-negative integer.","triggerScenarios":"Passing `--port abc`, `--limit -5`, `--interval 3.5.3`, or an empty value to any integer flag wired through parseIntegerFlag in parseArgs.","commonSituations":"Typos like `--port 808o` (letter o); negative numbers where only counts make sense; environment variables interpolated as empty or containing units like `500ms`; decimal values where integers are required.","solutions":["Pass a plain non-negative integer, e.g. --port 8080 or --limit 20.","Strip units from the value (500ms -> 500) or fix the shell variable.","Check for sign/typo issues, e.g. -5 -> 5, 808o -> 8080.","In scripts, validate numerics before interpolation: `--limit \"${LIMIT:?must be set}\"` and ensure it's an integer."],"exampleFix":"// before\nnode scripts/operator-readiness-dashboard.js --port 808o\n// after\nnode scripts/operator-readiness-dashboard.js --port 8080","handlingStrategy":"validation","validationCode":"const n = Number.parseInt(raw, 10);\nif (!Number.isFinite(n) || n < 0 || String(n) !== raw.trim()) throw new Error(`--port expects a non-negative integer, got: ${raw}`);","typeGuard":"const isNonNegativeInt = (v) => typeof v === 'string' && /^\\d+$/.test(v.trim());","tryCatchPattern":"try {\n  runDashboard(argv);\n} catch (err) {\n  if (err.message.startsWith('Invalid ')) {\n    console.error('Pass a plain non-negative integer for integer flags (no units, no signs).');\n  } else throw err;\n}","preventionTips":["Pass integers without units (500 not 500ms) or signs.","Watch for lookalike characters (808o vs 8080).","Validate env-sourced numeric variables before interpolation.","Prefer building argv as typed arrays so values keep their intended types."],"tags":["cli","invalid-value","integer"],"backgroundTag":"invalid-flag-value","analyzedSha":"8321021c54d670126ce3b2969d5deb880b4b0c2a","analyzedAt":"2026-09-16T10:08:13.343Z","contentChangedAt":"2026-09-16T10:08:13.343Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}