{"record":{"id":"d7dd73be90e72970","repo":"sickn33/agentic-awesome-skills","slug":"invalid-range-t-in-fielddef-name","errorCode":null,"errorMessage":"Invalid range \"${t}\" in ${fieldDef.name}","messagePattern":"Invalid range \"(.+?)\" in (.+?)","errorType":"validation","errorClass":"CronError","httpStatus":null,"severity":"error","filePath":"skills/cron-doctor/scripts/cron-engine.js","lineNumber":137,"sourceCode":"    let lo, hi;\n    if (base === '*' || base === '') {\n      lo = fieldDef.min; hi = fieldDef.max;\n    } else if (base.includes('-')) {\n      const [a, b] = base.split('-');\n      lo = parseSingleNum(a.trim(), fieldDef, fieldIndex);\n      hi = parseSingleNum(b.trim(), fieldDef, fieldIndex);\n    } else {\n      lo = parseSingleNum(base.trim(), fieldDef, fieldIndex);\n      hi = fieldDef.max;\n    }\n    if (lo > hi) [lo, hi] = [hi, lo];\n    for (let v = lo; v <= hi; v += step) addOne(values, v, fieldDef, fieldIndex);\n    return;\n  }\n\n  if (t.includes('-')) {\n    const parts = t.split('-');\n    if (parts.length !== 2) throw new CronError(`Invalid range \"${t}\" in ${fieldDef.name}`, fieldIndex);\n    const a = parseSingleNum(parts[0].trim(), fieldDef, fieldIndex);\n    const b = parseSingleNum(parts[1].trim(), fieldDef, fieldIndex);\n    addRange(values, a, b, fieldDef);\n    return;\n  }\n\n  const v = parseSingleNum(t, fieldDef, fieldIndex);\n  addOne(values, v, fieldDef, fieldIndex);\n}\n\nfunction addOne(values, v, fieldDef, fieldIndex) {\n  if (fieldDef.key === 'dow' && v === 7) { values.add(0); return; }\n  if (v < fieldDef.min || v > fieldDef.max) {\n    throw new CronError(`Value ${v} out of range for ${fieldDef.name} (${fieldDef.min}-${fieldDef.max})`, fieldIndex);\n  }\n  values.add(v);\n}\n","sourceCodeStart":119,"sourceCodeEnd":155,"githubUrl":"https://github.com/sickn33/agentic-awesome-skills/blob/58d857988fcfac6986206bca2b2fe223aa437e4b/skills/cron-doctor/scripts/cron-engine.js#L119-L155","documentation":"cron-engine's parseItem throws this when a field token contains a '-' but splitting on '-' does not yield exactly two parts, i.e. the token is malformed as a range. The library only supports simple lo-hi ranges; extra or stray hyphens are rejected before numeric parsing.","triggerScenarios":"A cron field token like '1-2-3' or a leading/trailing hyphen such as '-5' or '5-' passed to parseCron/parseField; t.split('-').length !== 2.","commonSituations":"Typos when hand-editing schedules, expecting day-of-week name ranges like 'MON-FRI' in this numeric-only parser, or pasting expressions from tools with different range syntax.","solutions":["Fix the token to a single lo-hi range, e.g. '1-3' instead of '1-2-3'","Express multiple ranges as comma-separated items: '1-3,5-7'","Check for stray hyphens or empty sides like '5-' or '-5' in the field named in the message"],"exampleFix":"// before\n'0 0 1-2-3 * *'\n\n// after\n'0 0 1-3 * *'","handlingStrategy":"validation","validationCode":"const RANGE_RE = /^\\d+\\s*-\\s*\\d+$/;\nconst ok = field.split(',').every(t => !t.includes('-') || RANGE_RE.test(t.trim()));\nif (!ok) throw new Error(`Bad range in field: ${field}`);\nconst parsed = parseCron(expr);","typeGuard":null,"tryCatchPattern":"try { parseCron(expr); } catch (e) { if (e instanceof CronError && /Invalid range/.test(e.message)) showFieldError(e.fieldIndex, e.message); else throw e; }","preventionTips":["Pre-validate each comma-separated token with /^\\d+(-\\d+)?(\\/\\d+)?$/","Run schedule strings through the engine's validate()/describe() in CI","Use commas for multiple ranges; never chain hyphens"],"tags":["cron","parsing","validation"],"backgroundTag":"cron-expression-invalid","analyzedSha":"58d857988fcfac6986206bca2b2fe223aa437e4b","analyzedAt":"2026-08-26T11:55:59.350Z","schemaVersion":2},"datasetVersion":"2026-08-26T14:46:13.012Z"}