{"record":{"id":"0bfaec7fe6a4fd1e","repo":"jackwener/OpenCLI","slug":"no-forum-found-with-id-forum-confirm-the-for","errorCode":null,"errorMessage":"No forum found with id \"${forum}\". Confirm the forum id from openreview.net.","messagePattern":"No forum found with id \"(.+?)\"\\. Confirm the forum id from openreview\\.net\\.","errorType":"exception","errorClass":"EmptyResultError","httpStatus":null,"severity":"warning","filePath":"clis/openreview/reviews.js","lineNumber":108,"sourceCode":"    strategy: Strategy.PUBLIC,\n    browser: false,\n    args: [\n        { name: 'forum', positional: true, required: true, help: 'OpenReview forum id (same as paper id)' },\n        { name: 'max-length', type: 'int', default: 4000, help: 'Per-row text truncation (min 200)' },\n    ],\n    columns: ['type', 'author', 'rating', 'confidence', 'text'],\n    func: async (args) => {\n        const forum = requireForumId(args.forum, 'forum');\n        const rawMax = args['max-length'] ?? args.maxLength ?? 4000;\n        const maxLength = coerceInt(rawMax);\n        if (!Number.isInteger(maxLength) || maxLength < 200) {\n            throw new ArgumentError('openreview reviews max-length must be an integer >= 200');\n        }\n        const rootJson = await openreviewFetch(`/notes?id=${encodeURIComponent(forum)}`, `openreview paper ${forum}`);\n        const rootNotes = Array.isArray(rootJson?.notes) ? rootJson.notes : [];\n        const root = rootNotes[0];\n        if (!root) {\n            throw new EmptyResultError('openreview', `No forum found with id \"${forum}\". Confirm the forum id from openreview.net.`);\n        }\n        const repliesJson = await openreviewFetch(`/notes?forum=${encodeURIComponent(forum)}&details=replies&limit=1000`, `openreview reviews ${forum}`);\n        const replies = Array.isArray(repliesJson?.notes) ? repliesJson.notes.filter(note => note?.id !== forum) : [];\n        // Sort by cdate (creation time) so ordering is deterministic regardless of API order.\n        const sorted = [...replies].sort((a, b) => (a?.cdate ?? 0) - (b?.cdate ?? 0));\n        const ordered = [root, ...sorted];\n        return ordered.map((note) => {\n            const isRoot = note?.id === forum;\n            const type = classifyNote(note, isRoot);\n            const author = authorFromSignatures(note?.signatures);\n            const rating = readContent(note?.content, 'rating');\n            const confidence = readContent(note?.content, 'confidence');\n            const text = truncate(joinSections(note?.content), maxLength);\n            return {\n                type,\n                author,\n                rating: rating === undefined || rating === null ? '' : String(rating),\n                confidence: confidence === undefined || confidence === null ? '' : String(confidence),","sourceCodeStart":90,"sourceCodeEnd":126,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/openreview/reviews.js#L90-L126","documentation":"The reviews command first fetches the root note of the forum (/notes?id=<forum>) to anchor the reply thread. If that query returns no notes, the forum id does not correspond to any public note, and EmptyResultError is thrown before fetching replies.","triggerScenarios":"openreviewFetch('/notes?id=<forum>') succeeds but json.notes is empty — the given forum id matches no public OpenReview note.","commonSituations":"Mistyped or truncated forum id from a paper URL; paper withdrawn or restricted (not publicly visible); using a review/reply id instead of the forum (root paper) id; venue moved to OpenReview API v2 where ids differ.","solutions":["Re-copy the forum id from the openreview.net paper URL (?id= parameter)","Confirm the paper loads publicly in a browser on openreview.net","Use the openreview search command to find the paper and get its correct id","Try the review-thread id only if it is the root forum id — replies are not valid forum ids"],"exampleFix":"// before\nopenreview reviews --forum WRONGID\n// after (resolve id via search first)\nopenreview search \"paper title\"   # take the id column\nopenreview reviews --forum <id-from-search>","handlingStrategy":"try-catch","validationCode":"if (typeof forum !== 'string' || forum.trim().length < 10) {\n    throw new Error(`Forum id looks invalid: ${forum}`);\n}","typeGuard":"function isLikelyForumId(v) {\n    return typeof v === 'string' && v.trim().length >= 10 && /^[A-Za-z0-9_-]+$/.test(v.trim());\n}","tryCatchPattern":"try {\n    const reviews = await reviewsCommand({ forum });\n} catch (err) {\n    if (err instanceof EmptyResultError) {\n        console.error('Forum not found; verify the root paper id on openreview.net.');\n    } else {\n        throw err;\n    }\n}","preventionTips":["Use the root paper's forum id, not a review/reply id","Copy the id from the paper URL's ?id= parameter","Confirm public visibility in a browser first","Resolve via openreview search when the id is uncertain"],"tags":["empty-result","openreview","lookup","api-response"],"backgroundTag":"empty-result-set","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}