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

  1. Swap the values so date <= dateTo
  2. Set only one of date or dateTo if a one-sided range is intended (both are optional)
  3. 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

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


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