{"abstract":"A 09:30 series with BYHOUR=9,17 fires on the hour.","category":"Calendar recurrence rules","checks":7,"contract":"FREQ=DAILY. Each day produces the cartesian product of BYHOUR and BYMINUTE in chronological order; a missing BYHOUR defaults to the dtstart hour and a missing BYMINUTE to the dtstart minute. Duplicates in either list are ignored. Times before dtstart are dropped. Return the first count ISO date-times.","evaluation_group":"w2-calendar-recurrence-rules-daily-byhour-byminute","failed_approach":"The partial repair `first.minute if not byhour else 0` only inherits the dtstart minute when BYHOUR is also missing.","family":"w2-calendar-recurrence-rules-daily-byhour-byminute-default-minute","id":"FA-77096","implementations":{"attempt":{"sha256":"d1322e5f1e7947d3e43f3c36d847195acd713b2361e4bc16c3cca13f9141206b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(dtstart, byhour, byminute, count):\n    first = dt.datetime.fromisoformat(dtstart)\n    hours = sorted(set(byhour)) if byhour else [first.hour]\n    minutes = sorted(set(byminute)) if byminute else [first.minute if not byhour else 0]\n    out = []\n    for k in range(400):\n        day = first.date() + dt.timedelta(days=k)\n        for h, mi in [(h, mi) for h in hours for mi in minutes]:\n            t = dt.datetime.combine(day, dt.time(h, mi))\n            if t < first:\n                continue\n            if len(out) >= count:\n                return out\n            out.append(t.isoformat(timespec='minutes'))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: default minute from dtstart',\n   ['2024-01-01T09:30', [9, 17], [], 4],\n   ['2024-01-01T09:30', '2024-01-01T17:30', '2024-01-02T09:30', '2024-01-02T17:30']),\n  ('only byminute',\n   ['2024-01-01T14:10', [], [0, 30], 4],\n   ['2024-01-01T14:30', '2024-01-02T14:00', '2024-01-02T14:30', '2024-01-03T14:00']),\n  ('unsorted duplicate hours',\n   ['2024-01-01T08:00', [17, 9, 17], [15], 4],\n   ['2024-01-01T09:15', '2024-01-01T17:15', '2024-01-02T09:15', '2024-01-02T17:15']),\n  ('product of two lists',\n   ['2024-01-01T00:00', [9, 13], [0, 45], 5],\n   ['2024-01-01T09:00', '2024-01-01T09:45', '2024-01-01T13:00', '2024-01-01T13:45', '2024-01-02T09:00']),\n  ('dtstart after some slots',\n   ['2024-01-02T12:00', [8, 12, 18], [0], 4],\n   ['2024-01-02T12:00', '2024-01-02T18:00', '2024-01-03T08:00', '2024-01-03T12:00']),\n  ('dtstart between minutes',\n   ['2024-01-02T12:20', [12], [0, 20, 40], 4],\n   ['2024-01-02T12:20', '2024-01-02T12:40', '2024-01-03T12:00', '2024-01-03T12:20']),\n  ('three by three',\n   ['2024-03-10T00:00', [6, 12, 18], [5, 10, 50], 7],\n   ['2024-03-10T06:05',\n    '2024-03-10T06:10',\n    '2024-03-10T06:50',\n    '2024-03-10T12:05',\n    '2024-03-10T12:10',\n    '2024-03-10T12:50',\n    '2024-03-10T18:05'])],\n [('unsorted duplicate hours',\n   ['2024-01-01T08:00', [17, 9, 17], [15], 4],\n   ['2024-01-01T09:15', '2024-01-01T17:15', '2024-01-02T09:15', '2024-01-02T17:15']),\n  ('product of two lists',\n   ['2024-01-01T00:00', [9, 13], [0, 45], 5],\n   ['2024-01-01T09:00', '2024-01-01T09:45', '2024-01-01T13:00', '2024-01-01T13:45', '2024-01-02T09:00']),\n  ('dtstart after some slots',\n   ['2024-01-02T12:00', [8, 12, 18], [0], 4],\n   ['2024-01-02T12:00', '2024-01-02T18:00', '2024-01-03T08:00', '2024-01-03T12:00']),\n  ('dtstart between minutes',\n   ['2024-01-02T12:20', [12], [0, 20, 40], 4],\n   ['2024-01-02T12:20', '2024-01-02T12:40', '2024-01-03T12:00', '2024-01-03T12:20']),\n  ('three by three',\n   ['2024-03-10T00:00', [6, 12, 18], [5, 10, 50], 7],\n   ['2024-03-10T06:05',\n    '2024-03-10T06:10',\n    '2024-03-10T06:50',\n    '2024-03-10T12:05',\n    '2024-03-10T12:10',\n    '2024-03-10T12:50',\n    '2024-03-10T18:05']),\n  ('count zero', ['2024-01-01T09:00', [9], [0], 0], []),\n  ('no lists', ['2024-02-28T23:45', [], [], 3], ['2024-02-28T23:45', '2024-02-29T23:45', '2024-03-01T23:45']),\n  ('regression: default minute from dtstart',\n   ['2024-01-01T09:30', [9, 17], [], 4],\n   ['2024-01-01T09:30', '2024-01-01T17:30', '2024-01-02T09:30', '2024-01-02T17:30'])],\n [('dtstart after some slots',\n   ['2024-01-02T12:00', [8, 12, 18], [0], 4],\n   ['2024-01-02T12:00', '2024-01-02T18:00', '2024-01-03T08:00', '2024-01-03T12:00']),\n  ('dtstart between minutes',\n   ['2024-01-02T12:20', [12], [0, 20, 40], 4],\n   ['2024-01-02T12:20', '2024-01-02T12:40', '2024-01-03T12:00', '2024-01-03T12:20']),\n  ('three by three',\n   ['2024-03-10T00:00', [6, 12, 18], [5, 10, 50], 7],\n   ['2024-03-10T06:05',\n    '2024-03-10T06:10',\n    '2024-03-10T06:50',\n    '2024-03-10T12:05',\n    '2024-03-10T12:10',\n    '2024-03-10T12:50',\n    '2024-03-10T18:05']),\n  ('count zero', ['2024-01-01T09:00', [9], [0], 0], []),\n  ('no lists', ['2024-02-28T23:45', [], [], 3], ['2024-02-28T23:45', '2024-02-29T23:45', '2024-03-01T23:45']),\n  ('unsorted minutes',\n   ['2024-02-28T07:00', [7, 8], [50, 10], 5],\n   ['2024-02-28T07:10', '2024-02-28T07:50', '2024-02-28T08:10', '2024-02-28T08:50', '2024-02-29T07:10']),\n  ('late hour only list',\n   ['2024-05-05T22:15', [23, 1], [], 4],\n   ['2024-05-05T23:15', '2024-05-06T01:15', '2024-05-06T23:15', '2024-05-07T01:15'])],\n [('three by three',\n   ['2024-03-10T00:00', [6, 12, 18], [5, 10, 50], 7],\n   ['2024-03-10T06:05',\n    '2024-03-10T06:10',\n    '2024-03-10T06:50',\n    '2024-03-10T12:05',\n    '2024-03-10T12:10',\n    '2024-03-10T12:50',\n    '2024-03-10T18:05']),\n  ('count zero', ['2024-01-01T09:00', [9], [0], 0], []),\n  ('no lists', ['2024-02-28T23:45', [], [], 3], ['2024-02-28T23:45', '2024-02-29T23:45', '2024-03-01T23:45']),\n  ('unsorted minutes',\n   ['2024-02-28T07:00', [7, 8], [50, 10], 5],\n   ['2024-02-28T07:10', '2024-02-28T07:50', '2024-02-28T08:10', '2024-02-28T08:50', '2024-02-29T07:10']),\n  ('late hour only list',\n   ['2024-05-05T22:15', [23, 1], [], 4],\n   ['2024-05-05T23:15', '2024-05-06T01:15', '2024-05-06T23:15', '2024-05-07T01:15']),\n  ('regression: default minute from dtstart',\n   ['2024-01-01T09:30', [9, 17], [], 4],\n   ['2024-01-01T09:30', '2024-01-01T17:30', '2024-01-02T09:30', '2024-01-02T17:30']),\n  ('only byminute',\n   ['2024-01-01T14:10', [], [0, 30], 4],\n   ['2024-01-01T14:30', '2024-01-02T14:00', '2024-01-02T14:30', '2024-01-03T14:00'])],\n [('no lists', ['2024-02-28T23:45', [], [], 3], ['2024-02-28T23:45', '2024-02-29T23:45', '2024-03-01T23:45']),\n  ('unsorted minutes',\n   ['2024-02-28T07:00', [7, 8], [50, 10], 5],\n   ['2024-02-28T07:10', '2024-02-28T07:50', '2024-02-28T08:10', '2024-02-28T08:50', '2024-02-29T07:10']),\n  ('late hour only list',\n   ['2024-05-05T22:15', [23, 1], [], 4],\n   ['2024-05-05T23:15', '2024-05-06T01:15', '2024-05-06T23:15', '2024-05-07T01:15']),\n  ('regression: default minute from dtstart',\n   ['2024-01-01T09:30', [9, 17], [], 4],\n   ['2024-01-01T09:30', '2024-01-01T17:30', '2024-01-02T09:30', '2024-01-02T17:30']),\n  ('only byminute',\n   ['2024-01-01T14:10', [], [0, 30], 4],\n   ['2024-01-01T14:30', '2024-01-02T14:00', '2024-01-02T14:30', '2024-01-03T14:00']),\n  ('unsorted duplicate hours',\n   ['2024-01-01T08:00', [17, 9, 17], [15], 4],\n   ['2024-01-01T09:15', '2024-01-01T17:15', '2024-01-02T09:15', '2024-01-02T17:15']),\n  ('product of two lists',\n   ['2024-01-01T00:00', [9, 13], [0, 45], 5],\n   ['2024-01-01T09:00', '2024-01-01T09:45', '2024-01-01T13:00', '2024-01-01T13:45', '2024-01-02T09:00'])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"8c89a6d3164f08240fe02ddbb5fdbd7ebfea3b593c603af7f23570eafc70476d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(dtstart, byhour, byminute, count):\n    first = dt.datetime.fromisoformat(dtstart)\n    hours = sorted(set(byhour)) if byhour else [first.hour]\n    minutes = sorted(set(byminute)) if byminute else [0]\n    out = []\n    for k in range(400):\n        day = first.date() + dt.timedelta(days=k)\n        for h, mi in [(h, mi) for h in hours for mi in minutes]:\n            t = dt.datetime.combine(day, dt.time(h, mi))\n            if t < first:\n                continue\n            if len(out) >= count:\n                return out\n            out.append(t.isoformat(timespec='minutes'))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: default minute from dtstart',\n   ['2024-01-01T09:30', [9, 17], [], 4],\n   ['2024-01-01T09:30', '2024-01-01T17:30', '2024-01-02T09:30', '2024-01-02T17:30']),\n  ('only byminute',\n   ['2024-01-01T14:10', [], [0, 30], 4],\n   ['2024-01-01T14:30', '2024-01-02T14:00', '2024-01-02T14:30', '2024-01-03T14:00']),\n  ('unsorted duplicate hours',\n   ['2024-01-01T08:00', [17, 9, 17], [15], 4],\n   ['2024-01-01T09:15', '2024-01-01T17:15', '2024-01-02T09:15', '2024-01-02T17:15']),\n  ('product of two lists',\n   ['2024-01-01T00:00', [9, 13], [0, 45], 5],\n   ['2024-01-01T09:00', '2024-01-01T09:45', '2024-01-01T13:00', '2024-01-01T13:45', '2024-01-02T09:00']),\n  ('dtstart after some slots',\n   ['2024-01-02T12:00', [8, 12, 18], [0], 4],\n   ['2024-01-02T12:00', '2024-01-02T18:00', '2024-01-03T08:00', '2024-01-03T12:00']),\n  ('dtstart between minutes',\n   ['2024-01-02T12:20', [12], [0, 20, 40], 4],\n   ['2024-01-02T12:20', '2024-01-02T12:40', '2024-01-03T12:00', '2024-01-03T12:20']),\n  ('three by three',\n   ['2024-03-10T00:00', [6, 12, 18], [5, 10, 50], 7],\n   ['2024-03-10T06:05',\n    '2024-03-10T06:10',\n    '2024-03-10T06:50',\n    '2024-03-10T12:05',\n    '2024-03-10T12:10',\n    '2024-03-10T12:50',\n    '2024-03-10T18:05'])],\n [('unsorted duplicate hours',\n   ['2024-01-01T08:00', [17, 9, 17], [15], 4],\n   ['2024-01-01T09:15', '2024-01-01T17:15', '2024-01-02T09:15', '2024-01-02T17:15']),\n  ('product of two lists',\n   ['2024-01-01T00:00', [9, 13], [0, 45], 5],\n   ['2024-01-01T09:00', '2024-01-01T09:45', '2024-01-01T13:00', '2024-01-01T13:45', '2024-01-02T09:00']),\n  ('dtstart after some slots',\n   ['2024-01-02T12:00', [8, 12, 18], [0], 4],\n   ['2024-01-02T12:00', '2024-01-02T18:00', '2024-01-03T08:00', '2024-01-03T12:00']),\n  ('dtstart between minutes',\n   ['2024-01-02T12:20', [12], [0, 20, 40], 4],\n   ['2024-01-02T12:20', '2024-01-02T12:40', '2024-01-03T12:00', '2024-01-03T12:20']),\n  ('three by three',\n   ['2024-03-10T00:00', [6, 12, 18], [5, 10, 50], 7],\n   ['2024-03-10T06:05',\n    '2024-03-10T06:10',\n    '2024-03-10T06:50',\n    '2024-03-10T12:05',\n    '2024-03-10T12:10',\n    '2024-03-10T12:50',\n    '2024-03-10T18:05']),\n  ('count zero', ['2024-01-01T09:00', [9], [0], 0], []),\n  ('no lists', ['2024-02-28T23:45', [], [], 3], ['2024-02-28T23:45', '2024-02-29T23:45', '2024-03-01T23:45']),\n  ('regression: default minute from dtstart',\n   ['2024-01-01T09:30', [9, 17], [], 4],\n   ['2024-01-01T09:30', '2024-01-01T17:30', '2024-01-02T09:30', '2024-01-02T17:30'])],\n [('dtstart after some slots',\n   ['2024-01-02T12:00', [8, 12, 18], [0], 4],\n   ['2024-01-02T12:00', '2024-01-02T18:00', '2024-01-03T08:00', '2024-01-03T12:00']),\n  ('dtstart between minutes',\n   ['2024-01-02T12:20', [12], [0, 20, 40], 4],\n   ['2024-01-02T12:20', '2024-01-02T12:40', '2024-01-03T12:00', '2024-01-03T12:20']),\n  ('three by three',\n   ['2024-03-10T00:00', [6, 12, 18], [5, 10, 50], 7],\n   ['2024-03-10T06:05',\n    '2024-03-10T06:10',\n    '2024-03-10T06:50',\n    '2024-03-10T12:05',\n    '2024-03-10T12:10',\n    '2024-03-10T12:50',\n    '2024-03-10T18:05']),\n  ('count zero', ['2024-01-01T09:00', [9], [0], 0], []),\n  ('no lists', ['2024-02-28T23:45', [], [], 3], ['2024-02-28T23:45', '2024-02-29T23:45', '2024-03-01T23:45']),\n  ('unsorted minutes',\n   ['2024-02-28T07:00', [7, 8], [50, 10], 5],\n   ['2024-02-28T07:10', '2024-02-28T07:50', '2024-02-28T08:10', '2024-02-28T08:50', '2024-02-29T07:10']),\n  ('late hour only list',\n   ['2024-05-05T22:15', [23, 1], [], 4],\n   ['2024-05-05T23:15', '2024-05-06T01:15', '2024-05-06T23:15', '2024-05-07T01:15'])],\n [('three by three',\n   ['2024-03-10T00:00', [6, 12, 18], [5, 10, 50], 7],\n   ['2024-03-10T06:05',\n    '2024-03-10T06:10',\n    '2024-03-10T06:50',\n    '2024-03-10T12:05',\n    '2024-03-10T12:10',\n    '2024-03-10T12:50',\n    '2024-03-10T18:05']),\n  ('count zero', ['2024-01-01T09:00', [9], [0], 0], []),\n  ('no lists', ['2024-02-28T23:45', [], [], 3], ['2024-02-28T23:45', '2024-02-29T23:45', '2024-03-01T23:45']),\n  ('unsorted minutes',\n   ['2024-02-28T07:00', [7, 8], [50, 10], 5],\n   ['2024-02-28T07:10', '2024-02-28T07:50', '2024-02-28T08:10', '2024-02-28T08:50', '2024-02-29T07:10']),\n  ('late hour only list',\n   ['2024-05-05T22:15', [23, 1], [], 4],\n   ['2024-05-05T23:15', '2024-05-06T01:15', '2024-05-06T23:15', '2024-05-07T01:15']),\n  ('regression: default minute from dtstart',\n   ['2024-01-01T09:30', [9, 17], [], 4],\n   ['2024-01-01T09:30', '2024-01-01T17:30', '2024-01-02T09:30', '2024-01-02T17:30']),\n  ('only byminute',\n   ['2024-01-01T14:10', [], [0, 30], 4],\n   ['2024-01-01T14:30', '2024-01-02T14:00', '2024-01-02T14:30', '2024-01-03T14:00'])],\n [('no lists', ['2024-02-28T23:45', [], [], 3], ['2024-02-28T23:45', '2024-02-29T23:45', '2024-03-01T23:45']),\n  ('unsorted minutes',\n   ['2024-02-28T07:00', [7, 8], [50, 10], 5],\n   ['2024-02-28T07:10', '2024-02-28T07:50', '2024-02-28T08:10', '2024-02-28T08:50', '2024-02-29T07:10']),\n  ('late hour only list',\n   ['2024-05-05T22:15', [23, 1], [], 4],\n   ['2024-05-05T23:15', '2024-05-06T01:15', '2024-05-06T23:15', '2024-05-07T01:15']),\n  ('regression: default minute from dtstart',\n   ['2024-01-01T09:30', [9, 17], [], 4],\n   ['2024-01-01T09:30', '2024-01-01T17:30', '2024-01-02T09:30', '2024-01-02T17:30']),\n  ('only byminute',\n   ['2024-01-01T14:10', [], [0, 30], 4],\n   ['2024-01-01T14:30', '2024-01-02T14:00', '2024-01-02T14:30', '2024-01-03T14:00']),\n  ('unsorted duplicate hours',\n   ['2024-01-01T08:00', [17, 9, 17], [15], 4],\n   ['2024-01-01T09:15', '2024-01-01T17:15', '2024-01-02T09:15', '2024-01-02T17:15']),\n  ('product of two lists',\n   ['2024-01-01T00:00', [9, 13], [0, 45], 5],\n   ['2024-01-01T09:00', '2024-01-01T09:45', '2024-01-01T13:00', '2024-01-01T13:45', '2024-01-02T09:00'])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"552f0115bf0ca085a219493cba88d84f860925f72a3dceae0daf25e5646f0136","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(dtstart, byhour, byminute, count):\n    first = dt.datetime.fromisoformat(dtstart)\n    hours = sorted(set(byhour)) if byhour else [first.hour]\n    minutes = sorted(set(byminute)) if byminute else [first.minute]\n    out = []\n    for k in range(400):\n        day = first.date() + dt.timedelta(days=k)\n        for h, mi in [(h, mi) for h in hours for mi in minutes]:\n            t = dt.datetime.combine(day, dt.time(h, mi))\n            if t < first:\n                continue\n            if len(out) >= count:\n                return out\n            out.append(t.isoformat(timespec='minutes'))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: default minute from dtstart',\n   ['2024-01-01T09:30', [9, 17], [], 4],\n   ['2024-01-01T09:30', '2024-01-01T17:30', '2024-01-02T09:30', '2024-01-02T17:30']),\n  ('only byminute',\n   ['2024-01-01T14:10', [], [0, 30], 4],\n   ['2024-01-01T14:30', '2024-01-02T14:00', '2024-01-02T14:30', '2024-01-03T14:00']),\n  ('unsorted duplicate hours',\n   ['2024-01-01T08:00', [17, 9, 17], [15], 4],\n   ['2024-01-01T09:15', '2024-01-01T17:15', '2024-01-02T09:15', '2024-01-02T17:15']),\n  ('product of two lists',\n   ['2024-01-01T00:00', [9, 13], [0, 45], 5],\n   ['2024-01-01T09:00', '2024-01-01T09:45', '2024-01-01T13:00', '2024-01-01T13:45', '2024-01-02T09:00']),\n  ('dtstart after some slots',\n   ['2024-01-02T12:00', [8, 12, 18], [0], 4],\n   ['2024-01-02T12:00', '2024-01-02T18:00', '2024-01-03T08:00', '2024-01-03T12:00']),\n  ('dtstart between minutes',\n   ['2024-01-02T12:20', [12], [0, 20, 40], 4],\n   ['2024-01-02T12:20', '2024-01-02T12:40', '2024-01-03T12:00', '2024-01-03T12:20']),\n  ('three by three',\n   ['2024-03-10T00:00', [6, 12, 18], [5, 10, 50], 7],\n   ['2024-03-10T06:05',\n    '2024-03-10T06:10',\n    '2024-03-10T06:50',\n    '2024-03-10T12:05',\n    '2024-03-10T12:10',\n    '2024-03-10T12:50',\n    '2024-03-10T18:05'])],\n [('unsorted duplicate hours',\n   ['2024-01-01T08:00', [17, 9, 17], [15], 4],\n   ['2024-01-01T09:15', '2024-01-01T17:15', '2024-01-02T09:15', '2024-01-02T17:15']),\n  ('product of two lists',\n   ['2024-01-01T00:00', [9, 13], [0, 45], 5],\n   ['2024-01-01T09:00', '2024-01-01T09:45', '2024-01-01T13:00', '2024-01-01T13:45', '2024-01-02T09:00']),\n  ('dtstart after some slots',\n   ['2024-01-02T12:00', [8, 12, 18], [0], 4],\n   ['2024-01-02T12:00', '2024-01-02T18:00', '2024-01-03T08:00', '2024-01-03T12:00']),\n  ('dtstart between minutes',\n   ['2024-01-02T12:20', [12], [0, 20, 40], 4],\n   ['2024-01-02T12:20', '2024-01-02T12:40', '2024-01-03T12:00', '2024-01-03T12:20']),\n  ('three by three',\n   ['2024-03-10T00:00', [6, 12, 18], [5, 10, 50], 7],\n   ['2024-03-10T06:05',\n    '2024-03-10T06:10',\n    '2024-03-10T06:50',\n    '2024-03-10T12:05',\n    '2024-03-10T12:10',\n    '2024-03-10T12:50',\n    '2024-03-10T18:05']),\n  ('count zero', ['2024-01-01T09:00', [9], [0], 0], []),\n  ('no lists', ['2024-02-28T23:45', [], [], 3], ['2024-02-28T23:45', '2024-02-29T23:45', '2024-03-01T23:45']),\n  ('regression: default minute from dtstart',\n   ['2024-01-01T09:30', [9, 17], [], 4],\n   ['2024-01-01T09:30', '2024-01-01T17:30', '2024-01-02T09:30', '2024-01-02T17:30'])],\n [('dtstart after some slots',\n   ['2024-01-02T12:00', [8, 12, 18], [0], 4],\n   ['2024-01-02T12:00', '2024-01-02T18:00', '2024-01-03T08:00', '2024-01-03T12:00']),\n  ('dtstart between minutes',\n   ['2024-01-02T12:20', [12], [0, 20, 40], 4],\n   ['2024-01-02T12:20', '2024-01-02T12:40', '2024-01-03T12:00', '2024-01-03T12:20']),\n  ('three by three',\n   ['2024-03-10T00:00', [6, 12, 18], [5, 10, 50], 7],\n   ['2024-03-10T06:05',\n    '2024-03-10T06:10',\n    '2024-03-10T06:50',\n    '2024-03-10T12:05',\n    '2024-03-10T12:10',\n    '2024-03-10T12:50',\n    '2024-03-10T18:05']),\n  ('count zero', ['2024-01-01T09:00', [9], [0], 0], []),\n  ('no lists', ['2024-02-28T23:45', [], [], 3], ['2024-02-28T23:45', '2024-02-29T23:45', '2024-03-01T23:45']),\n  ('unsorted minutes',\n   ['2024-02-28T07:00', [7, 8], [50, 10], 5],\n   ['2024-02-28T07:10', '2024-02-28T07:50', '2024-02-28T08:10', '2024-02-28T08:50', '2024-02-29T07:10']),\n  ('late hour only list',\n   ['2024-05-05T22:15', [23, 1], [], 4],\n   ['2024-05-05T23:15', '2024-05-06T01:15', '2024-05-06T23:15', '2024-05-07T01:15'])],\n [('three by three',\n   ['2024-03-10T00:00', [6, 12, 18], [5, 10, 50], 7],\n   ['2024-03-10T06:05',\n    '2024-03-10T06:10',\n    '2024-03-10T06:50',\n    '2024-03-10T12:05',\n    '2024-03-10T12:10',\n    '2024-03-10T12:50',\n    '2024-03-10T18:05']),\n  ('count zero', ['2024-01-01T09:00', [9], [0], 0], []),\n  ('no lists', ['2024-02-28T23:45', [], [], 3], ['2024-02-28T23:45', '2024-02-29T23:45', '2024-03-01T23:45']),\n  ('unsorted minutes',\n   ['2024-02-28T07:00', [7, 8], [50, 10], 5],\n   ['2024-02-28T07:10', '2024-02-28T07:50', '2024-02-28T08:10', '2024-02-28T08:50', '2024-02-29T07:10']),\n  ('late hour only list',\n   ['2024-05-05T22:15', [23, 1], [], 4],\n   ['2024-05-05T23:15', '2024-05-06T01:15', '2024-05-06T23:15', '2024-05-07T01:15']),\n  ('regression: default minute from dtstart',\n   ['2024-01-01T09:30', [9, 17], [], 4],\n   ['2024-01-01T09:30', '2024-01-01T17:30', '2024-01-02T09:30', '2024-01-02T17:30']),\n  ('only byminute',\n   ['2024-01-01T14:10', [], [0, 30], 4],\n   ['2024-01-01T14:30', '2024-01-02T14:00', '2024-01-02T14:30', '2024-01-03T14:00'])],\n [('no lists', ['2024-02-28T23:45', [], [], 3], ['2024-02-28T23:45', '2024-02-29T23:45', '2024-03-01T23:45']),\n  ('unsorted minutes',\n   ['2024-02-28T07:00', [7, 8], [50, 10], 5],\n   ['2024-02-28T07:10', '2024-02-28T07:50', '2024-02-28T08:10', '2024-02-28T08:50', '2024-02-29T07:10']),\n  ('late hour only list',\n   ['2024-05-05T22:15', [23, 1], [], 4],\n   ['2024-05-05T23:15', '2024-05-06T01:15', '2024-05-06T23:15', '2024-05-07T01:15']),\n  ('regression: default minute from dtstart',\n   ['2024-01-01T09:30', [9, 17], [], 4],\n   ['2024-01-01T09:30', '2024-01-01T17:30', '2024-01-02T09:30', '2024-01-02T17:30']),\n  ('only byminute',\n   ['2024-01-01T14:10', [], [0, 30], 4],\n   ['2024-01-01T14:30', '2024-01-02T14:00', '2024-01-02T14:30', '2024-01-03T14:00']),\n  ('unsorted duplicate hours',\n   ['2024-01-01T08:00', [17, 9, 17], [15], 4],\n   ['2024-01-01T09:15', '2024-01-01T17:15', '2024-01-02T09:15', '2024-01-02T17:15']),\n  ('product of two lists',\n   ['2024-01-01T00:00', [9, 13], [0, 45], 5],\n   ['2024-01-01T09:00', '2024-01-01T09:45', '2024-01-01T13:00', '2024-01-01T13:45', '2024-01-02T09:00'])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"Stipulated, bounded recurrence-expansion model evaluated offline on explicit fixtures; it is not a complete iCalendar implementation and makes no claim of standards conformance. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-calendar-recurrence-rules-daily-byhour-byminute-default-minute","generated_at":"2026-09-29T14:49:22.410920+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Recurring calendar series are expanded into concrete instances for display, reminders and conflict checks.","repair":"At the default minute decision use `first.minute`, leaving the other decision sites of the model unchanged.","root_cause":"A missing BYMINUTE defaults to minute 0 instead of the dtstart minute.","sha256":"be5e8c4186b565f2a6fe3a11ce14f310e3074405abaa68bd371dbb673227552c","title":"Daily BYHOUR/BYMINUTE time-of-day expansion: default minute · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.907,"exit_code":1,"observations":[{"actual":["2024-01-01T17:00","2024-01-02T09:00","2024-01-02T17:00","2024-01-03T09:00"],"check":"regression: default minute from dtstart","expected":["2024-01-01T09:30","2024-01-01T17:30","2024-01-02T09:30","2024-01-02T17:30"],"passed":false},{"actual":["2024-01-01T14:30","2024-01-02T14:00","2024-01-02T14:30","2024-01-03T14:00"],"check":"only byminute","expected":["2024-01-01T14:30","2024-01-02T14:00","2024-01-02T14:30","2024-01-03T14:00"],"passed":true},{"actual":["2024-01-01T09:15","2024-01-01T17:15","2024-01-02T09:15","2024-01-02T17:15"],"check":"unsorted duplicate hours","expected":["2024-01-01T09:15","2024-01-01T17:15","2024-01-02T09:15","2024-01-02T17:15"],"passed":true},{"actual":["2024-01-01T09:00","2024-01-01T09:45","2024-01-01T13:00","2024-01-01T13:45","2024-01-02T09:00"],"check":"product of two lists","expected":["2024-01-01T09:00","2024-01-01T09:45","2024-01-01T13:00","2024-01-01T13:45","2024-01-02T09:00"],"passed":true},{"actual":["2024-01-02T12:00","2024-01-02T18:00","2024-01-03T08:00","2024-01-03T12:00"],"check":"dtstart after some slots","expected":["2024-01-02T12:00","2024-01-02T18:00","2024-01-03T08:00","2024-01-03T12:00"],"passed":true},{"actual":["2024-01-02T12:20","2024-01-02T12:40","2024-01-03T12:00","2024-01-03T12:20"],"check":"dtstart between minutes","expected":["2024-01-02T12:20","2024-01-02T12:40","2024-01-03T12:00","2024-01-03T12:20"],"passed":true},{"actual":["2024-03-10T06:05","2024-03-10T06:10","2024-03-10T06:50","2024-03-10T12:05","2024-03-10T12:10","2024-03-10T12:50","2024-03-10T18:05"],"check":"three by three","expected":["2024-03-10T06:05","2024-03-10T06:10","2024-03-10T06:50","2024-03-10T12:05","2024-03-10T12:10","2024-03-10T12:50","2024-03-10T18:05"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: default minute from dtstart\", \"actual\": [\"2024-01-01T17:00\", \"2024-01-02T09:00\", \"2024-01-02T17:00\", \"2024-01-03T09:00\"], \"expected\": [\"2024-01-01T09:30\", \"2024-01-01T17:30\", \"2024-01-02T09:30\", \"2024-01-02T17:30\"], \"passed\": false}, {\"check\": \"only byminute\", \"actual\": [\"2024-01-01T14:30\", \"2024-01-02T14:00\", \"2024-01-02T14:30\", \"2024-01-03T14:00\"], \"expected\": [\"2024-01-01T14:30\", \"2024-01-02T14:00\", \"2024-01-02T14:30\", \"2024-01-03T14:00\"], \"passed\": true}, {\"check\": \"unsorted duplicate hours\", \"actual\": [\"2024-01-01T09:15\", \"2024-01-01T17:15\", \"2024-01-02T09:15\", \"2024-01-02T17:15\"], \"expected\": [\"2024-01-01T09:15\", \"2024-01-01T17:15\", \"2024-01-02T09:15\", \"2024-01-02T17:15\"], \"passed\": true}, {\"check\": \"product of two lists\", \"actual\": [\"2024-01-01T09:00\", \"2024-01-01T09:45\", \"2024-01-01T13:00\", \"2024-01-01T13:45\", \"2024-01-02T09:00\"], \"expected\": [\"2024-01-01T09:00\", \"2024-01-01T09:45\", \"2024-01-01T13:00\", \"2024-01-01T13:45\", \"2024-01-02T09:00\"], \"passed\": true}, {\"check\": \"dtstart after some slots\", \"actual\": [\"2024-01-02T12:00\", \"2024-01-02T18:00\", \"2024-01-03T08:00\", \"2024-01-03T12:00\"], \"expected\": [\"2024-01-02T12:00\", \"2024-01-02T18:00\", \"2024-01-03T08:00\", \"2024-01-03T12:00\"], \"passed\": true}, {\"check\": \"dtstart between minutes\", \"actual\": [\"2024-01-02T12:20\", \"2024-01-02T12:40\", \"2024-01-03T12:00\", \"2024-01-03T12:20\"], \"expected\": [\"2024-01-02T12:20\", \"2024-01-02T12:40\", \"2024-01-03T12:00\", \"2024-01-03T12:20\"], \"passed\": true}, {\"check\": \"three by three\", \"actual\": [\"2024-03-10T06:05\", \"2024-03-10T06:10\", \"2024-03-10T06:50\", \"2024-03-10T12:05\", \"2024-03-10T12:10\", \"2024-03-10T12:50\", \"2024-03-10T18:05\"], \"expected\": [\"2024-03-10T06:05\", \"2024-03-10T06:10\", \"2024-03-10T06:50\", \"2024-03-10T12:05\", \"2024-03-10T12:10\", \"2024-03-10T12:50\", \"2024-03-10T18:05\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.464,"exit_code":1,"observations":[{"actual":["2024-01-01T17:00","2024-01-02T09:00","2024-01-02T17:00","2024-01-03T09:00"],"check":"regression: default minute from dtstart","expected":["2024-01-01T09:30","2024-01-01T17:30","2024-01-02T09:30","2024-01-02T17:30"],"passed":false},{"actual":["2024-01-01T14:30","2024-01-02T14:00","2024-01-02T14:30","2024-01-03T14:00"],"check":"only byminute","expected":["2024-01-01T14:30","2024-01-02T14:00","2024-01-02T14:30","2024-01-03T14:00"],"passed":true},{"actual":["2024-01-01T09:15","2024-01-01T17:15","2024-01-02T09:15","2024-01-02T17:15"],"check":"unsorted duplicate hours","expected":["2024-01-01T09:15","2024-01-01T17:15","2024-01-02T09:15","2024-01-02T17:15"],"passed":true},{"actual":["2024-01-01T09:00","2024-01-01T09:45","2024-01-01T13:00","2024-01-01T13:45","2024-01-02T09:00"],"check":"product of two lists","expected":["2024-01-01T09:00","2024-01-01T09:45","2024-01-01T13:00","2024-01-01T13:45","2024-01-02T09:00"],"passed":true},{"actual":["2024-01-02T12:00","2024-01-02T18:00","2024-01-03T08:00","2024-01-03T12:00"],"check":"dtstart after some slots","expected":["2024-01-02T12:00","2024-01-02T18:00","2024-01-03T08:00","2024-01-03T12:00"],"passed":true},{"actual":["2024-01-02T12:20","2024-01-02T12:40","2024-01-03T12:00","2024-01-03T12:20"],"check":"dtstart between minutes","expected":["2024-01-02T12:20","2024-01-02T12:40","2024-01-03T12:00","2024-01-03T12:20"],"passed":true},{"actual":["2024-03-10T06:05","2024-03-10T06:10","2024-03-10T06:50","2024-03-10T12:05","2024-03-10T12:10","2024-03-10T12:50","2024-03-10T18:05"],"check":"three by three","expected":["2024-03-10T06:05","2024-03-10T06:10","2024-03-10T06:50","2024-03-10T12:05","2024-03-10T12:10","2024-03-10T12:50","2024-03-10T18:05"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: default minute from dtstart\", \"actual\": [\"2024-01-01T17:00\", \"2024-01-02T09:00\", \"2024-01-02T17:00\", \"2024-01-03T09:00\"], \"expected\": [\"2024-01-01T09:30\", \"2024-01-01T17:30\", \"2024-01-02T09:30\", \"2024-01-02T17:30\"], \"passed\": false}, {\"check\": \"only byminute\", \"actual\": [\"2024-01-01T14:30\", \"2024-01-02T14:00\", \"2024-01-02T14:30\", \"2024-01-03T14:00\"], \"expected\": [\"2024-01-01T14:30\", \"2024-01-02T14:00\", \"2024-01-02T14:30\", \"2024-01-03T14:00\"], \"passed\": true}, {\"check\": \"unsorted duplicate hours\", \"actual\": [\"2024-01-01T09:15\", \"2024-01-01T17:15\", \"2024-01-02T09:15\", \"2024-01-02T17:15\"], \"expected\": [\"2024-01-01T09:15\", \"2024-01-01T17:15\", \"2024-01-02T09:15\", \"2024-01-02T17:15\"], \"passed\": true}, {\"check\": \"product of two lists\", \"actual\": [\"2024-01-01T09:00\", \"2024-01-01T09:45\", \"2024-01-01T13:00\", \"2024-01-01T13:45\", \"2024-01-02T09:00\"], \"expected\": [\"2024-01-01T09:00\", \"2024-01-01T09:45\", \"2024-01-01T13:00\", \"2024-01-01T13:45\", \"2024-01-02T09:00\"], \"passed\": true}, {\"check\": \"dtstart after some slots\", \"actual\": [\"2024-01-02T12:00\", \"2024-01-02T18:00\", \"2024-01-03T08:00\", \"2024-01-03T12:00\"], \"expected\": [\"2024-01-02T12:00\", \"2024-01-02T18:00\", \"2024-01-03T08:00\", \"2024-01-03T12:00\"], \"passed\": true}, {\"check\": \"dtstart between minutes\", \"actual\": [\"2024-01-02T12:20\", \"2024-01-02T12:40\", \"2024-01-03T12:00\", \"2024-01-03T12:20\"], \"expected\": [\"2024-01-02T12:20\", \"2024-01-02T12:40\", \"2024-01-03T12:00\", \"2024-01-03T12:20\"], \"passed\": true}, {\"check\": \"three by three\", \"actual\": [\"2024-03-10T06:05\", \"2024-03-10T06:10\", \"2024-03-10T06:50\", \"2024-03-10T12:05\", \"2024-03-10T12:10\", \"2024-03-10T12:50\", \"2024-03-10T18:05\"], \"expected\": [\"2024-03-10T06:05\", \"2024-03-10T06:10\", \"2024-03-10T06:50\", \"2024-03-10T12:05\", \"2024-03-10T12:10\", \"2024-03-10T12:50\", \"2024-03-10T18:05\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.176,"exit_code":0,"observations":[{"actual":["2024-01-01T09:30","2024-01-01T17:30","2024-01-02T09:30","2024-01-02T17:30"],"check":"regression: default minute from dtstart","expected":["2024-01-01T09:30","2024-01-01T17:30","2024-01-02T09:30","2024-01-02T17:30"],"passed":true},{"actual":["2024-01-01T14:30","2024-01-02T14:00","2024-01-02T14:30","2024-01-03T14:00"],"check":"only byminute","expected":["2024-01-01T14:30","2024-01-02T14:00","2024-01-02T14:30","2024-01-03T14:00"],"passed":true},{"actual":["2024-01-01T09:15","2024-01-01T17:15","2024-01-02T09:15","2024-01-02T17:15"],"check":"unsorted duplicate hours","expected":["2024-01-01T09:15","2024-01-01T17:15","2024-01-02T09:15","2024-01-02T17:15"],"passed":true},{"actual":["2024-01-01T09:00","2024-01-01T09:45","2024-01-01T13:00","2024-01-01T13:45","2024-01-02T09:00"],"check":"product of two lists","expected":["2024-01-01T09:00","2024-01-01T09:45","2024-01-01T13:00","2024-01-01T13:45","2024-01-02T09:00"],"passed":true},{"actual":["2024-01-02T12:00","2024-01-02T18:00","2024-01-03T08:00","2024-01-03T12:00"],"check":"dtstart after some slots","expected":["2024-01-02T12:00","2024-01-02T18:00","2024-01-03T08:00","2024-01-03T12:00"],"passed":true},{"actual":["2024-01-02T12:20","2024-01-02T12:40","2024-01-03T12:00","2024-01-03T12:20"],"check":"dtstart between minutes","expected":["2024-01-02T12:20","2024-01-02T12:40","2024-01-03T12:00","2024-01-03T12:20"],"passed":true},{"actual":["2024-03-10T06:05","2024-03-10T06:10","2024-03-10T06:50","2024-03-10T12:05","2024-03-10T12:10","2024-03-10T12:50","2024-03-10T18:05"],"check":"three by three","expected":["2024-03-10T06:05","2024-03-10T06:10","2024-03-10T06:50","2024-03-10T12:05","2024-03-10T12:10","2024-03-10T12:50","2024-03-10T18:05"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: default minute from dtstart\", \"actual\": [\"2024-01-01T09:30\", \"2024-01-01T17:30\", \"2024-01-02T09:30\", \"2024-01-02T17:30\"], \"expected\": [\"2024-01-01T09:30\", \"2024-01-01T17:30\", \"2024-01-02T09:30\", \"2024-01-02T17:30\"], \"passed\": true}, {\"check\": \"only byminute\", \"actual\": [\"2024-01-01T14:30\", \"2024-01-02T14:00\", \"2024-01-02T14:30\", \"2024-01-03T14:00\"], \"expected\": [\"2024-01-01T14:30\", \"2024-01-02T14:00\", \"2024-01-02T14:30\", \"2024-01-03T14:00\"], \"passed\": true}, {\"check\": \"unsorted duplicate hours\", \"actual\": [\"2024-01-01T09:15\", \"2024-01-01T17:15\", \"2024-01-02T09:15\", \"2024-01-02T17:15\"], \"expected\": [\"2024-01-01T09:15\", \"2024-01-01T17:15\", \"2024-01-02T09:15\", \"2024-01-02T17:15\"], \"passed\": true}, {\"check\": \"product of two lists\", \"actual\": [\"2024-01-01T09:00\", \"2024-01-01T09:45\", \"2024-01-01T13:00\", \"2024-01-01T13:45\", \"2024-01-02T09:00\"], \"expected\": [\"2024-01-01T09:00\", \"2024-01-01T09:45\", \"2024-01-01T13:00\", \"2024-01-01T13:45\", \"2024-01-02T09:00\"], \"passed\": true}, {\"check\": \"dtstart after some slots\", \"actual\": [\"2024-01-02T12:00\", \"2024-01-02T18:00\", \"2024-01-03T08:00\", \"2024-01-03T12:00\"], \"expected\": [\"2024-01-02T12:00\", \"2024-01-02T18:00\", \"2024-01-03T08:00\", \"2024-01-03T12:00\"], \"passed\": true}, {\"check\": \"dtstart between minutes\", \"actual\": [\"2024-01-02T12:20\", \"2024-01-02T12:40\", \"2024-01-03T12:00\", \"2024-01-03T12:20\"], \"expected\": [\"2024-01-02T12:20\", \"2024-01-02T12:40\", \"2024-01-03T12:00\", \"2024-01-03T12:20\"], \"passed\": true}, {\"check\": \"three by three\", \"actual\": [\"2024-03-10T06:05\", \"2024-03-10T06:10\", \"2024-03-10T06:50\", \"2024-03-10T12:05\", \"2024-03-10T12:10\", \"2024-03-10T12:50\", \"2024-03-10T18:05\"], \"expected\": [\"2024-03-10T06:05\", \"2024-03-10T06:10\", \"2024-03-10T06:50\", \"2024-03-10T12:05\", \"2024-03-10T12:10\", \"2024-03-10T12:50\", \"2024-03-10T18:05\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}