{"abstract":"Exceptions are returned in edit order, not by occurrence.","category":"Calendar recurrence rules","checks":7,"contract":"An all-day series (old_start, interval, count) is edited to start at new_start with new_interval. Each override [original, target] (target None = cancelled) is keyed by occurrence index i, where original = old_start + i*interval; overrides not on an old instance (before the series, misaligned or at i >= count) are dropped. The override is re-keyed to new_start + i*new_interval; moved targets are absolute and kept unchanged; an override whose target equals its new key is dropped as a no-op; the last override for a key wins. Return [[new_key, target]] sorted by new key.","evaluation_group":"w2-calendar-recurrence-rules-override-remap-on-series-change","failed_approach":"The partial repair `sorted(out, key=lambda k: out[k] or '')` sorts by target, which differs from key order when instances are moved past each other or cancelled.","family":"w2-calendar-recurrence-rules-override-remap-on-series-change-output-order","id":"FA-77316","implementations":{"attempt":{"sha256":"3256ef9ce7569ee197ff083e7e9560de6e1118f36048756b7a1ffc58415bc858","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(old_start, interval, count, new_start, new_interval, overrides):\n    old = dt.date.fromisoformat(old_start)\n    new = dt.date.fromisoformat(new_start)\n    out = {}\n    for orig, target in overrides:\n        o = dt.date.fromisoformat(orig)\n        diff = (o - old).days\n        if diff < 0 or diff % interval != 0 or diff // interval >= count:\n            continue\n        i = diff // interval\n        key = new + dt.timedelta(days=i * new_interval)\n        if target == key.isoformat():\n            continue\n        out[key.isoformat()] = target\n    return [[k, out[k]] for k in sorted(out, key=lambda k: out[k] or '')]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: override before series start',\n   ['2024-01-08', 7, 5, '2024-01-10', 7, [['2024-01-01', None], ['2024-01-15', '2024-01-20']]],\n   [['2024-01-17', '2024-01-20']]),\n  ('interval change',\n   ['2024-01-01', 7, 6, '2024-01-01', 14, [['2024-01-15', '2024-01-16']]],\n   [['2024-01-29', '2024-01-16']]),\n  ('beyond count',\n   ['2024-01-01', 1, 3, '2024-01-02', 1, [['2024-01-05', None], ['2024-01-02', '2024-01-10']]],\n   [['2024-01-03', '2024-01-10']]),\n  ('target becomes new key', ['2024-01-01', 7, 4, '2024-01-02', 7, [['2024-01-08', '2024-01-09']]], []),\n  ('former no-op now moves',\n   ['2024-01-01', 7, 4, '2024-01-03', 7, [['2024-01-08', '2024-01-08']]],\n   [['2024-01-10', '2024-01-08']]),\n  ('reverse edit order',\n   ['2024-03-01', 1, 10, '2024-03-05', 1, [['2024-03-07', '2024-03-30'], ['2024-03-02', None]]],\n   [['2024-03-06', None], ['2024-03-11', '2024-03-30']]),\n  ('shrinking interval',\n   ['2024-03-01', 14, 5, '2024-03-01', 7, [['2024-03-29', None], ['2024-03-15', '2024-03-16']]],\n   [['2024-03-08', '2024-03-16'], ['2024-03-15', None]])],\n [('beyond count',\n   ['2024-01-01', 1, 3, '2024-01-02', 1, [['2024-01-05', None], ['2024-01-02', '2024-01-10']]],\n   [['2024-01-03', '2024-01-10']]),\n  ('target becomes new key', ['2024-01-01', 7, 4, '2024-01-02', 7, [['2024-01-08', '2024-01-09']]], []),\n  ('former no-op now moves',\n   ['2024-01-01', 7, 4, '2024-01-03', 7, [['2024-01-08', '2024-01-08']]],\n   [['2024-01-10', '2024-01-08']]),\n  ('reverse edit order',\n   ['2024-03-01', 1, 10, '2024-03-05', 1, [['2024-03-07', '2024-03-30'], ['2024-03-02', None]]],\n   [['2024-03-06', None], ['2024-03-11', '2024-03-30']]),\n  ('shrinking interval',\n   ['2024-03-01', 14, 5, '2024-03-01', 7, [['2024-03-29', None], ['2024-03-15', '2024-03-16']]],\n   [['2024-03-08', '2024-03-16'], ['2024-03-15', None]]),\n  ('misaligned override',\n   ['2024-04-01', 3, 5, '2024-04-02', 3, [['2024-04-02', None], ['2024-04-04', '2024-04-30']]],\n   [['2024-04-05', '2024-04-30']]),\n  ('last wins',\n   ['2024-05-01', 2, 4, '2024-05-02', 2, [['2024-05-03', '2024-05-20'], ['2024-05-03', '2024-05-21']]],\n   [['2024-05-04', '2024-05-21']])],\n [('former no-op now moves',\n   ['2024-01-01', 7, 4, '2024-01-03', 7, [['2024-01-08', '2024-01-08']]],\n   [['2024-01-10', '2024-01-08']]),\n  ('reverse edit order',\n   ['2024-03-01', 1, 10, '2024-03-05', 1, [['2024-03-07', '2024-03-30'], ['2024-03-02', None]]],\n   [['2024-03-06', None], ['2024-03-11', '2024-03-30']]),\n  ('shrinking interval',\n   ['2024-03-01', 14, 5, '2024-03-01', 7, [['2024-03-29', None], ['2024-03-15', '2024-03-16']]],\n   [['2024-03-08', '2024-03-16'], ['2024-03-15', None]]),\n  ('misaligned override',\n   ['2024-04-01', 3, 5, '2024-04-02', 3, [['2024-04-02', None], ['2024-04-04', '2024-04-30']]],\n   [['2024-04-05', '2024-04-30']]),\n  ('last wins',\n   ['2024-05-01', 2, 4, '2024-05-02', 2, [['2024-05-03', '2024-05-20'], ['2024-05-03', '2024-05-21']]],\n   [['2024-05-04', '2024-05-21']]),\n  ('moved forward past neighbour',\n   ['2024-06-01',\n    1,\n    5,\n    '2024-06-11',\n    1,\n    [['2024-06-01', '2024-06-30'], ['2024-06-03', None], ['2024-06-04', '2024-06-12']]],\n   [['2024-06-11', '2024-06-30'], ['2024-06-13', None], ['2024-06-14', '2024-06-12']]),\n  ('earlier-moved target',\n   ['2024-07-10', 7, 3, '2024-07-12', 7, [['2024-07-17', '2024-07-01']]],\n   [['2024-07-19', '2024-07-01']])],\n [('shrinking interval',\n   ['2024-03-01', 14, 5, '2024-03-01', 7, [['2024-03-29', None], ['2024-03-15', '2024-03-16']]],\n   [['2024-03-08', '2024-03-16'], ['2024-03-15', None]]),\n  ('misaligned override',\n   ['2024-04-01', 3, 5, '2024-04-02', 3, [['2024-04-02', None], ['2024-04-04', '2024-04-30']]],\n   [['2024-04-05', '2024-04-30']]),\n  ('last wins',\n   ['2024-05-01', 2, 4, '2024-05-02', 2, [['2024-05-03', '2024-05-20'], ['2024-05-03', '2024-05-21']]],\n   [['2024-05-04', '2024-05-21']]),\n  ('moved forward past neighbour',\n   ['2024-06-01',\n    1,\n    5,\n    '2024-06-11',\n    1,\n    [['2024-06-01', '2024-06-30'], ['2024-06-03', None], ['2024-06-04', '2024-06-12']]],\n   [['2024-06-11', '2024-06-30'], ['2024-06-13', None], ['2024-06-14', '2024-06-12']]),\n  ('earlier-moved target',\n   ['2024-07-10', 7, 3, '2024-07-12', 7, [['2024-07-17', '2024-07-01']]],\n   [['2024-07-19', '2024-07-01']]),\n  ('regression: override before series start',\n   ['2024-01-08', 7, 5, '2024-01-10', 7, [['2024-01-01', None], ['2024-01-15', '2024-01-20']]],\n   [['2024-01-17', '2024-01-20']]),\n  ('interval change',\n   ['2024-01-01', 7, 6, '2024-01-01', 14, [['2024-01-15', '2024-01-16']]],\n   [['2024-01-29', '2024-01-16']])],\n [('last wins',\n   ['2024-05-01', 2, 4, '2024-05-02', 2, [['2024-05-03', '2024-05-20'], ['2024-05-03', '2024-05-21']]],\n   [['2024-05-04', '2024-05-21']]),\n  ('moved forward past neighbour',\n   ['2024-06-01',\n    1,\n    5,\n    '2024-06-11',\n    1,\n    [['2024-06-01', '2024-06-30'], ['2024-06-03', None], ['2024-06-04', '2024-06-12']]],\n   [['2024-06-11', '2024-06-30'], ['2024-06-13', None], ['2024-06-14', '2024-06-12']]),\n  ('earlier-moved target',\n   ['2024-07-10', 7, 3, '2024-07-12', 7, [['2024-07-17', '2024-07-01']]],\n   [['2024-07-19', '2024-07-01']]),\n  ('regression: override before series start',\n   ['2024-01-08', 7, 5, '2024-01-10', 7, [['2024-01-01', None], ['2024-01-15', '2024-01-20']]],\n   [['2024-01-17', '2024-01-20']]),\n  ('interval change',\n   ['2024-01-01', 7, 6, '2024-01-01', 14, [['2024-01-15', '2024-01-16']]],\n   [['2024-01-29', '2024-01-16']]),\n  ('beyond count',\n   ['2024-01-01', 1, 3, '2024-01-02', 1, [['2024-01-05', None], ['2024-01-02', '2024-01-10']]],\n   [['2024-01-03', '2024-01-10']]),\n  ('target becomes new key', ['2024-01-01', 7, 4, '2024-01-02', 7, [['2024-01-08', '2024-01-09']]], []),\n  ('reverse edit order',\n   ['2024-03-01', 1, 10, '2024-03-05', 1, [['2024-03-07', '2024-03-30'], ['2024-03-02', None]]],\n   [['2024-03-06', None], ['2024-03-11', '2024-03-30']])]]\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":"ce9e9faa450f678baba0d8de145d9eb0d0d947d30ca7f31633ee88a7156bacab","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(old_start, interval, count, new_start, new_interval, overrides):\n    old = dt.date.fromisoformat(old_start)\n    new = dt.date.fromisoformat(new_start)\n    out = {}\n    for orig, target in overrides:\n        o = dt.date.fromisoformat(orig)\n        diff = (o - old).days\n        if diff < 0 or diff % interval != 0 or diff // interval >= count:\n            continue\n        i = diff // interval\n        key = new + dt.timedelta(days=i * new_interval)\n        if target == key.isoformat():\n            continue\n        out[key.isoformat()] = target\n    return [[k, out[k]] for k in out]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: override before series start',\n   ['2024-01-08', 7, 5, '2024-01-10', 7, [['2024-01-01', None], ['2024-01-15', '2024-01-20']]],\n   [['2024-01-17', '2024-01-20']]),\n  ('interval change',\n   ['2024-01-01', 7, 6, '2024-01-01', 14, [['2024-01-15', '2024-01-16']]],\n   [['2024-01-29', '2024-01-16']]),\n  ('beyond count',\n   ['2024-01-01', 1, 3, '2024-01-02', 1, [['2024-01-05', None], ['2024-01-02', '2024-01-10']]],\n   [['2024-01-03', '2024-01-10']]),\n  ('target becomes new key', ['2024-01-01', 7, 4, '2024-01-02', 7, [['2024-01-08', '2024-01-09']]], []),\n  ('former no-op now moves',\n   ['2024-01-01', 7, 4, '2024-01-03', 7, [['2024-01-08', '2024-01-08']]],\n   [['2024-01-10', '2024-01-08']]),\n  ('reverse edit order',\n   ['2024-03-01', 1, 10, '2024-03-05', 1, [['2024-03-07', '2024-03-30'], ['2024-03-02', None]]],\n   [['2024-03-06', None], ['2024-03-11', '2024-03-30']]),\n  ('shrinking interval',\n   ['2024-03-01', 14, 5, '2024-03-01', 7, [['2024-03-29', None], ['2024-03-15', '2024-03-16']]],\n   [['2024-03-08', '2024-03-16'], ['2024-03-15', None]])],\n [('beyond count',\n   ['2024-01-01', 1, 3, '2024-01-02', 1, [['2024-01-05', None], ['2024-01-02', '2024-01-10']]],\n   [['2024-01-03', '2024-01-10']]),\n  ('target becomes new key', ['2024-01-01', 7, 4, '2024-01-02', 7, [['2024-01-08', '2024-01-09']]], []),\n  ('former no-op now moves',\n   ['2024-01-01', 7, 4, '2024-01-03', 7, [['2024-01-08', '2024-01-08']]],\n   [['2024-01-10', '2024-01-08']]),\n  ('reverse edit order',\n   ['2024-03-01', 1, 10, '2024-03-05', 1, [['2024-03-07', '2024-03-30'], ['2024-03-02', None]]],\n   [['2024-03-06', None], ['2024-03-11', '2024-03-30']]),\n  ('shrinking interval',\n   ['2024-03-01', 14, 5, '2024-03-01', 7, [['2024-03-29', None], ['2024-03-15', '2024-03-16']]],\n   [['2024-03-08', '2024-03-16'], ['2024-03-15', None]]),\n  ('misaligned override',\n   ['2024-04-01', 3, 5, '2024-04-02', 3, [['2024-04-02', None], ['2024-04-04', '2024-04-30']]],\n   [['2024-04-05', '2024-04-30']]),\n  ('last wins',\n   ['2024-05-01', 2, 4, '2024-05-02', 2, [['2024-05-03', '2024-05-20'], ['2024-05-03', '2024-05-21']]],\n   [['2024-05-04', '2024-05-21']])],\n [('former no-op now moves',\n   ['2024-01-01', 7, 4, '2024-01-03', 7, [['2024-01-08', '2024-01-08']]],\n   [['2024-01-10', '2024-01-08']]),\n  ('reverse edit order',\n   ['2024-03-01', 1, 10, '2024-03-05', 1, [['2024-03-07', '2024-03-30'], ['2024-03-02', None]]],\n   [['2024-03-06', None], ['2024-03-11', '2024-03-30']]),\n  ('shrinking interval',\n   ['2024-03-01', 14, 5, '2024-03-01', 7, [['2024-03-29', None], ['2024-03-15', '2024-03-16']]],\n   [['2024-03-08', '2024-03-16'], ['2024-03-15', None]]),\n  ('misaligned override',\n   ['2024-04-01', 3, 5, '2024-04-02', 3, [['2024-04-02', None], ['2024-04-04', '2024-04-30']]],\n   [['2024-04-05', '2024-04-30']]),\n  ('last wins',\n   ['2024-05-01', 2, 4, '2024-05-02', 2, [['2024-05-03', '2024-05-20'], ['2024-05-03', '2024-05-21']]],\n   [['2024-05-04', '2024-05-21']]),\n  ('moved forward past neighbour',\n   ['2024-06-01',\n    1,\n    5,\n    '2024-06-11',\n    1,\n    [['2024-06-01', '2024-06-30'], ['2024-06-03', None], ['2024-06-04', '2024-06-12']]],\n   [['2024-06-11', '2024-06-30'], ['2024-06-13', None], ['2024-06-14', '2024-06-12']]),\n  ('earlier-moved target',\n   ['2024-07-10', 7, 3, '2024-07-12', 7, [['2024-07-17', '2024-07-01']]],\n   [['2024-07-19', '2024-07-01']])],\n [('shrinking interval',\n   ['2024-03-01', 14, 5, '2024-03-01', 7, [['2024-03-29', None], ['2024-03-15', '2024-03-16']]],\n   [['2024-03-08', '2024-03-16'], ['2024-03-15', None]]),\n  ('misaligned override',\n   ['2024-04-01', 3, 5, '2024-04-02', 3, [['2024-04-02', None], ['2024-04-04', '2024-04-30']]],\n   [['2024-04-05', '2024-04-30']]),\n  ('last wins',\n   ['2024-05-01', 2, 4, '2024-05-02', 2, [['2024-05-03', '2024-05-20'], ['2024-05-03', '2024-05-21']]],\n   [['2024-05-04', '2024-05-21']]),\n  ('moved forward past neighbour',\n   ['2024-06-01',\n    1,\n    5,\n    '2024-06-11',\n    1,\n    [['2024-06-01', '2024-06-30'], ['2024-06-03', None], ['2024-06-04', '2024-06-12']]],\n   [['2024-06-11', '2024-06-30'], ['2024-06-13', None], ['2024-06-14', '2024-06-12']]),\n  ('earlier-moved target',\n   ['2024-07-10', 7, 3, '2024-07-12', 7, [['2024-07-17', '2024-07-01']]],\n   [['2024-07-19', '2024-07-01']]),\n  ('regression: override before series start',\n   ['2024-01-08', 7, 5, '2024-01-10', 7, [['2024-01-01', None], ['2024-01-15', '2024-01-20']]],\n   [['2024-01-17', '2024-01-20']]),\n  ('interval change',\n   ['2024-01-01', 7, 6, '2024-01-01', 14, [['2024-01-15', '2024-01-16']]],\n   [['2024-01-29', '2024-01-16']])],\n [('last wins',\n   ['2024-05-01', 2, 4, '2024-05-02', 2, [['2024-05-03', '2024-05-20'], ['2024-05-03', '2024-05-21']]],\n   [['2024-05-04', '2024-05-21']]),\n  ('moved forward past neighbour',\n   ['2024-06-01',\n    1,\n    5,\n    '2024-06-11',\n    1,\n    [['2024-06-01', '2024-06-30'], ['2024-06-03', None], ['2024-06-04', '2024-06-12']]],\n   [['2024-06-11', '2024-06-30'], ['2024-06-13', None], ['2024-06-14', '2024-06-12']]),\n  ('earlier-moved target',\n   ['2024-07-10', 7, 3, '2024-07-12', 7, [['2024-07-17', '2024-07-01']]],\n   [['2024-07-19', '2024-07-01']]),\n  ('regression: override before series start',\n   ['2024-01-08', 7, 5, '2024-01-10', 7, [['2024-01-01', None], ['2024-01-15', '2024-01-20']]],\n   [['2024-01-17', '2024-01-20']]),\n  ('interval change',\n   ['2024-01-01', 7, 6, '2024-01-01', 14, [['2024-01-15', '2024-01-16']]],\n   [['2024-01-29', '2024-01-16']]),\n  ('beyond count',\n   ['2024-01-01', 1, 3, '2024-01-02', 1, [['2024-01-05', None], ['2024-01-02', '2024-01-10']]],\n   [['2024-01-03', '2024-01-10']]),\n  ('target becomes new key', ['2024-01-01', 7, 4, '2024-01-02', 7, [['2024-01-08', '2024-01-09']]], []),\n  ('reverse edit order',\n   ['2024-03-01', 1, 10, '2024-03-05', 1, [['2024-03-07', '2024-03-30'], ['2024-03-02', None]]],\n   [['2024-03-06', None], ['2024-03-11', '2024-03-30']])]]\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":"6515d4b919348a4b729c85d1cb60f35a63eb5d3ff94bf059734497c693e2226d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(old_start, interval, count, new_start, new_interval, overrides):\n    old = dt.date.fromisoformat(old_start)\n    new = dt.date.fromisoformat(new_start)\n    out = {}\n    for orig, target in overrides:\n        o = dt.date.fromisoformat(orig)\n        diff = (o - old).days\n        if diff < 0 or diff % interval != 0 or diff // interval >= count:\n            continue\n        i = diff // interval\n        key = new + dt.timedelta(days=i * new_interval)\n        if target == key.isoformat():\n            continue\n        out[key.isoformat()] = target\n    return [[k, out[k]] for k in sorted(out)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: override before series start',\n   ['2024-01-08', 7, 5, '2024-01-10', 7, [['2024-01-01', None], ['2024-01-15', '2024-01-20']]],\n   [['2024-01-17', '2024-01-20']]),\n  ('interval change',\n   ['2024-01-01', 7, 6, '2024-01-01', 14, [['2024-01-15', '2024-01-16']]],\n   [['2024-01-29', '2024-01-16']]),\n  ('beyond count',\n   ['2024-01-01', 1, 3, '2024-01-02', 1, [['2024-01-05', None], ['2024-01-02', '2024-01-10']]],\n   [['2024-01-03', '2024-01-10']]),\n  ('target becomes new key', ['2024-01-01', 7, 4, '2024-01-02', 7, [['2024-01-08', '2024-01-09']]], []),\n  ('former no-op now moves',\n   ['2024-01-01', 7, 4, '2024-01-03', 7, [['2024-01-08', '2024-01-08']]],\n   [['2024-01-10', '2024-01-08']]),\n  ('reverse edit order',\n   ['2024-03-01', 1, 10, '2024-03-05', 1, [['2024-03-07', '2024-03-30'], ['2024-03-02', None]]],\n   [['2024-03-06', None], ['2024-03-11', '2024-03-30']]),\n  ('shrinking interval',\n   ['2024-03-01', 14, 5, '2024-03-01', 7, [['2024-03-29', None], ['2024-03-15', '2024-03-16']]],\n   [['2024-03-08', '2024-03-16'], ['2024-03-15', None]])],\n [('beyond count',\n   ['2024-01-01', 1, 3, '2024-01-02', 1, [['2024-01-05', None], ['2024-01-02', '2024-01-10']]],\n   [['2024-01-03', '2024-01-10']]),\n  ('target becomes new key', ['2024-01-01', 7, 4, '2024-01-02', 7, [['2024-01-08', '2024-01-09']]], []),\n  ('former no-op now moves',\n   ['2024-01-01', 7, 4, '2024-01-03', 7, [['2024-01-08', '2024-01-08']]],\n   [['2024-01-10', '2024-01-08']]),\n  ('reverse edit order',\n   ['2024-03-01', 1, 10, '2024-03-05', 1, [['2024-03-07', '2024-03-30'], ['2024-03-02', None]]],\n   [['2024-03-06', None], ['2024-03-11', '2024-03-30']]),\n  ('shrinking interval',\n   ['2024-03-01', 14, 5, '2024-03-01', 7, [['2024-03-29', None], ['2024-03-15', '2024-03-16']]],\n   [['2024-03-08', '2024-03-16'], ['2024-03-15', None]]),\n  ('misaligned override',\n   ['2024-04-01', 3, 5, '2024-04-02', 3, [['2024-04-02', None], ['2024-04-04', '2024-04-30']]],\n   [['2024-04-05', '2024-04-30']]),\n  ('last wins',\n   ['2024-05-01', 2, 4, '2024-05-02', 2, [['2024-05-03', '2024-05-20'], ['2024-05-03', '2024-05-21']]],\n   [['2024-05-04', '2024-05-21']])],\n [('former no-op now moves',\n   ['2024-01-01', 7, 4, '2024-01-03', 7, [['2024-01-08', '2024-01-08']]],\n   [['2024-01-10', '2024-01-08']]),\n  ('reverse edit order',\n   ['2024-03-01', 1, 10, '2024-03-05', 1, [['2024-03-07', '2024-03-30'], ['2024-03-02', None]]],\n   [['2024-03-06', None], ['2024-03-11', '2024-03-30']]),\n  ('shrinking interval',\n   ['2024-03-01', 14, 5, '2024-03-01', 7, [['2024-03-29', None], ['2024-03-15', '2024-03-16']]],\n   [['2024-03-08', '2024-03-16'], ['2024-03-15', None]]),\n  ('misaligned override',\n   ['2024-04-01', 3, 5, '2024-04-02', 3, [['2024-04-02', None], ['2024-04-04', '2024-04-30']]],\n   [['2024-04-05', '2024-04-30']]),\n  ('last wins',\n   ['2024-05-01', 2, 4, '2024-05-02', 2, [['2024-05-03', '2024-05-20'], ['2024-05-03', '2024-05-21']]],\n   [['2024-05-04', '2024-05-21']]),\n  ('moved forward past neighbour',\n   ['2024-06-01',\n    1,\n    5,\n    '2024-06-11',\n    1,\n    [['2024-06-01', '2024-06-30'], ['2024-06-03', None], ['2024-06-04', '2024-06-12']]],\n   [['2024-06-11', '2024-06-30'], ['2024-06-13', None], ['2024-06-14', '2024-06-12']]),\n  ('earlier-moved target',\n   ['2024-07-10', 7, 3, '2024-07-12', 7, [['2024-07-17', '2024-07-01']]],\n   [['2024-07-19', '2024-07-01']])],\n [('shrinking interval',\n   ['2024-03-01', 14, 5, '2024-03-01', 7, [['2024-03-29', None], ['2024-03-15', '2024-03-16']]],\n   [['2024-03-08', '2024-03-16'], ['2024-03-15', None]]),\n  ('misaligned override',\n   ['2024-04-01', 3, 5, '2024-04-02', 3, [['2024-04-02', None], ['2024-04-04', '2024-04-30']]],\n   [['2024-04-05', '2024-04-30']]),\n  ('last wins',\n   ['2024-05-01', 2, 4, '2024-05-02', 2, [['2024-05-03', '2024-05-20'], ['2024-05-03', '2024-05-21']]],\n   [['2024-05-04', '2024-05-21']]),\n  ('moved forward past neighbour',\n   ['2024-06-01',\n    1,\n    5,\n    '2024-06-11',\n    1,\n    [['2024-06-01', '2024-06-30'], ['2024-06-03', None], ['2024-06-04', '2024-06-12']]],\n   [['2024-06-11', '2024-06-30'], ['2024-06-13', None], ['2024-06-14', '2024-06-12']]),\n  ('earlier-moved target',\n   ['2024-07-10', 7, 3, '2024-07-12', 7, [['2024-07-17', '2024-07-01']]],\n   [['2024-07-19', '2024-07-01']]),\n  ('regression: override before series start',\n   ['2024-01-08', 7, 5, '2024-01-10', 7, [['2024-01-01', None], ['2024-01-15', '2024-01-20']]],\n   [['2024-01-17', '2024-01-20']]),\n  ('interval change',\n   ['2024-01-01', 7, 6, '2024-01-01', 14, [['2024-01-15', '2024-01-16']]],\n   [['2024-01-29', '2024-01-16']])],\n [('last wins',\n   ['2024-05-01', 2, 4, '2024-05-02', 2, [['2024-05-03', '2024-05-20'], ['2024-05-03', '2024-05-21']]],\n   [['2024-05-04', '2024-05-21']]),\n  ('moved forward past neighbour',\n   ['2024-06-01',\n    1,\n    5,\n    '2024-06-11',\n    1,\n    [['2024-06-01', '2024-06-30'], ['2024-06-03', None], ['2024-06-04', '2024-06-12']]],\n   [['2024-06-11', '2024-06-30'], ['2024-06-13', None], ['2024-06-14', '2024-06-12']]),\n  ('earlier-moved target',\n   ['2024-07-10', 7, 3, '2024-07-12', 7, [['2024-07-17', '2024-07-01']]],\n   [['2024-07-19', '2024-07-01']]),\n  ('regression: override before series start',\n   ['2024-01-08', 7, 5, '2024-01-10', 7, [['2024-01-01', None], ['2024-01-15', '2024-01-20']]],\n   [['2024-01-17', '2024-01-20']]),\n  ('interval change',\n   ['2024-01-01', 7, 6, '2024-01-01', 14, [['2024-01-15', '2024-01-16']]],\n   [['2024-01-29', '2024-01-16']]),\n  ('beyond count',\n   ['2024-01-01', 1, 3, '2024-01-02', 1, [['2024-01-05', None], ['2024-01-02', '2024-01-10']]],\n   [['2024-01-03', '2024-01-10']]),\n  ('target becomes new key', ['2024-01-01', 7, 4, '2024-01-02', 7, [['2024-01-08', '2024-01-09']]], []),\n  ('reverse edit order',\n   ['2024-03-01', 1, 10, '2024-03-05', 1, [['2024-03-07', '2024-03-30'], ['2024-03-02', None]]],\n   [['2024-03-06', None], ['2024-03-11', '2024-03-30']])]]\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-override-remap-on-series-change-output-order","generated_at":"2026-09-29T14:49:24.455409+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 output order decision use `sorted(out)`, leaving the other decision sites of the model unchanged.","root_cause":"The re-keyed overrides are returned in insertion order.","sha256":"e6067cc840e2bbd3f193bc4dad3a6df41472dcc4612a78ec54129725d76a08e1","title":"Re-keying instance overrides after a series start or interval change: output order · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.81,"exit_code":1,"observations":[{"actual":[["2024-01-17","2024-01-20"]],"check":"regression: override before series start","expected":[["2024-01-17","2024-01-20"]],"passed":true},{"actual":[["2024-01-29","2024-01-16"]],"check":"interval change","expected":[["2024-01-29","2024-01-16"]],"passed":true},{"actual":[["2024-01-03","2024-01-10"]],"check":"beyond count","expected":[["2024-01-03","2024-01-10"]],"passed":true},{"actual":[],"check":"target becomes new key","expected":[],"passed":true},{"actual":[["2024-01-10","2024-01-08"]],"check":"former no-op now moves","expected":[["2024-01-10","2024-01-08"]],"passed":true},{"actual":[["2024-03-06",null],["2024-03-11","2024-03-30"]],"check":"reverse edit order","expected":[["2024-03-06",null],["2024-03-11","2024-03-30"]],"passed":true},{"actual":[["2024-03-15",null],["2024-03-08","2024-03-16"]],"check":"shrinking interval","expected":[["2024-03-08","2024-03-16"],["2024-03-15",null]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: override before series start\", \"actual\": [[\"2024-01-17\", \"2024-01-20\"]], \"expected\": [[\"2024-01-17\", \"2024-01-20\"]], \"passed\": true}, {\"check\": \"interval change\", \"actual\": [[\"2024-01-29\", \"2024-01-16\"]], \"expected\": [[\"2024-01-29\", \"2024-01-16\"]], \"passed\": true}, {\"check\": \"beyond count\", \"actual\": [[\"2024-01-03\", \"2024-01-10\"]], \"expected\": [[\"2024-01-03\", \"2024-01-10\"]], \"passed\": true}, {\"check\": \"target becomes new key\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"former no-op now moves\", \"actual\": [[\"2024-01-10\", \"2024-01-08\"]], \"expected\": [[\"2024-01-10\", \"2024-01-08\"]], \"passed\": true}, {\"check\": \"reverse edit order\", \"actual\": [[\"2024-03-06\", null], [\"2024-03-11\", \"2024-03-30\"]], \"expected\": [[\"2024-03-06\", null], [\"2024-03-11\", \"2024-03-30\"]], \"passed\": true}, {\"check\": \"shrinking interval\", \"actual\": [[\"2024-03-15\", null], [\"2024-03-08\", \"2024-03-16\"]], \"expected\": [[\"2024-03-08\", \"2024-03-16\"], [\"2024-03-15\", null]], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.436,"exit_code":1,"observations":[{"actual":[["2024-01-17","2024-01-20"]],"check":"regression: override before series start","expected":[["2024-01-17","2024-01-20"]],"passed":true},{"actual":[["2024-01-29","2024-01-16"]],"check":"interval change","expected":[["2024-01-29","2024-01-16"]],"passed":true},{"actual":[["2024-01-03","2024-01-10"]],"check":"beyond count","expected":[["2024-01-03","2024-01-10"]],"passed":true},{"actual":[],"check":"target becomes new key","expected":[],"passed":true},{"actual":[["2024-01-10","2024-01-08"]],"check":"former no-op now moves","expected":[["2024-01-10","2024-01-08"]],"passed":true},{"actual":[["2024-03-11","2024-03-30"],["2024-03-06",null]],"check":"reverse edit order","expected":[["2024-03-06",null],["2024-03-11","2024-03-30"]],"passed":false},{"actual":[["2024-03-15",null],["2024-03-08","2024-03-16"]],"check":"shrinking interval","expected":[["2024-03-08","2024-03-16"],["2024-03-15",null]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: override before series start\", \"actual\": [[\"2024-01-17\", \"2024-01-20\"]], \"expected\": [[\"2024-01-17\", \"2024-01-20\"]], \"passed\": true}, {\"check\": \"interval change\", \"actual\": [[\"2024-01-29\", \"2024-01-16\"]], \"expected\": [[\"2024-01-29\", \"2024-01-16\"]], \"passed\": true}, {\"check\": \"beyond count\", \"actual\": [[\"2024-01-03\", \"2024-01-10\"]], \"expected\": [[\"2024-01-03\", \"2024-01-10\"]], \"passed\": true}, {\"check\": \"target becomes new key\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"former no-op now moves\", \"actual\": [[\"2024-01-10\", \"2024-01-08\"]], \"expected\": [[\"2024-01-10\", \"2024-01-08\"]], \"passed\": true}, {\"check\": \"reverse edit order\", \"actual\": [[\"2024-03-11\", \"2024-03-30\"], [\"2024-03-06\", null]], \"expected\": [[\"2024-03-06\", null], [\"2024-03-11\", \"2024-03-30\"]], \"passed\": false}, {\"check\": \"shrinking interval\", \"actual\": [[\"2024-03-15\", null], [\"2024-03-08\", \"2024-03-16\"]], \"expected\": [[\"2024-03-08\", \"2024-03-16\"], [\"2024-03-15\", null]], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.751,"exit_code":0,"observations":[{"actual":[["2024-01-17","2024-01-20"]],"check":"regression: override before series start","expected":[["2024-01-17","2024-01-20"]],"passed":true},{"actual":[["2024-01-29","2024-01-16"]],"check":"interval change","expected":[["2024-01-29","2024-01-16"]],"passed":true},{"actual":[["2024-01-03","2024-01-10"]],"check":"beyond count","expected":[["2024-01-03","2024-01-10"]],"passed":true},{"actual":[],"check":"target becomes new key","expected":[],"passed":true},{"actual":[["2024-01-10","2024-01-08"]],"check":"former no-op now moves","expected":[["2024-01-10","2024-01-08"]],"passed":true},{"actual":[["2024-03-06",null],["2024-03-11","2024-03-30"]],"check":"reverse edit order","expected":[["2024-03-06",null],["2024-03-11","2024-03-30"]],"passed":true},{"actual":[["2024-03-08","2024-03-16"],["2024-03-15",null]],"check":"shrinking interval","expected":[["2024-03-08","2024-03-16"],["2024-03-15",null]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: override before series start\", \"actual\": [[\"2024-01-17\", \"2024-01-20\"]], \"expected\": [[\"2024-01-17\", \"2024-01-20\"]], \"passed\": true}, {\"check\": \"interval change\", \"actual\": [[\"2024-01-29\", \"2024-01-16\"]], \"expected\": [[\"2024-01-29\", \"2024-01-16\"]], \"passed\": true}, {\"check\": \"beyond count\", \"actual\": [[\"2024-01-03\", \"2024-01-10\"]], \"expected\": [[\"2024-01-03\", \"2024-01-10\"]], \"passed\": true}, {\"check\": \"target becomes new key\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"former no-op now moves\", \"actual\": [[\"2024-01-10\", \"2024-01-08\"]], \"expected\": [[\"2024-01-10\", \"2024-01-08\"]], \"passed\": true}, {\"check\": \"reverse edit order\", \"actual\": [[\"2024-03-06\", null], [\"2024-03-11\", \"2024-03-30\"]], \"expected\": [[\"2024-03-06\", null], [\"2024-03-11\", \"2024-03-30\"]], \"passed\": true}, {\"check\": \"shrinking interval\", \"actual\": [[\"2024-03-08\", \"2024-03-16\"], [\"2024-03-15\", null]], \"expected\": [[\"2024-03-08\", \"2024-03-16\"], [\"2024-03-15\", null]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}