jackwener/OpenCLI · warning · EmptyResultError

No paper found with id "${id}". Confirm the forum/note id fr

Error message

No paper found with id "${id}". Confirm the forum/note id from openreview.net.

What it means

The openreview paper command looks up a single note by its forum/note id. When the OpenReview API returns no notes for /notes?id=<id>, the command throws EmptyResultError because no paper corresponds to that id. OpenReview returns 200 with an empty notes array for unknown ids rather than a 404, so this check is required.

Source

Thrown at clis/openreview/paper.js:26

cli({
    site: 'openreview',
    name: 'paper',
    access: 'read',
    description: 'Show full metadata for a single OpenReview paper',
    domain: 'openreview.net',
    strategy: Strategy.PUBLIC,
    browser: false,
    args: [
        { name: 'id', positional: true, required: true, help: 'OpenReview note id (e.g. "5sRnsubyAK")' },
    ],
    columns: ['id', 'title', 'authors', 'keywords', 'venue', 'venueid', 'primary_area', 'abstract', 'pdate', 'pdf', 'url'],
    func: async (args) => {
        const id = requireForumId(args.id);
        const path = `/notes?id=${encodeURIComponent(id)}`;
        const json = await openreviewFetch(path, `openreview paper ${id}`);
        const notes = Array.isArray(json?.notes) ? json.notes : [];
        if (!notes.length) {
            throw new EmptyResultError('openreview', `No paper found with id "${id}". Confirm the forum/note id from openreview.net.`);
        }
        const row = noteToRow(notes[0]);
        return [{
            id: row.id,
            title: row.title,
            authors: row.authors,
            keywords: row.keywords,
            venue: row.venue,
            venueid: row.venueid,
            primary_area: row.primary_area,
            abstract: row.abstract,
            pdate: row.pdate,
            pdf: row.pdf,
            url: row.url,
        }];
    },
});

View on GitHub (pinned to 49907e53dc)

Solutions

  1. Re-copy the full forum id from the openreview.net URL (the 26-char string after /forum?id=)
  2. Confirm the paper is publicly visible on openreview.net (not withdrawn/deleted)
  3. Check whether the id belongs to API v2 notes (some venues require the v2 endpoint)
  4. Fetch /notes?id=<id> directly in a browser/curl to inspect the raw response
  5. If you only have the paper title, use the openreview search command to resolve the correct id
Defensive patterns

Strategy: try-catch

Validate before calling

if (typeof id !== 'string' || !/^[A-Za-z0-9_-]{10,}$/.test(id.trim())) {
    throw new Error(`Expected an OpenReview note id (long opaque token), got: ${id}`);
}

Type guard

function isLikelyNoteId(v) {
    return typeof v === 'string' && v.trim().length >= 10 && /^[A-Za-z0-9_-]+$/.test(v.trim());
}

Try / catch

try {
    const paper = await paperCommand({ id });
} catch (err) {
    if (err instanceof EmptyResultError) {
        console.error('Unknown forum id; re-copy from openreview.net or resolve via search.');
    } else {
        throw err;
    }
}

Prevention

When it happens

Trigger: openreviewFetch('/notes?id=<id>') succeeds but json.notes is missing or empty — the id does not match any public note on openreview.net.

Common situations: Truncated or mistyped forum id (copied partially from a URL); id from OpenReview API v1 used against a v2-only note (or vice versa); note withdrawn/deleted; passing an email or title instead of the hex note id.

Understand the failure class

Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.

Related errors


AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29). Data as JSON: /api/errors/55c376df5a0e5e40. Report an issue: GitHub.