jackwener/OpenCLI · error · ArgumentError
huodongxing date must be <= dateTo
Error message
huodongxing date must be <= dateTo
What it means
requireDateRangeArgs validates the optional date/dateTo range for huodongxing event queries. Both values must be YYYYMMDD strings, and if both are present the start date must not be after the end date. This fail-fast ArgumentError prevents issuing a browser query that can never match.
Source
Thrown at clis/huodongxing/events.js:74
return null;
}
return dateOrdinal(year, month, day);
}
function requireYmdArg(value, label) {
const text = cleanText(value);
if (!text) return '';
if (parseYmd(text) == null) {
throw new ArgumentError(`huodongxing ${label} must be a valid YYYY-MM-DD date`);
}
return text;
}
function requireDateRangeArgs(args = {}) {
const date = requireYmdArg(args.date, 'date');
const dateTo = requireYmdArg(args.dateTo, 'dateTo');
if (date && dateTo && parseYmd(date) > parseYmd(dateTo)) {
throw new ArgumentError('huodongxing date must be <= dateTo');
}
return { date, dateTo };
}
function unwrapEvaluateResult(payload) {
if (payload && !Array.isArray(payload) && typeof payload === 'object' && 'session' in payload && 'data' in payload) {
return payload.data;
}
return payload;
}
function localDateOrdinal(date) {
return dateOrdinal(date.getFullYear(), date.getMonth() + 1, date.getDate());
}
function parseMonthDayToken(token, year) {
const match = cleanText(token).match(/(\d{1,2})\/(\d{1,2})/);
if (!match) return null;View on GitHub (pinned to 49907e53dc)
Solutions
- Swap the values so date <= dateTo
- Set only one of date or dateTo if a one-sided range is intended (both are optional)
- Verify both values are YYYYMMDD strings that parseYmd accepts
Example fix
// before
requireDateRangeArgs({ date: '20260110', dateTo: '20260101' });
// after
requireDateRangeArgs({ date: '20260101', dateTo: '20260110' }); Defensive patterns
Strategy: validation
Validate before calling
function isValidYmd(s){return typeof s==='string'&&/^\d{8}$/.test(s);}
if (args.date && args.dateTo && isValidYmd(args.date) && isValidYmd(args.dateTo) && args.date > args.dateTo) {
[args.date, args.dateTo] = [args.dateTo, args.date]; // or reject
} Type guard
const isYmdRange = r => (r.date == null || /^\d{8}$/.test(r.date)) && (r.dateTo == null || /^\d{8}$/.test(r.dateTo)) && (!(r.date && r.dateTo) || r.date <= r.dateTo); Try / catch
try { const { date, dateTo } = requireDateRangeArgs(args); } catch (e) { if (e.name === 'ArgumentError' && /date must be <= dateTo/.test(e.message)) { /* swap or prompt user for corrected range */ } else throw e; } Prevention
- Always pass the range as (earlier, later) — swap or sort dates before calling
- Only send date or dateTo when you actually mean a one-sided bound
- Keep dates as YYYYMMDD strings; avoid locale-formatted dates
When it happens
Trigger: Calling filterRowsByDateRange (or a command using dateRange) with args where parseYmd(args.date) > parseYmd(args.dateTo), e.g. date='20260110', dateTo='20260101'.
Common situations: Swapping start/end fields when building a tool call; copying a single-day range and only editing one side; timezone/locale confusion producing a later start date than end date.
Related errors
- weibo user-posts start must be <= end
- <train-no> "${trainNo}" does not look like a 12306 internal
- --from station must not be empty
- --to station must not be empty
- --seat-types must contain only 12306 seat letters/digits (A-
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/f1af7edd1929f491.
Report an issue: GitHub.