jackwener/OpenCLI · error · CommandExecutionError
dongchedi specs ${seriesId}: No spec overview found for this
Error message
dongchedi specs ${seriesId}: No spec overview found for this series (layout may have changed). What it means
A CommandExecutionError thrown by the dongchedi specs command (clis/dongchedi/specs.js:108). After fetching the series page's `overviewData`, the parser produced only empty rows (nothing beyond the series_id row had a value). Since every real series has at least dimension/power specs, an all-empty sheet means the overview block was missing — i.e. the page layout drifted from what the parser expects — and the library refuses to emit a blank spec sheet.
Source
Thrown at clis/dongchedi/specs.js:108
site: 'dongchedi',
name: 'specs',
access: 'read',
aliases: ['config'],
description: '懂车帝车系配置概览(尺寸 / 动力 / 发动机 / 变速箱 / 四驱 / 悬挂 / 气囊)',
strategy: Strategy.PUBLIC,
browser: false,
args: [
{ name: 'series_id', required: true, positional: true, help: '车系 ID(来自 search 的 series_id,或 /auto/series/<id> URL)' },
],
columns: SPECS_COLUMNS,
func: async (args) => {
const seriesId = normalizeSeriesId(args.series_id);
const pp = await dcdFetchPageProps(`/auto/series/${seriesId}`, `specs ${seriesId}`);
const rows = parseSpecs(pp.overviewData, seriesId);
// Every series has at least dimensions/power; an all-empty sheet means
// the overview block was absent (layout drift) — don't emit a blank sheet.
if (rows.every((r) => r.field === 'series_id' || !r.value)) {
throw new CommandExecutionError(
`dongchedi specs ${seriesId}`,
'No spec overview found for this series (layout may have changed).',
);
}
return rows;
},
});
View on GitHub (pinned to 49907e53dc)
Solutions
- Check whether the series page loads normally in a browser and still contains an overview/spec section under `__NEXT_DATA__`.
- Inspect the live `props.pageProps.overviewData` shape and update parseSpecs to match the new layout.
- Try a different, well-known series_id to confirm the parser works generally (isolating layout drift vs. a bad series).
- Retry later — if the site is mid-rollout, some series may temporarily serve the new layout.
- Catch CommandExecutionError and surface a clear 'layout changed' message instead of writing an empty spec sheet.
Example fix
// before
const rows = parseSpecs(pp.overviewData, seriesId); // throws: layout drift
// after
if (pp.overviewData?.specList) {
const rows = parseSpecs(pp.overviewData, seriesId); // adapt parser to new key/schema
} Defensive patterns
Strategy: fallback
Type guard
function hasOverviewData(pp) {
return Boolean(pp && pp.overviewData && typeof pp.overviewData === 'object');
} Try / catch
try {
const rows = await dcdSpecs(seriesId);
} catch (err) {
if (err instanceof CommandExecutionError && /spec overview/.test(err.message)) {
reportLayoutDrift(seriesId); // alert + degrade to empty result
} else throw err;
} Prevention
- Pin a known-good series_id in a smoke test to detect layout drift early.
- Verify the series page renders specs in a browser before blaming the id.
- Handle 'layout changed' as a distinct failure class in monitoring.
- Update parseSpecs promptly when the site's pageProps schema changes.
When it happens
Trigger: Calling dongchedi specs with a series_id whose page's `overviewData` is missing, null, or restructured: Dongchedi changed the Next.js pageProps schema for the series page, the series page uses a new template variant, or the SSR payload for that series omits the overview block entirely.
Common situations: Scrapers breaking after a silent Dongchedi front-end redeploy; spec queries for obscure/discontinued/newly-added series whose pages use a different template; caching a stale parser against an updated site.
Related errors
- dongchedi ${contextHint} returned no __NEXT_DATA__. Dongched
- dongchedi ${contextHint} returned no __NEXT_DATA__
- ${label} returned an unexpected payload shape; expected an o
- ${label} returned an unexpected payload shape; expected an a
- ${label} did not include a stable numeric id.
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/46cf413c42f393fa.
Report an issue: GitHub.