{"abstract":"BACKWARD from the 31st lands on the 28th of 30-day months.","category":"Calendar recurrence rules","checks":8,"contract":"FREQ=MONTHLY on a fixed monthday from the dtstart month. When the day does not exist in a month, skip decides: OMIT (also the default when skip is None) drops the month, BACKWARD uses the last day of the month, FORWARD uses the first day of the following month. February has 29 days in leap years. Instances before dtstart are dropped. Return the first count ISO dates.","evaluation_group":"w2-calendar-recurrence-rules-monthly-skip-policy","failed_approach":"The partial repair `dt.date(y, m, 28 if m == 2 else 30)` hard-codes the 30th and February 28, ignoring leap-year February.","family":"w2-calendar-recurrence-rules-monthly-skip-policy-backward-target","id":"FA-77146","implementations":{"attempt":{"sha256":"5316b55ec041ed08bdc015d57c60f7849870b326c8343450296ecd835ce85b56","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(dtstart, monthday, skip, count):\n    start = dt.date.fromisoformat(dtstart)\n    out = []\n    for k in range(240):\n        mi = start.month - 1 + k\n        y, m = start.year + mi // 12, mi % 12 + 1\n        dim = calendar.monthrange(y, m)[1]\n        if monthday <= dim:\n            d = dt.date(y, m, monthday)\n        elif skip in (None, 'OMIT'):\n            continue\n        elif skip == 'BACKWARD':\n            d = dt.date(y, m, 28 if m == 2 else 30)\n        else:\n            d = dt.date(y, m, dim) + dt.timedelta(days=1)\n        if d < start:\n            continue\n        out.append(d.isoformat())\n        if len(out) >= count:\n            break\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: 31st forward in common year',\n   ['2023-01-31', 31, 'FORWARD', 4],\n   ['2023-01-31', '2023-03-01', '2023-03-31', '2023-05-01']),\n  ('default omits', ['2023-01-30', 30, None, 3], ['2023-01-30', '2023-03-30', '2023-04-30']),\n  ('explicit omit', ['2023-01-31', 31, 'OMIT', 3], ['2023-01-31', '2023-03-31', '2023-05-31']),\n  ('backward from 31st',\n   ['2024-03-31', 31, 'BACKWARD', 4],\n   ['2024-03-31', '2024-04-30', '2024-05-31', '2024-06-30']),\n  ('leap february 29', ['2024-01-29', 29, 'BACKWARD', 3], ['2024-01-29', '2024-02-29', '2024-03-29']),\n  ('common february 29 backward',\n   ['2023-01-29', 29, 'BACKWARD', 3],\n   ['2023-01-29', '2023-02-28', '2023-03-29']),\n  ('forward 30th in february leap',\n   ['2024-01-30', 30, 'FORWARD', 3],\n   ['2024-01-30', '2024-03-01', '2024-03-30']),\n  ('backward 31st leap february',\n   ['2024-01-31', 31, 'BACKWARD', 3],\n   ['2024-01-31', '2024-02-29', '2024-03-31'])],\n [('explicit omit', ['2023-01-31', 31, 'OMIT', 3], ['2023-01-31', '2023-03-31', '2023-05-31']),\n  ('backward from 31st',\n   ['2024-03-31', 31, 'BACKWARD', 4],\n   ['2024-03-31', '2024-04-30', '2024-05-31', '2024-06-30']),\n  ('leap february 29', ['2024-01-29', 29, 'BACKWARD', 3], ['2024-01-29', '2024-02-29', '2024-03-29']),\n  ('common february 29 backward',\n   ['2023-01-29', 29, 'BACKWARD', 3],\n   ['2023-01-29', '2023-02-28', '2023-03-29']),\n  ('forward 30th in february leap',\n   ['2024-01-30', 30, 'FORWARD', 3],\n   ['2024-01-30', '2024-03-01', '2024-03-30']),\n  ('backward 30th in february',\n   ['2023-01-30', 30, 'BACKWARD', 3],\n   ['2023-01-30', '2023-02-28', '2023-03-30']),\n  ('forward 29th in common february',\n   ['2023-01-29', 29, 'FORWARD', 3],\n   ['2023-01-29', '2023-03-01', '2023-03-29']),\n  ('backward 31st leap february',\n   ['2024-01-31', 31, 'BACKWARD', 3],\n   ['2024-01-31', '2024-02-29', '2024-03-31'])],\n [('leap february 29', ['2024-01-29', 29, 'BACKWARD', 3], ['2024-01-29', '2024-02-29', '2024-03-29']),\n  ('common february 29 backward',\n   ['2023-01-29', 29, 'BACKWARD', 3],\n   ['2023-01-29', '2023-02-28', '2023-03-29']),\n  ('forward 30th in february leap',\n   ['2024-01-30', 30, 'FORWARD', 3],\n   ['2024-01-30', '2024-03-01', '2024-03-30']),\n  ('backward 30th in february',\n   ['2023-01-30', 30, 'BACKWARD', 3],\n   ['2023-01-30', '2023-02-28', '2023-03-30']),\n  ('forward 29th in common february',\n   ['2023-01-29', 29, 'FORWARD', 3],\n   ['2023-01-29', '2023-03-01', '2023-03-29']),\n  ('leap day omit', ['2024-01-29', 29, None, 3], ['2024-01-29', '2024-02-29', '2024-03-29']),\n  ('forward from april 31', ['2024-04-15', 31, 'FORWARD', 3], ['2024-05-01', '2024-05-31', '2024-07-01']),\n  ('backward 31st leap february',\n   ['2024-01-31', 31, 'BACKWARD', 3],\n   ['2024-01-31', '2024-02-29', '2024-03-31'])],\n [('forward 30th in february leap',\n   ['2024-01-30', 30, 'FORWARD', 3],\n   ['2024-01-30', '2024-03-01', '2024-03-30']),\n  ('backward 30th in february',\n   ['2023-01-30', 30, 'BACKWARD', 3],\n   ['2023-01-30', '2023-02-28', '2023-03-30']),\n  ('forward 29th in common february',\n   ['2023-01-29', 29, 'FORWARD', 3],\n   ['2023-01-29', '2023-03-01', '2023-03-29']),\n  ('leap day omit', ['2024-01-29', 29, None, 3], ['2024-01-29', '2024-02-29', '2024-03-29']),\n  ('forward from april 31', ['2024-04-15', 31, 'FORWARD', 3], ['2024-05-01', '2024-05-31', '2024-07-01']),\n  ('backward 31st leap february',\n   ['2024-01-31', 31, 'BACKWARD', 3],\n   ['2024-01-31', '2024-02-29', '2024-03-31']),\n  ('century leap day', ['2000-01-29', 29, 'OMIT', 3], ['2000-01-29', '2000-02-29', '2000-03-29'])],\n [('forward 29th in common february',\n   ['2023-01-29', 29, 'FORWARD', 3],\n   ['2023-01-29', '2023-03-01', '2023-03-29']),\n  ('leap day omit', ['2024-01-29', 29, None, 3], ['2024-01-29', '2024-02-29', '2024-03-29']),\n  ('forward from april 31', ['2024-04-15', 31, 'FORWARD', 3], ['2024-05-01', '2024-05-31', '2024-07-01']),\n  ('backward 31st leap february',\n   ['2024-01-31', 31, 'BACKWARD', 3],\n   ['2024-01-31', '2024-02-29', '2024-03-31']),\n  ('century leap day', ['2000-01-29', 29, 'OMIT', 3], ['2000-01-29', '2000-02-29', '2000-03-29']),\n  ('century common february', ['2100-01-29', 29, 'OMIT', 3], ['2100-01-29', '2100-03-29', '2100-04-29']),\n  ('regression: 31st forward in common year',\n   ['2023-01-31', 31, 'FORWARD', 4],\n   ['2023-01-31', '2023-03-01', '2023-03-31', '2023-05-01'])]]\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":"f61f5a8f782a434e786572b707bc460438c32a78d71dd2c9af1426faf13b55fb","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(dtstart, monthday, skip, count):\n    start = dt.date.fromisoformat(dtstart)\n    out = []\n    for k in range(240):\n        mi = start.month - 1 + k\n        y, m = start.year + mi // 12, mi % 12 + 1\n        dim = calendar.monthrange(y, m)[1]\n        if monthday <= dim:\n            d = dt.date(y, m, monthday)\n        elif skip in (None, 'OMIT'):\n            continue\n        elif skip == 'BACKWARD':\n            d = dt.date(y, m, 28)\n        else:\n            d = dt.date(y, m, dim) + dt.timedelta(days=1)\n        if d < start:\n            continue\n        out.append(d.isoformat())\n        if len(out) >= count:\n            break\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: 31st forward in common year',\n   ['2023-01-31', 31, 'FORWARD', 4],\n   ['2023-01-31', '2023-03-01', '2023-03-31', '2023-05-01']),\n  ('default omits', ['2023-01-30', 30, None, 3], ['2023-01-30', '2023-03-30', '2023-04-30']),\n  ('explicit omit', ['2023-01-31', 31, 'OMIT', 3], ['2023-01-31', '2023-03-31', '2023-05-31']),\n  ('backward from 31st',\n   ['2024-03-31', 31, 'BACKWARD', 4],\n   ['2024-03-31', '2024-04-30', '2024-05-31', '2024-06-30']),\n  ('leap february 29', ['2024-01-29', 29, 'BACKWARD', 3], ['2024-01-29', '2024-02-29', '2024-03-29']),\n  ('common february 29 backward',\n   ['2023-01-29', 29, 'BACKWARD', 3],\n   ['2023-01-29', '2023-02-28', '2023-03-29']),\n  ('forward 30th in february leap',\n   ['2024-01-30', 30, 'FORWARD', 3],\n   ['2024-01-30', '2024-03-01', '2024-03-30']),\n  ('backward 31st leap february',\n   ['2024-01-31', 31, 'BACKWARD', 3],\n   ['2024-01-31', '2024-02-29', '2024-03-31'])],\n [('explicit omit', ['2023-01-31', 31, 'OMIT', 3], ['2023-01-31', '2023-03-31', '2023-05-31']),\n  ('backward from 31st',\n   ['2024-03-31', 31, 'BACKWARD', 4],\n   ['2024-03-31', '2024-04-30', '2024-05-31', '2024-06-30']),\n  ('leap february 29', ['2024-01-29', 29, 'BACKWARD', 3], ['2024-01-29', '2024-02-29', '2024-03-29']),\n  ('common february 29 backward',\n   ['2023-01-29', 29, 'BACKWARD', 3],\n   ['2023-01-29', '2023-02-28', '2023-03-29']),\n  ('forward 30th in february leap',\n   ['2024-01-30', 30, 'FORWARD', 3],\n   ['2024-01-30', '2024-03-01', '2024-03-30']),\n  ('backward 30th in february',\n   ['2023-01-30', 30, 'BACKWARD', 3],\n   ['2023-01-30', '2023-02-28', '2023-03-30']),\n  ('forward 29th in common february',\n   ['2023-01-29', 29, 'FORWARD', 3],\n   ['2023-01-29', '2023-03-01', '2023-03-29']),\n  ('backward 31st leap february',\n   ['2024-01-31', 31, 'BACKWARD', 3],\n   ['2024-01-31', '2024-02-29', '2024-03-31'])],\n [('leap february 29', ['2024-01-29', 29, 'BACKWARD', 3], ['2024-01-29', '2024-02-29', '2024-03-29']),\n  ('common february 29 backward',\n   ['2023-01-29', 29, 'BACKWARD', 3],\n   ['2023-01-29', '2023-02-28', '2023-03-29']),\n  ('forward 30th in february leap',\n   ['2024-01-30', 30, 'FORWARD', 3],\n   ['2024-01-30', '2024-03-01', '2024-03-30']),\n  ('backward 30th in february',\n   ['2023-01-30', 30, 'BACKWARD', 3],\n   ['2023-01-30', '2023-02-28', '2023-03-30']),\n  ('forward 29th in common february',\n   ['2023-01-29', 29, 'FORWARD', 3],\n   ['2023-01-29', '2023-03-01', '2023-03-29']),\n  ('leap day omit', ['2024-01-29', 29, None, 3], ['2024-01-29', '2024-02-29', '2024-03-29']),\n  ('forward from april 31', ['2024-04-15', 31, 'FORWARD', 3], ['2024-05-01', '2024-05-31', '2024-07-01']),\n  ('backward 31st leap february',\n   ['2024-01-31', 31, 'BACKWARD', 3],\n   ['2024-01-31', '2024-02-29', '2024-03-31'])],\n [('forward 30th in february leap',\n   ['2024-01-30', 30, 'FORWARD', 3],\n   ['2024-01-30', '2024-03-01', '2024-03-30']),\n  ('backward 30th in february',\n   ['2023-01-30', 30, 'BACKWARD', 3],\n   ['2023-01-30', '2023-02-28', '2023-03-30']),\n  ('forward 29th in common february',\n   ['2023-01-29', 29, 'FORWARD', 3],\n   ['2023-01-29', '2023-03-01', '2023-03-29']),\n  ('leap day omit', ['2024-01-29', 29, None, 3], ['2024-01-29', '2024-02-29', '2024-03-29']),\n  ('forward from april 31', ['2024-04-15', 31, 'FORWARD', 3], ['2024-05-01', '2024-05-31', '2024-07-01']),\n  ('backward 31st leap february',\n   ['2024-01-31', 31, 'BACKWARD', 3],\n   ['2024-01-31', '2024-02-29', '2024-03-31']),\n  ('century leap day', ['2000-01-29', 29, 'OMIT', 3], ['2000-01-29', '2000-02-29', '2000-03-29'])],\n [('forward 29th in common february',\n   ['2023-01-29', 29, 'FORWARD', 3],\n   ['2023-01-29', '2023-03-01', '2023-03-29']),\n  ('leap day omit', ['2024-01-29', 29, None, 3], ['2024-01-29', '2024-02-29', '2024-03-29']),\n  ('forward from april 31', ['2024-04-15', 31, 'FORWARD', 3], ['2024-05-01', '2024-05-31', '2024-07-01']),\n  ('backward 31st leap february',\n   ['2024-01-31', 31, 'BACKWARD', 3],\n   ['2024-01-31', '2024-02-29', '2024-03-31']),\n  ('century leap day', ['2000-01-29', 29, 'OMIT', 3], ['2000-01-29', '2000-02-29', '2000-03-29']),\n  ('century common february', ['2100-01-29', 29, 'OMIT', 3], ['2100-01-29', '2100-03-29', '2100-04-29']),\n  ('regression: 31st forward in common year',\n   ['2023-01-31', 31, 'FORWARD', 4],\n   ['2023-01-31', '2023-03-01', '2023-03-31', '2023-05-01'])]]\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":"7769b37f10598969670d9ce8f6e91057319743073a24b191bd9887f0788baa14","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(dtstart, monthday, skip, count):\n    start = dt.date.fromisoformat(dtstart)\n    out = []\n    for k in range(240):\n        mi = start.month - 1 + k\n        y, m = start.year + mi // 12, mi % 12 + 1\n        dim = calendar.monthrange(y, m)[1]\n        if monthday <= dim:\n            d = dt.date(y, m, monthday)\n        elif skip in (None, 'OMIT'):\n            continue\n        elif skip == 'BACKWARD':\n            d = dt.date(y, m, dim)\n        else:\n            d = dt.date(y, m, dim) + dt.timedelta(days=1)\n        if d < start:\n            continue\n        out.append(d.isoformat())\n        if len(out) >= count:\n            break\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: 31st forward in common year',\n   ['2023-01-31', 31, 'FORWARD', 4],\n   ['2023-01-31', '2023-03-01', '2023-03-31', '2023-05-01']),\n  ('default omits', ['2023-01-30', 30, None, 3], ['2023-01-30', '2023-03-30', '2023-04-30']),\n  ('explicit omit', ['2023-01-31', 31, 'OMIT', 3], ['2023-01-31', '2023-03-31', '2023-05-31']),\n  ('backward from 31st',\n   ['2024-03-31', 31, 'BACKWARD', 4],\n   ['2024-03-31', '2024-04-30', '2024-05-31', '2024-06-30']),\n  ('leap february 29', ['2024-01-29', 29, 'BACKWARD', 3], ['2024-01-29', '2024-02-29', '2024-03-29']),\n  ('common february 29 backward',\n   ['2023-01-29', 29, 'BACKWARD', 3],\n   ['2023-01-29', '2023-02-28', '2023-03-29']),\n  ('forward 30th in february leap',\n   ['2024-01-30', 30, 'FORWARD', 3],\n   ['2024-01-30', '2024-03-01', '2024-03-30']),\n  ('backward 31st leap february',\n   ['2024-01-31', 31, 'BACKWARD', 3],\n   ['2024-01-31', '2024-02-29', '2024-03-31'])],\n [('explicit omit', ['2023-01-31', 31, 'OMIT', 3], ['2023-01-31', '2023-03-31', '2023-05-31']),\n  ('backward from 31st',\n   ['2024-03-31', 31, 'BACKWARD', 4],\n   ['2024-03-31', '2024-04-30', '2024-05-31', '2024-06-30']),\n  ('leap february 29', ['2024-01-29', 29, 'BACKWARD', 3], ['2024-01-29', '2024-02-29', '2024-03-29']),\n  ('common february 29 backward',\n   ['2023-01-29', 29, 'BACKWARD', 3],\n   ['2023-01-29', '2023-02-28', '2023-03-29']),\n  ('forward 30th in february leap',\n   ['2024-01-30', 30, 'FORWARD', 3],\n   ['2024-01-30', '2024-03-01', '2024-03-30']),\n  ('backward 30th in february',\n   ['2023-01-30', 30, 'BACKWARD', 3],\n   ['2023-01-30', '2023-02-28', '2023-03-30']),\n  ('forward 29th in common february',\n   ['2023-01-29', 29, 'FORWARD', 3],\n   ['2023-01-29', '2023-03-01', '2023-03-29']),\n  ('backward 31st leap february',\n   ['2024-01-31', 31, 'BACKWARD', 3],\n   ['2024-01-31', '2024-02-29', '2024-03-31'])],\n [('leap february 29', ['2024-01-29', 29, 'BACKWARD', 3], ['2024-01-29', '2024-02-29', '2024-03-29']),\n  ('common february 29 backward',\n   ['2023-01-29', 29, 'BACKWARD', 3],\n   ['2023-01-29', '2023-02-28', '2023-03-29']),\n  ('forward 30th in february leap',\n   ['2024-01-30', 30, 'FORWARD', 3],\n   ['2024-01-30', '2024-03-01', '2024-03-30']),\n  ('backward 30th in february',\n   ['2023-01-30', 30, 'BACKWARD', 3],\n   ['2023-01-30', '2023-02-28', '2023-03-30']),\n  ('forward 29th in common february',\n   ['2023-01-29', 29, 'FORWARD', 3],\n   ['2023-01-29', '2023-03-01', '2023-03-29']),\n  ('leap day omit', ['2024-01-29', 29, None, 3], ['2024-01-29', '2024-02-29', '2024-03-29']),\n  ('forward from april 31', ['2024-04-15', 31, 'FORWARD', 3], ['2024-05-01', '2024-05-31', '2024-07-01']),\n  ('backward 31st leap february',\n   ['2024-01-31', 31, 'BACKWARD', 3],\n   ['2024-01-31', '2024-02-29', '2024-03-31'])],\n [('forward 30th in february leap',\n   ['2024-01-30', 30, 'FORWARD', 3],\n   ['2024-01-30', '2024-03-01', '2024-03-30']),\n  ('backward 30th in february',\n   ['2023-01-30', 30, 'BACKWARD', 3],\n   ['2023-01-30', '2023-02-28', '2023-03-30']),\n  ('forward 29th in common february',\n   ['2023-01-29', 29, 'FORWARD', 3],\n   ['2023-01-29', '2023-03-01', '2023-03-29']),\n  ('leap day omit', ['2024-01-29', 29, None, 3], ['2024-01-29', '2024-02-29', '2024-03-29']),\n  ('forward from april 31', ['2024-04-15', 31, 'FORWARD', 3], ['2024-05-01', '2024-05-31', '2024-07-01']),\n  ('backward 31st leap february',\n   ['2024-01-31', 31, 'BACKWARD', 3],\n   ['2024-01-31', '2024-02-29', '2024-03-31']),\n  ('century leap day', ['2000-01-29', 29, 'OMIT', 3], ['2000-01-29', '2000-02-29', '2000-03-29'])],\n [('forward 29th in common february',\n   ['2023-01-29', 29, 'FORWARD', 3],\n   ['2023-01-29', '2023-03-01', '2023-03-29']),\n  ('leap day omit', ['2024-01-29', 29, None, 3], ['2024-01-29', '2024-02-29', '2024-03-29']),\n  ('forward from april 31', ['2024-04-15', 31, 'FORWARD', 3], ['2024-05-01', '2024-05-31', '2024-07-01']),\n  ('backward 31st leap february',\n   ['2024-01-31', 31, 'BACKWARD', 3],\n   ['2024-01-31', '2024-02-29', '2024-03-31']),\n  ('century leap day', ['2000-01-29', 29, 'OMIT', 3], ['2000-01-29', '2000-02-29', '2000-03-29']),\n  ('century common february', ['2100-01-29', 29, 'OMIT', 3], ['2100-01-29', '2100-03-29', '2100-04-29']),\n  ('regression: 31st forward in common year',\n   ['2023-01-31', 31, 'FORWARD', 4],\n   ['2023-01-31', '2023-03-01', '2023-03-31', '2023-05-01'])]]\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-monthly-skip-policy-backward-target","generated_at":"2026-09-29T14:49:22.951049+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 backward target decision use `dt.date(y, m, dim)`, leaving the other decision sites of the model unchanged.","root_cause":"The backward target assumes the shortest month length.","sha256":"e00702adb4b64ada6de285d52802c2b0eda69055626ab769ef12f3a3b9c4f4be","title":"Monthly day 29-31 with OMIT/BACKWARD/FORWARD skip policy: backward target · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":44.564,"exit_code":1,"observations":[{"actual":["2023-01-31","2023-03-01","2023-03-31","2023-05-01"],"check":"regression: 31st forward in common year","expected":["2023-01-31","2023-03-01","2023-03-31","2023-05-01"],"passed":true},{"actual":["2023-01-30","2023-03-30","2023-04-30"],"check":"default omits","expected":["2023-01-30","2023-03-30","2023-04-30"],"passed":true},{"actual":["2023-01-31","2023-03-31","2023-05-31"],"check":"explicit omit","expected":["2023-01-31","2023-03-31","2023-05-31"],"passed":true},{"actual":["2024-03-31","2024-04-30","2024-05-31","2024-06-30"],"check":"backward from 31st","expected":["2024-03-31","2024-04-30","2024-05-31","2024-06-30"],"passed":true},{"actual":["2024-01-29","2024-02-29","2024-03-29"],"check":"leap february 29","expected":["2024-01-29","2024-02-29","2024-03-29"],"passed":true},{"actual":["2023-01-29","2023-02-28","2023-03-29"],"check":"common february 29 backward","expected":["2023-01-29","2023-02-28","2023-03-29"],"passed":true},{"actual":["2024-01-30","2024-03-01","2024-03-30"],"check":"forward 30th in february leap","expected":["2024-01-30","2024-03-01","2024-03-30"],"passed":true},{"actual":["2024-01-31","2024-02-28","2024-03-31"],"check":"backward 31st leap february","expected":["2024-01-31","2024-02-29","2024-03-31"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: 31st forward in common year\", \"actual\": [\"2023-01-31\", \"2023-03-01\", \"2023-03-31\", \"2023-05-01\"], \"expected\": [\"2023-01-31\", \"2023-03-01\", \"2023-03-31\", \"2023-05-01\"], \"passed\": true}, {\"check\": \"default omits\", \"actual\": [\"2023-01-30\", \"2023-03-30\", \"2023-04-30\"], \"expected\": [\"2023-01-30\", \"2023-03-30\", \"2023-04-30\"], \"passed\": true}, {\"check\": \"explicit omit\", \"actual\": [\"2023-01-31\", \"2023-03-31\", \"2023-05-31\"], \"expected\": [\"2023-01-31\", \"2023-03-31\", \"2023-05-31\"], \"passed\": true}, {\"check\": \"backward from 31st\", \"actual\": [\"2024-03-31\", \"2024-04-30\", \"2024-05-31\", \"2024-06-30\"], \"expected\": [\"2024-03-31\", \"2024-04-30\", \"2024-05-31\", \"2024-06-30\"], \"passed\": true}, {\"check\": \"leap february 29\", \"actual\": [\"2024-01-29\", \"2024-02-29\", \"2024-03-29\"], \"expected\": [\"2024-01-29\", \"2024-02-29\", \"2024-03-29\"], \"passed\": true}, {\"check\": \"common february 29 backward\", \"actual\": [\"2023-01-29\", \"2023-02-28\", \"2023-03-29\"], \"expected\": [\"2023-01-29\", \"2023-02-28\", \"2023-03-29\"], \"passed\": true}, {\"check\": \"forward 30th in february leap\", \"actual\": [\"2024-01-30\", \"2024-03-01\", \"2024-03-30\"], \"expected\": [\"2024-01-30\", \"2024-03-01\", \"2024-03-30\"], \"passed\": true}, {\"check\": \"backward 31st leap february\", \"actual\": [\"2024-01-31\", \"2024-02-28\", \"2024-03-31\"], \"expected\": [\"2024-01-31\", \"2024-02-29\", \"2024-03-31\"], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.314,"exit_code":1,"observations":[{"actual":["2023-01-31","2023-03-01","2023-03-31","2023-05-01"],"check":"regression: 31st forward in common year","expected":["2023-01-31","2023-03-01","2023-03-31","2023-05-01"],"passed":true},{"actual":["2023-01-30","2023-03-30","2023-04-30"],"check":"default omits","expected":["2023-01-30","2023-03-30","2023-04-30"],"passed":true},{"actual":["2023-01-31","2023-03-31","2023-05-31"],"check":"explicit omit","expected":["2023-01-31","2023-03-31","2023-05-31"],"passed":true},{"actual":["2024-03-31","2024-04-28","2024-05-31","2024-06-28"],"check":"backward from 31st","expected":["2024-03-31","2024-04-30","2024-05-31","2024-06-30"],"passed":false},{"actual":["2024-01-29","2024-02-29","2024-03-29"],"check":"leap february 29","expected":["2024-01-29","2024-02-29","2024-03-29"],"passed":true},{"actual":["2023-01-29","2023-02-28","2023-03-29"],"check":"common february 29 backward","expected":["2023-01-29","2023-02-28","2023-03-29"],"passed":true},{"actual":["2024-01-30","2024-03-01","2024-03-30"],"check":"forward 30th in february leap","expected":["2024-01-30","2024-03-01","2024-03-30"],"passed":true},{"actual":["2024-01-31","2024-02-28","2024-03-31"],"check":"backward 31st leap february","expected":["2024-01-31","2024-02-29","2024-03-31"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: 31st forward in common year\", \"actual\": [\"2023-01-31\", \"2023-03-01\", \"2023-03-31\", \"2023-05-01\"], \"expected\": [\"2023-01-31\", \"2023-03-01\", \"2023-03-31\", \"2023-05-01\"], \"passed\": true}, {\"check\": \"default omits\", \"actual\": [\"2023-01-30\", \"2023-03-30\", \"2023-04-30\"], \"expected\": [\"2023-01-30\", \"2023-03-30\", \"2023-04-30\"], \"passed\": true}, {\"check\": \"explicit omit\", \"actual\": [\"2023-01-31\", \"2023-03-31\", \"2023-05-31\"], \"expected\": [\"2023-01-31\", \"2023-03-31\", \"2023-05-31\"], \"passed\": true}, {\"check\": \"backward from 31st\", \"actual\": [\"2024-03-31\", \"2024-04-28\", \"2024-05-31\", \"2024-06-28\"], \"expected\": [\"2024-03-31\", \"2024-04-30\", \"2024-05-31\", \"2024-06-30\"], \"passed\": false}, {\"check\": \"leap february 29\", \"actual\": [\"2024-01-29\", \"2024-02-29\", \"2024-03-29\"], \"expected\": [\"2024-01-29\", \"2024-02-29\", \"2024-03-29\"], \"passed\": true}, {\"check\": \"common february 29 backward\", \"actual\": [\"2023-01-29\", \"2023-02-28\", \"2023-03-29\"], \"expected\": [\"2023-01-29\", \"2023-02-28\", \"2023-03-29\"], \"passed\": true}, {\"check\": \"forward 30th in february leap\", \"actual\": [\"2024-01-30\", \"2024-03-01\", \"2024-03-30\"], \"expected\": [\"2024-01-30\", \"2024-03-01\", \"2024-03-30\"], \"passed\": true}, {\"check\": \"backward 31st leap february\", \"actual\": [\"2024-01-31\", \"2024-02-28\", \"2024-03-31\"], \"expected\": [\"2024-01-31\", \"2024-02-29\", \"2024-03-31\"], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.667,"exit_code":0,"observations":[{"actual":["2023-01-31","2023-03-01","2023-03-31","2023-05-01"],"check":"regression: 31st forward in common year","expected":["2023-01-31","2023-03-01","2023-03-31","2023-05-01"],"passed":true},{"actual":["2023-01-30","2023-03-30","2023-04-30"],"check":"default omits","expected":["2023-01-30","2023-03-30","2023-04-30"],"passed":true},{"actual":["2023-01-31","2023-03-31","2023-05-31"],"check":"explicit omit","expected":["2023-01-31","2023-03-31","2023-05-31"],"passed":true},{"actual":["2024-03-31","2024-04-30","2024-05-31","2024-06-30"],"check":"backward from 31st","expected":["2024-03-31","2024-04-30","2024-05-31","2024-06-30"],"passed":true},{"actual":["2024-01-29","2024-02-29","2024-03-29"],"check":"leap february 29","expected":["2024-01-29","2024-02-29","2024-03-29"],"passed":true},{"actual":["2023-01-29","2023-02-28","2023-03-29"],"check":"common february 29 backward","expected":["2023-01-29","2023-02-28","2023-03-29"],"passed":true},{"actual":["2024-01-30","2024-03-01","2024-03-30"],"check":"forward 30th in february leap","expected":["2024-01-30","2024-03-01","2024-03-30"],"passed":true},{"actual":["2024-01-31","2024-02-29","2024-03-31"],"check":"backward 31st leap february","expected":["2024-01-31","2024-02-29","2024-03-31"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: 31st forward in common year\", \"actual\": [\"2023-01-31\", \"2023-03-01\", \"2023-03-31\", \"2023-05-01\"], \"expected\": [\"2023-01-31\", \"2023-03-01\", \"2023-03-31\", \"2023-05-01\"], \"passed\": true}, {\"check\": \"default omits\", \"actual\": [\"2023-01-30\", \"2023-03-30\", \"2023-04-30\"], \"expected\": [\"2023-01-30\", \"2023-03-30\", \"2023-04-30\"], \"passed\": true}, {\"check\": \"explicit omit\", \"actual\": [\"2023-01-31\", \"2023-03-31\", \"2023-05-31\"], \"expected\": [\"2023-01-31\", \"2023-03-31\", \"2023-05-31\"], \"passed\": true}, {\"check\": \"backward from 31st\", \"actual\": [\"2024-03-31\", \"2024-04-30\", \"2024-05-31\", \"2024-06-30\"], \"expected\": [\"2024-03-31\", \"2024-04-30\", \"2024-05-31\", \"2024-06-30\"], \"passed\": true}, {\"check\": \"leap february 29\", \"actual\": [\"2024-01-29\", \"2024-02-29\", \"2024-03-29\"], \"expected\": [\"2024-01-29\", \"2024-02-29\", \"2024-03-29\"], \"passed\": true}, {\"check\": \"common february 29 backward\", \"actual\": [\"2023-01-29\", \"2023-02-28\", \"2023-03-29\"], \"expected\": [\"2023-01-29\", \"2023-02-28\", \"2023-03-29\"], \"passed\": true}, {\"check\": \"forward 30th in february leap\", \"actual\": [\"2024-01-30\", \"2024-03-01\", \"2024-03-30\"], \"expected\": [\"2024-01-30\", \"2024-03-01\", \"2024-03-30\"], \"passed\": true}, {\"check\": \"backward 31st leap february\", \"actual\": [\"2024-01-31\", \"2024-02-29\", \"2024-03-31\"], \"expected\": [\"2024-01-31\", \"2024-02-29\", \"2024-03-31\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}