{"record":{"id":"7cb922695f9503a1","repo":"jackwener/OpenCLI","slug":"rfc-number-value-is-not-a-valid-rfc-number","errorCode":null,"errorMessage":"rfc number \"${value}\" is not a valid RFC number","messagePattern":"rfc number \"(.+?)\" is not a valid RFC number","errorType":"validation","errorClass":"ArgumentError","httpStatus":null,"severity":"error","filePath":"clis/rfc/utils.js","lineNumber":23,"sourceCode":"// (RFCs, internet drafts, etc.). Docs: https://datatracker.ietf.org/api/\nimport { ArgumentError, CommandExecutionError, EmptyResultError } from '@jackwener/opencli/errors';\n\nexport const RFC_BASE = 'https://datatracker.ietf.org';\nconst UA = 'opencli-rfc-adapter (+https://github.com/jackwener/opencli)';\n\nexport function requireRfcNumber(value) {\n    const raw = value;\n    if (raw == null || String(raw).trim() === '') {\n        throw new ArgumentError(\n            'rfc number is required (e.g. 9000, 791, 2616)',\n            'Pass the integer RFC number; do not include the \"rfc\" prefix.',\n        );\n    }\n    // Accept \"9000\" or 9000 or \"rfc9000\" as a courtesy.\n    const s = String(raw).trim().toLowerCase().replace(/^rfc/, '');\n    const n = Number.parseInt(s, 10);\n    if (!Number.isInteger(n) || n <= 0 || String(n) !== s) {\n        throw new ArgumentError(\n            `rfc number \"${value}\" is not a valid RFC number`,\n            'Pass a positive integer (e.g. 9000, 791, 2616).',\n        );\n    }\n    if (n > 999999) {\n        throw new ArgumentError('rfc number must be <= 999999');\n    }\n    return n;\n}\n\nexport async function rfcFetch(url, label) {\n    let resp;\n    try {\n        resp = await fetch(url, { headers: { 'user-agent': UA, accept: 'application/json' } });\n    }\n    catch (err) {\n        throw new CommandExecutionError(\n            `${label} request failed: ${err?.message ?? err}`,","sourceCodeStart":5,"sourceCodeEnd":41,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/rfc/utils.js#L5-L41","documentation":"requireRfcNumber rejects values that are not positive integers after stripping an optional 'rfc' prefix. The canonical-string check (String(n) !== s) also rejects leading zeros, plus signs, and decimals, throwing ArgumentError with the offending raw value.","triggerScenarios":"Passing --number 'abc', --number '0', --number '-5', --number '007', --number '90.5', or any non-integer string to the rfc CLI.","commonSituations":"Users including stray text ('rfc 9000 draft'), zero-padded numbers copied from URLs ('rfc0261'), negative numbers from bad arithmetic, or locale-formatted numbers ('9,000').","solutions":["Pass a plain positive integer without leading zeros, e.g. --number 9000.","Remove leading zeros ('007' → 7).","Strip units, commas, or surrounding text from the value.","Validate with /^\\d+$/ before invoking if calling programmatically."],"exampleFix":"// before\nrfc rfc --number 007\n// after\nrfc rfc --number 7","handlingStrategy":"validation","validationCode":"function isValidRfcNumber(v) {\n  if (v == null) return false;\n  const s = String(v).trim().toLowerCase().replace(/^rfc/, '');\n  return /^\\d+$/.test(s) && Number(s) > 0 && String(Number(s)) === s;\n}\nif (!isValidRfcNumber(input)) input = String(Number(String(input).replace(/^rfc/i, '')));","typeGuard":"const isRfcNumber = (v) => typeof v === 'string' && /^\\d+$/.test(v.trim().toLowerCase().replace(/^rfc/, ''));","tryCatchPattern":"try {\n  const n = requireRfcNumber(input);\n} catch (err) {\n  if (err instanceof ArgumentError) {\n    console.error(`Bad RFC number: ${err.message}`);\n  } else throw err;\n}","preventionTips":["Strip leading zeros before passing values ('007' → 7).","Sanitize pasted input: remove text, commas, and whitespace.","Use a regex ^\\d+$ pre-check in scripts.","Store RFC numbers as plain integers, not formatted strings."],"tags":["cli","argument-validation","input-validation"],"backgroundTag":"invalid-argument-value","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T17:17:51.833Z"}