{"record":{"id":"eb4b09827b545b55","repo":"jackwener/OpenCLI","slug":"limit-must-be-a-positive-integer-no-greater-than","errorCode":null,"errorMessage":"--limit must be a positive integer no greater than ${MAX_LIMIT}","messagePattern":"--limit must be a positive integer no greater than (.+?)","errorType":"validation","errorClass":"ArgumentError","httpStatus":null,"severity":"error","filePath":"clis/zhihu/answer-comments.js","lineNumber":45,"sourceCode":"    strategy: Strategy.COOKIE,\n    args: [\n        { name: 'id', required: true, positional: true, help: 'Answer ID, full Zhihu answer URL, or typed target (answer:<qid>:<aid>)' },\n        { name: 'limit', type: 'int', default: 20, help: 'Number of top-level comments (max 1000)' },\n        { name: 'replies-limit', type: 'int', default: 3, help: 'Number of replies to include per top-level comment (max 100)' },\n        { name: 'order', default: 'score', choices: ['score', 'latest'], help: 'Root comment order' },\n    ],\n    columns: ['rank', 'comment_rank', 'reply_rank', 'depth', 'id', 'parent_id', 'author', 'reply_to', 'likes', 'created_at', 'url', 'content'],\n    func: async (page, kwargs) => {\n        const target = parseAnswerTarget(kwargs.id);\n        if (!target) {\n            throw new ArgumentError(\n                'Answer ID must be a numeric id, a Zhihu answer URL, or answer:<qid>:<aid>',\n                'Example: opencli zhihu answer-comments 1937205528846655537',\n            );\n        }\n        const topLevelLimit = Number(kwargs.limit ?? 20);\n        if (!Number.isInteger(topLevelLimit) || topLevelLimit <= 0 || topLevelLimit > MAX_LIMIT) {\n            throw new ArgumentError(`--limit must be a positive integer no greater than ${MAX_LIMIT}`);\n        }\n        const repliesLimit = Number(kwargs['replies-limit'] ?? 3);\n        if (!Number.isInteger(repliesLimit) || repliesLimit < 0 || repliesLimit > MAX_REPLIES_LIMIT) {\n            throw new ArgumentError(`--replies-limit must be an integer between 0 and ${MAX_REPLIES_LIMIT}`);\n        }\n        const order = String(kwargs.order ?? 'score');\n        if (order !== 'score' && order !== 'latest') {\n            throw new ArgumentError('--order must be score or latest');\n        }\n\n        const { answerId } = target;\n        try {\n            await page.goto(`https://www.zhihu.com/answer/${answerId}`);\n        } catch (err) {\n            throw new CommandExecutionError(\n                `Failed to open Zhihu answer ${answerId}: ${err instanceof Error ? err.message : String(err)}`,\n                'Open the answer URL in Chrome and retry after the page is reachable.',\n            );","sourceCodeStart":27,"sourceCodeEnd":63,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/zhihu/answer-comments.js#L27-L63","documentation":"The --limit option controls how many root comments are fetched and must be a positive integer no greater than MAX_LIMIT. Non-integers, zero/negative values, or values above the cap throw this ArgumentError. It prevents issuing absurd or hostile pagination requests to Zhihu.","triggerScenarios":"--limit 0, --limit -5, --limit abc, or a huge number exceeding MAX_LIMIT.","commonSituations":"Script passing an unset variable so '--limit undefined' is parsed as NaN; users assuming limit means 'unlimited' and passing 0; copying a limit larger than the CLI cap from another tool.","solutions":["Pass a positive integer within the cap, e.g. --limit 50","Omit --limit entirely to use the default of 20","Validate/normalize the value in your wrapper script before invoking the CLI"],"exampleFix":"// before\nopencli zhihu answer-comments 123 --limit 0\n// after\nopencli zhihu answer-comments 123 --limit 20","handlingStrategy":"validation","validationCode":"const limit = Number(rawLimit ?? 20);\nif (!Number.isInteger(limit) || limit <= 0 || limit > MAX_LIMIT) throw new Error(`--limit must be 1..${MAX_LIMIT}`);","typeGuard":"const isValidLimit = (v) => Number.isInteger(v) && v > 0 && v <= MAX_LIMIT;","tryCatchPattern":"try { await answerComments({ limit }); }\ncatch (err) {\n  if (String(err.message).startsWith('--limit')) { await answerComments({ limit: 20 }); }\n  else throw err;\n}","preventionTips":["Clamp user-provided limits with Math.min(Math.max(1, n), MAX_LIMIT)","Never pass 0 or -1 expecting 'unlimited'","Coerce from strings with Number() and check Number.isInteger"],"tags":["zhihu","argument-validation","cli-input"],"backgroundTag":"invalid-limit-value","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}