jackwener/OpenCLI · warning · CliError
NOT_FOUND
NOT_FOUND
Error message
No recommended projects found on Gitee Explore
What it means
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.
Source
Thrown at clis/gitee/trending.js:564
}
return projects;
})()
`);
if (!Array.isArray(rawProjects)) {
throw new CliError('FETCH_ERROR', 'Failed to parse Gitee Explore page', 'Gitee may have changed its page structure');
}
const projects = rawProjects
.map(toProject)
.filter((project) => project !== null)
.map((project) => mergeCapturedProject(project, projectsFromCapture.get(project.url)))
.map((project) => ({
...project,
description: compactDescription(project.description),
}))
.slice(0, limit);
if (projects.length === 0) {
throw new CliError('NOT_FOUND', 'No recommended projects found on Gitee Explore', 'Gitee may be blocking this request or the page structure changed');
}
return projects;
},
});
View on GitHub (pinned to 49907e53dc)
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
Example fix
// before opencli gitee trending --limit 10 # NOT_FOUND: no recommended projects // after # log in via `opencli gitee auth` first, then rerun with a populated feed opencli gitee trending --limit 10
Defensive patterns
Strategy: fallback
Validate before calling
// Confirm the Explore feed actually renders projects
const cardCount = await page.evaluate(() => document.querySelectorAll('.project-card, .explore__project').length);
if (cardCount === 0) {
console.error('Explore feed is empty or blocked — log in or change network');
process.exit(1);
} Try / catch
try {
projects = await giteeTrending();
} catch (e) {
if (e.code === 'NOT_FOUND') {
console.warn('No recommended projects; falling back to search-based trending');
projects = await giteeSearch('stars:>1000');
} else throw e;
} Prevention
- 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
When it happens
Trigger: 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).
Common situations: 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.
Understand the failure class
Background: NOT_FOUND error code: why tRPC, Harbor, Nacos and other libraries return 404 "not found" errors for resources that may still exist — this error's family across 11 libraries.
Related errors
- NOT_FOUND
- NOT_FOUND
- No series found for '${brand}'. Check the brand name spellin
- This series has no koubei rating yet.
- ${command} returned no results
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/02771529c289e6cf.
Report an issue: GitHub.