{"record":{"id":"02771529c289e6cf","repo":"jackwener/OpenCLI","slug":"not-found-027715","errorCode":"NOT_FOUND","errorMessage":"No recommended projects found on Gitee Explore","messagePattern":"No recommended projects found on Gitee Explore","errorType":"error_code","errorClass":"CliError","httpStatus":null,"severity":"warning","filePath":"clis/gitee/trending.js","lineNumber":564,"sourceCode":"        }\n\n        return projects;\n      })()\n    `);\n        if (!Array.isArray(rawProjects)) {\n            throw new CliError('FETCH_ERROR', 'Failed to parse Gitee Explore page', 'Gitee may have changed its page structure');\n        }\n        const projects = rawProjects\n            .map(toProject)\n            .filter((project) => project !== null)\n            .map((project) => mergeCapturedProject(project, projectsFromCapture.get(project.url)))\n            .map((project) => ({\n            ...project,\n            description: compactDescription(project.description),\n        }))\n            .slice(0, limit);\n        if (projects.length === 0) {\n            throw new CliError('NOT_FOUND', 'No recommended projects found on Gitee Explore', 'Gitee may be blocking this request or the page structure changed');\n        }\n        return projects;\n    },\n});\n","sourceCodeStart":546,"sourceCodeEnd":569,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/gitee/trending.js#L546-L569","documentation":"CliError with code NOT_FOUND thrown when the Explore page parsed successfully but zero recommended projects survive the toProject/merge/filter pipeline after slicing to limit. The hint suggests Gitee may be blocking the request or the page structure changed.","triggerScenarios":"rawProjects was an array but toProject returned null for every entry, or captured/merged data produced no rows with a valid url, leaving projects.length === 0 after .slice(0, limit).","commonSituations":"Gitee serving an empty 'recommended' feed for the region/anonymous sessions; anti-bot soft-block returning valid but empty markup; new project-card markup that toProject cannot map (all entries dropped as null); requesting a category/tab where no projects are listed.","solutions":["Open https://gitee.com/explore in a logged-in browser to confirm recommendations actually render","Check whether toProject is returning null for the new markup and update its selectors","Retry from a different network/with login cookies if Gitee is soft-blocking the session","Fall back to another source (e.g. trending API or search API) when the feed is empty"],"exampleFix":"// before\nopencli gitee trending --limit 10   # NOT_FOUND: no recommended projects\n// after\n# log in via `opencli gitee auth` first, then rerun with a populated feed\nopencli gitee trending --limit 10","handlingStrategy":"fallback","validationCode":"// Confirm the Explore feed actually renders projects\nconst cardCount = await page.evaluate(() => document.querySelectorAll('.project-card, .explore__project').length);\nif (cardCount === 0) {\n  console.error('Explore feed is empty or blocked — log in or change network');\n  process.exit(1);\n}","typeGuard":null,"tryCatchPattern":"try {\n  projects = await giteeTrending();\n} catch (e) {\n  if (e.code === 'NOT_FOUND') {\n    console.warn('No recommended projects; falling back to search-based trending');\n    projects = await giteeSearch('stars:>1000');\n  } else throw e;\n}","preventionTips":["Authenticate first (`opencli gitee auth`) so feeds render for logged-in users","Fall back to the search API when the Explore feed is empty","Rotate IPs / slow down if soft-blocks return empty content","Verify manually at gitee.com/explore when zero results recur"],"tags":["scraping","not-found","gitee","empty-results"],"backgroundTag":"no-search-results","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}