{"record":{"id":"36a6d58ba3229139","repo":"puppetlabs/puppet","slug":"invalid-minute-n","errorCode":null,"errorMessage":"Invalid minute '%{n}'","messagePattern":"Invalid minute '%(.+?)'","errorType":"validation","errorClass":"ArgumentError","httpStatus":null,"severity":"error","filePath":"lib/puppet/type/schedule.rb","lineNumber":135,"sourceCode":"          value.split(/\\s*-\\s*/).each { |val|\n            # Add the values as an array.\n            range << val.split(\":\").collect(&:to_i)\n          }\n\n          self.fail _(\"Invalid range %{value}\") % { value: value } if range.length != 2\n\n          # Fill out 0s for unspecified minutes and seconds\n          range.each do |time_array|\n            (3 - time_array.length).times { |_| time_array << 0 }\n          end\n\n          # Make sure the hours are valid\n          [range[0][0], range[1][0]].each do |n|\n            raise ArgumentError, _(\"Invalid hour '%{n}'\") % { n: n } if n < 0 or n > 23\n          end\n\n          [range[0][1], range[1][1]].each do |n|\n            raise ArgumentError, _(\"Invalid minute '%{n}'\") % { n: n } if n and (n < 0 or n > 59)\n          end\n          ret << range\n        }\n\n        # Now our array of arrays\n        ret\n      end\n\n      def weekday_match?(day)\n        if @resource[:weekday]\n          @resource[:weekday].has_key?(day)\n        else\n          true\n        end\n      end\n\n      def match?(previous, now)\n        # The lowest-level array is of the hour, minute, second triad","sourceCodeStart":117,"sourceCodeEnd":153,"githubUrl":"https://github.com/puppetlabs/puppet/blob/e227c27540975c25aa22d533a52424a9d2fc886a/lib/puppet/type/schedule.rb#L117-L153","documentation":"The schedule `range` parser validates each endpoint's minute field: if present it must be 0–59 or ArgumentError \"Invalid minute\" is raised (lib/puppet/type/schedule.rb:135). Minutes default to 0 when omitted (e.g. '2-5' has no minutes), so the error requires an explicit out-of-range minute.","triggerScenarios":"`schedule { 'm': range => '9:60-10:30' }`; `range => '17:99-18'`; template arithmetic that carries 60 minutes instead of rolling the hour.","commonSituations":"Time math bugs where minute overflow (60+) wasn't normalized; hand-edited windows; '17:75' typos.","solutions":["Fix the minute value to 0–59","Normalize generated times (roll overflow minutes into hours) in the code producing the range","Omit minutes entirely if you only need whole hours ('2-5')"],"exampleFix":"# before\nschedule { 'reports':\n  range => '9:60-10:30',\n}\n\n# after\nschedule { 'reports':\n  range => '10:00-10:30',\n}","handlingStrategy":"validation","validationCode":"[$start_min, $end_min].all |Integer $m| { $m >= 0 and $m <= 59 } or\nfail('schedule range minutes must be 0-59')","typeGuard":"def valid_minutes?(start_m, end_m)\n  [start_m, end_m].all? { |m| m.is_a?(Integer) && m.between?(0, 59) }\nend","tryCatchPattern":"begin\n  Puppet::Type.type(:schedule).new(name: 'm', range: '9:60-10:30')\nrescue ArgumentError => e\n  raise unless e.message.include?(\"Invalid minute\")\n  # normalize minutes and rebuild\nend","preventionTips":["Normalize hour/minute overflow when generating ranges","Lint schedule values in profile unit tests","Prefer full HH:MM endpoints over hand-truncated ones"],"tags":["puppet","schedule","time-range","validation"],"backgroundTag":"invalid-time-range","analyzedSha":"e227c27540975c25aa22d533a52424a9d2fc886a","analyzedAt":"2026-08-21T20:49:46.650Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}