{"record":{"id":"4287aee75e58abc1","repo":"paperclipai/paperclip","slug":"invalid-step-stepstr-in-cron-spec-name-fie","errorCode":null,"errorMessage":"Invalid step \"${stepStr}\" in cron ${spec.name} field","messagePattern":"Invalid step \"(.+?)\" in cron (.+?) field","errorType":"validation","errorClass":"Error","httpStatus":422,"severity":"error","filePath":"server/src/services/cron.ts","lineNumber":89,"sourceCode":"  const values = new Set<number>();\n\n  // Split on commas first — each part can be a value, range, or step\n  const parts = token.split(\",\");\n\n  for (const part of parts) {\n    const trimmed = part.trim();\n    if (trimmed === \"\") {\n      throw new Error(`Empty element in cron ${spec.name} field`);\n    }\n\n    // Check for step syntax: \"X/S\" where X is \"*\" or a range or a number\n    const slashIdx = trimmed.indexOf(\"/\");\n    if (slashIdx !== -1) {\n      const base = trimmed.slice(0, slashIdx);\n      const stepStr = trimmed.slice(slashIdx + 1);\n      const step = parseInt(stepStr, 10);\n      if (isNaN(step) || step <= 0) {\n        throw new Error(\n          `Invalid step \"${stepStr}\" in cron ${spec.name} field`,\n        );\n      }\n\n      let rangeStart = spec.min;\n      let rangeEnd = spec.max;\n\n      if (base === \"*\") {\n        // */S — every S from field min\n      } else if (base.includes(\"-\")) {\n        // N-M/S — range with step\n        const [a, b] = base.split(\"-\").map((s) => parseInt(s, 10));\n        if (isNaN(a!) || isNaN(b!)) {\n          throw new Error(\n            `Invalid range \"${base}\" in cron ${spec.name} field`,\n          );\n        }\n        rangeStart = a!;","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/paperclipai/paperclip/blob/120ae5428fa29bee300bcf806491cd4d965fbb7c/server/src/services/cron.ts#L71-L107","documentation":"Step guard in parseField: for a X/S step expression, the step part S failed parseInt or parsed to <= 0 (non-numeric, zero, or negative). Cron steps must be positive integers, so the field is rejected with the offending step text and field name.","triggerScenarios":"Thrown at server/src/services/cron.ts:89 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix the step value in the named cron field, e.g. use */5 with a numeric step."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"120ae5428fa29bee300bcf806491cd4d965fbb7c","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}