jackwener/OpenCLI · warning · Error

empty_result

empty_result

Error message

[taxonomy=empty_result] site=${site} command=detail detail page has no readable content: ${targetUrl}

What it means

If the extracted detail payload has neither a title nor detailText (both clean to empty), runProcurementDetail throws a taxonomy error with code 'empty_result' — the page loaded but contained no readable content matching the extractor. This is distinguished from extraction_drift: the page genuinely yielded nothing rather than an invalid payload object.

Source

Thrown at clis/jianyu/shared/procurement-detail.js:80

                    site,
                    command: 'detail',
                    detail: `detail extraction returned invalid payload: ${targetUrl}`,
                });
            }
            const row = payload;
            const title = cleanText(row.title);
            const detailText = cleanText(row.detailText);
            const publishTime = cleanText(row.publishTime);
            const authGateText = cleanText(`${title} ${detailText}`);
            if (DETAIL_AUTH_CHALLENGE_PATTERNS.some((pattern) => pattern.test(authGateText))) {
                throw taxonomyError('selector_drift', {
                    site,
                    command: 'detail',
                    detail: `detail page blocked by verification challenge: ${targetUrl}`,
                });
            }
            if (!title && !detailText) {
                throw taxonomyError('empty_result', {
                    site,
                    command: 'detail',
                    detail: `detail page has no readable content: ${targetUrl}`,
                });
            }
            return [
                toProcurementDetailRecord({
                    title: title || targetUrl,
                    url: targetUrl,
                    contextText: detailText,
                    publishTime,
                }, {
                    site,
                    query,
                }),
            ];
        }
        catch (error) {

View on GitHub (pinned to 49907e53dc)

Solutions

  1. Re-run the detail command after increasing the post-navigation wait for JS-rendered content
  2. Verify the URL in a normal browser; skip deleted/private/empty pages upstream
  3. Check for regional/paywall restrictions and use an appropriate session or region
  4. If the shell loads but content never appears, update selectors or extraction wait logic

Example fix

// before
const payload = await extractDetailPayload(page, url);
// after
await page.waitForSelector('.detail-content', { timeout: 10000 }); // ensure content rendered
const payload = await extractDetailPayload(page, url);
Defensive patterns

Strategy: fallback

Validate before calling

// ensure the content container exists and is non-empty before extraction
const text = await page.textContent('body');
if (!text || text.trim().length < 50) throw new Error('page body is empty for ' + url);

Type guard

function isEmptyResultError(e) {
  return e instanceof Error && /\[taxonomy=empty_result\]/.test(e.message);
}

Try / catch

try {
  return await runProcurementDetail(page, { site, url });
} catch (e) {
  if (isEmptyResultError(e)) {
    return null; // page is genuinely empty; record and skip
  }
  throw e;
}

Prevention

When it happens

Trigger: extractDetailPayload returns a valid object but title and detailText are both empty strings for the targetUrl, on any attempt; the final attempt's error propagates.

Common situations: Detail page content is JS-loaded after extraction ran; the article was deleted/made private (empty shell page); region-locked or paywalled content rendering empty body; malformed URL pointing to a near-empty page.

Related errors


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