{"record":{"id":"7a2d2ca0439b6c51","repo":"flowable/flowable-engine","slug":"increment-60","errorCode":null,"errorMessage":"Increment > 60 : ","messagePattern":"Increment > 60 : ","errorType":"exception","errorClass":"ParseException","httpStatus":null,"severity":"error","filePath":"modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/calendar/CronExpression.java","lineNumber":711,"sourceCode":"                c = s.charAt(i);\n                if (c >= '0' && c <= '9') {\n                    ValueSet vs = getValue(val, s, i);\n                    val = vs.value;\n                    i = vs.pos;\n                }\n                i = checkNext(i, s, val, type);\n                return i;\n            }\n        } else {\n            throw new ParseException(\"Unexpected character: \" + c, i);\n        }\n\n        return i;\n    }\n\n    private void checkIncrementRange(int incr, int type, int idxPos) throws ParseException {\n        if (incr > 59 && (type == SECOND || type == MINUTE)) {\n            throw new ParseException(\"Increment > 60 : \" + incr, idxPos);\n        } else if (incr > 23 && (type == HOUR)) {\n            throw new ParseException(\"Increment > 24 : \" + incr, idxPos);\n        } else if (incr > 31 && (type == DAY_OF_MONTH)) {\n            throw new ParseException(\"Increment > 31 : \" + incr, idxPos);\n        } else if (incr > 7 && (type == DAY_OF_WEEK)) {\n            throw new ParseException(\"Increment > 7 : \" + incr, idxPos);\n        } else if (incr > 12 && (type == MONTH)) {\n            throw new ParseException(\"Increment > 12 : \" + incr, idxPos);\n        }\n    }\n\n    protected int checkNext(int pos, String s, int val, int type) throws ParseException {\n\n        int end = -1;\n        int i = pos;\n\n        if (i >= s.length()) {\n            addToSet(val, end, -1, type);","sourceCodeStart":693,"sourceCodeEnd":729,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/calendar/CronExpression.java#L693-L729","documentation":"checkIncrementRange rejects an increment (the '/n' step value) larger than 59 for SECOND or MINUTE fields. The step value in a cron 'start/incr' expression must fit within the field's range; this is reported as 'Increment > 60' at the field's index position.","triggerScenarios":"Expressions like \"0 0/61 * * * ?\" or \"0/70 * * * * ?\" where the second/minute step exceeds 59.","commonSituations":"Hand-written cron steps computed from durations (e.g. stepping every 90 seconds) that cannot be expressed as a single cron step; auto-generated expressions using unbounded numeric inputs.","solutions":["Reduce the step to 59 or less (e.g. 0/30)","Use the field's max allowed step (*/59 for second/minute) and restructure the schedule otherwise","Compute an equivalent schedule with multiple trigger definitions or a different trigger type (e.g. TimeDuration or programmatic timer)"],"exampleFix":"// before\nnew CronExpression(\"0 0/61 * * * ?\");\n// after\nnew CronExpression(\"0 0/59 * * * ?\");","handlingStrategy":"validation","validationCode":"boolean isValidStep(String expr, int max) {\n    int i = expr.indexOf('/');\n    if (i < 0) return true;\n    try { return Integer.parseInt(expr.substring(i + 1).split(\"\\\\D\")[0]) <= max; }\n    catch (NumberFormatException e) { return false; }\n}\n// for SECOND/MINUTE fields: isValidStep(field, 59)","typeGuard":null,"tryCatchPattern":"try {\n    CronExpression cron = new CronExpression(expr);\n} catch (ParseException e) {\n    if (e.getMessage().startsWith(\"Increment >\")) {\n        throw new ConfigurationException(\"Cron step value exceeds field range: \" + expr, e);\n    }\n    throw e;\n}","preventionTips":["Clamp generated step values to each field's range (sec/min 59, hour 23, dom 31, dow 7, month 12)","Remember cron steps cannot express periods longer than the field's range","Unit-test auto-generated cron expressions","Prefer explicit schedules or trigger types for intervals exceeding field ranges"],"tags":["cron","increment","quartz","scheduling"],"backgroundTag":"value-out-of-range","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}