{"abstract":"After a short shift nested inside a long one, later shifts are measured from the short shift's end.","category":"Shift rostering labor rules","checks":8,"contract":"Input shifts as [worker, start, end] absolute minutes and a minimum rest \"HH:MM\". For each worker, walk shifts by start time, comparing each start with the latest end seen so far (and that shift index): a negative gap is an overlap, a gap below the minimum rest is short_rest; exactly the minimum is compliant. Return [worker, earlier index, later index, kind] rows ordered by worker then start.","contract_signature":"shifts, min_rest","evaluation_group":"w2-shift-rostering-labor-rules-minimum-rest-between-shifts","failed_approach":"Advancing only for non-overlapping shifts keeps a stale end when an overlapping shift extends further.","family":"w2-shift-rostering-labor-rules-minimum-rest-between-shifts-latest-end-tracking","id":"FA-93861","implementations":{"attempt":{"sha256":"d94d044a02c443e35757ae56f37d7ba7e38ac7b7dc18c91fdc29148b1f86be6d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(shifts, min_rest):\n    h, m = min_rest.split(':')\n    limit = int(h) * 60 + int(m)\n    by = {}\n    for i, (w, s, e) in enumerate(shifts):\n        by.setdefault(w, []).append((s, e, i))\n    out = []\n    for w in sorted(by):\n        seq = sorted(by[w])\n        prev = None\n        for s, e, i in seq:\n            if prev is not None:\n                pe, pi = prev\n                gap = s - pe\n                if gap < 0:\n                    out.append([w, pi, i, 'overlap'])\n                elif gap < limit:\n                    out.append([w, pi, i, 'short_rest'])\n            if prev is None or s > prev[0]:\n                prev = (e, i)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: latest end tracking 1', [[['ana', 0, 900], ['ana', 100, 300], ['ana', 600, 800]], '11:00'],\n   [['ana', 0, 1, 'overlap'], ['ana', 0, 2, 'overlap']]),\n  ('regression variant: latest end tracking 2',\n   [[['dev', 2000, 2480], ['dev', 4231, 4951], ['ana', 0, 240], ['chi', 1860, 2340], ['dev', 3120, 3600],\n     ['chi', 1260, 1860], ['dev', 1940, 2420], ['ana', 901, 1501], ['chi', 1320, 1680]],\n    '09:45'],\n   [['chi', 5, 8, 'overlap'], ['chi', 5, 3, 'short_rest'], ['dev', 6, 0, 'overlap']]),\n  ('partial repair guard 3',\n   [[['chi', 0, 720], ['ana', 2000, 2360], ['ben', 300, 900], ['chi', 3209, 3569], ['ana', 2990, 3350],\n     ['chi', 720, 1320], ['ana', 5350, 5830], ['chi', 1949, 2309], ['ben', 1600, 2200]],\n    '10:30'],\n   [['chi', 0, 5, 'short_rest'], ['chi', 5, 7, 'short_rest']]),\n  ('boundary control 4', [[['ana', 0, 480], ['ana', 1139, 1620]], '11:00'], [['ana', 0, 1, 'short_rest']]),\n  ('normal control 5',\n   [[['chi', 2000, 2360], ['chi', 2991, 3351], ['ana', 3140, 3500], ['ana', 2000, 2240]], '10:31'], []),\n  ('normal control 6', [[['ben', 3770, 4490], ['ben', 300, 780], ['ben', 1410, 1770]], '09:45'], []),\n  ('normal control 7',\n   [[['dev', 6220, 6700], ['ana', 2000, 2360], ['ben', 1860, 2340], ['ben', 1680, 2040], ['dev', 3500, 4220],\n     ['dev', 2000, 2600], ['ana', 1940, 2420], ['ben', 1620, 1980], ['ben', 1320, 1680]],\n    '10:30'],\n   [['ana', 6, 1, 'overlap'], ['ben', 8, 7, 'overlap'], ['ben', 7, 3, 'overlap'], ['ben', 3, 2, 'overlap']]),\n  ('normal control 8', [[['dev', 0, 240], ['dev', 120, 600], ['dev', 1200, 1920]], '11:00'],\n   [['dev', 0, 1, 'overlap'], ['dev', 1, 2, 'short_rest']])],\n [('regression: latest end tracking 1',\n   [[['ana', 2620, 3220], ['ana', 0, 600], ['ben', 5542, 5902], ['ana', 1300, 2020], ['ben', 3200, 3920],\n     ['ben', 4551, 4911], ['ben', 2000, 2600], ['ana', 0, 600]],\n    '12:00'],\n   [['ana', 1, 7, 'overlap'], ['ana', 1, 3, 'short_rest'], ['ana', 3, 0, 'short_rest'],\n    ['ben', 6, 4, 'short_rest'], ['ben', 4, 5, 'short_rest'], ['ben', 5, 2, 'short_rest']]),\n  ('regression variant: latest end tracking 2',\n   [[['ana', 3820, 4540], ['ben', 2970, 3690], ['chi', 1940, 2420], ['ana', 3760, 4000], ['ana', 300, 900],\n     ['ana', 1600, 2320], ['chi', 2570, 2930], ['ben', 4590, 4830], ['ben', 870, 1470], ['ben', 300, 900],\n     ['chi', 2000, 2240], ['chi', 1880, 2600]],\n    '10:30'],\n   [['ana', 3, 0, 'overlap'], ['ben', 9, 8, 'overlap'], ['chi', 11, 2, 'overlap'], ['chi', 11, 10, 'overlap'],\n    ['chi', 11, 6, 'overlap']]),\n  ('partial repair guard 3',\n   [[['dev', 3000, 3720], ['ana', 2431, 3151], ['ana', 1471, 1831], ['ana', 0, 480], ['ana', 1111, 1471],\n     ['dev', 1320, 1560], ['dev', 1560, 2040], ['dev', 1920, 2400]],\n    '10:31'],\n   [['ana', 4, 2, 'short_rest'], ['ana', 2, 1, 'short_rest'], ['dev', 5, 6, 'short_rest'],\n    ['dev', 6, 7, 'overlap'], ['dev', 7, 0, 'short_rest']]),\n  ('boundary control 4', [[['ben', 0, 480], ['ben', 1110, 1400]], '10:30'], []),\n  ('boundary control 5', [[['ana', 0, 480], ['ana', 480, 960], ['ben', 0, 480]], '10:30'],\n   [['ana', 0, 1, 'short_rest']]),\n  ('normal control 6',\n   [[['dev', 1771, 2011], ['dev', 300, 540], ['ana', 0, 240], ['ana', 2240, 2840], ['dev', 510, 1110]],\n    '10:30'],\n   [['dev', 1, 4, 'overlap']]),\n  ('normal control 7',\n   [[['ben', 1320, 1560], ['ben', 1560, 1920], ['ana', 1741, 2461], ['ana', 901, 1141], ['chi', 2869, 3109],\n     ['chi', 2000, 2240], ['ana', 0, 240]],\n    '12:00'],\n   [['ana', 6, 3, 'short_rest'], ['ana', 3, 2, 'short_rest'], ['ben', 0, 1, 'short_rest'],\n    ['chi', 5, 4, 'short_rest']]),\n  ('normal control 8',\n   [[['ana', 1351, 1831], ['ana', 2461, 2941], ['ana', 2401, 2881], ['ana', 0, 720]], '12:00'],\n   [['ana', 3, 0, 'short_rest'], ['ana', 0, 2, 'short_rest'], ['ana', 2, 1, 'overlap']])],\n [('regression: latest end tracking 1',\n   [[['dev', 2000, 2360], ['ana', 5060, 5540], ['ben', 300, 780], ['dev', 3049, 3769], ['ana', 2000, 2360],\n     ['dev', 1940, 2420], ['ben', 1441, 2041], ['ana', 2960, 3560]],\n    '10:31'],\n   [['ana', 4, 7, 'short_rest'], ['dev', 5, 0, 'overlap'], ['dev', 5, 3, 'short_rest']]),\n  ('regression variant: latest end tracking 2',\n   [[['ana', 1940, 2300], ['ana', 2000, 2360], ['ana', 1880, 2480], ['ana', 2480, 3080]], '10:30'],\n   [['ana', 2, 0, 'overlap'], ['ana', 2, 1, 'overlap'], ['ana', 2, 3, 'short_rest']]),\n  ('partial repair guard 3',\n   [[['chi', 2360, 2720], ['ben', 991, 1711], ['ben', 0, 360], ['chi', 2000, 2480], ['dev', 780, 1500],\n     ['dev', 3500, 3860], ['ben', 0, 600], ['dev', 300, 900], ['dev', 4520, 5000]],\n    '11:00'],\n   [['ben', 2, 6, 'overlap'], ['ben', 6, 1, 'short_rest'], ['chi', 3, 0, 'overlap'],\n    ['dev', 7, 4, 'overlap']]),\n  ('boundary control 4', [[['ana', 1200, 1680], ['ana', 0, 480]], '11:00'], []),\n  ('boundary control 5', [[['ana', 0, 480], ['ana', 1140, 1620]], '11:00'], []),\n  ('normal control 6',\n   [[['ben', 1180, 1540], ['ben', 2231, 2711], ['ana', 2360, 2720], ['ben', 0, 480], ['ben', 1120, 1600],\n     ['ana', 2000, 2360]],\n    '10:31'],\n   [['ana', 5, 2, 'short_rest'], ['ben', 4, 0, 'overlap']]),\n  ('normal control 7',\n   [[['ana', 2620, 3220], ['ana', 0, 600], ['ben', 5542, 5902], ['ana', 1300, 2020], ['ben', 3200, 3920],\n     ['ben', 4551, 4911], ['ben', 2000, 2600], ['ana', 0, 600]],\n    '12:00'],\n   [['ana', 1, 7, 'overlap'], ['ana', 1, 3, 'short_rest'], ['ana', 3, 0, 'short_rest'],\n    ['ben', 6, 4, 'short_rest'], ['ben', 4, 5, 'short_rest'], ['ben', 5, 2, 'short_rest']]),\n  ('normal control 8',\n   [[['ana', 2000, 2600], ['ben', 4821, 5421], ['ana', 2600, 2960], ['chi', 1800, 2160], ['ben', 4581, 4821],\n     ['ben', 3231, 3951], ['chi', 1320, 1800], ['ana', 3860, 4460], ['ben', 2000, 2600]],\n    '11:00'],\n   [['ana', 0, 2, 'short_rest'], ['ben', 8, 5, 'short_rest'], ['ben', 5, 4, 'short_rest'],\n    ['ben', 4, 1, 'short_rest'], ['chi', 6, 3, 'short_rest']])],\n [('regression: latest end tracking 1',\n   [[['ana', 0, 600], ['chi', 1300, 2020], ['ana', 510, 1110], ['ana', 990, 1350], ['chi', 2650, 2890],\n     ['ana', 570, 1050], ['ben', 1320, 1800], ['chi', 0, 600], ['ben', 0, 360], ['ben', 240, 720],\n     ['ben', 2429, 3029]],\n    '11:00'],\n   [['ana', 0, 2, 'overlap'], ['ana', 2, 5, 'overlap'], ['ana', 2, 3, 'overlap'], ['ben', 8, 9, 'overlap'],\n    ['ben', 9, 6, 'short_rest'], ['ben', 6, 10, 'short_rest'], ['chi', 1, 4, 'short_rest']]),\n  ('regression variant: latest end tracking 2',\n   [[['ana', 2730, 3330], ['dev', 0, 360], ['ana', 1620, 2100], ['ben', 3380, 3620], ['dev', 1690, 2290],\n     ['dev', 270, 990], ['ben', 0, 240], ['ben', 3260, 3500], ['ben', 900, 1260], ['ana', 300, 1020],\n     ['dev', 330, 810]],\n    '12:00'],\n   [['ana', 9, 2, 'short_rest'], ['ana', 2, 0, 'short_rest'], ['ben', 6, 8, 'short_rest'],\n    ['ben', 7, 3, 'overlap'], ['dev', 1, 5, 'overlap'], ['dev', 5, 10, 'overlap'],\n    ['dev', 5, 4, 'short_rest']]),\n  ('partial repair guard 3',\n   [[['ana', 300, 660], ['dev', 1270, 1510], ['dev', 940, 1300], ['dev', 0, 240], ['ben', 2000, 2600],\n     ['ana', 630, 870], ['ana', 1499, 1739], ['dev', 2110, 2470], ['ben', 3261, 3741]],\n    '10:31'],\n   [['ana', 0, 5, 'overlap'], ['ana', 5, 6, 'short_rest'], ['dev', 2, 1, 'overlap'],\n    ['dev', 1, 7, 'short_rest']]),\n  ('boundary control 4', [[['ben', 0, 480], ['ben', 3400, 3800]], '11:00'], []),\n  ('boundary control 5', [[['ana', 0, 900], ['ana', 100, 300], ['ana', 600, 800]], '11:00'],\n   [['ana', 0, 1, 'overlap'], ['ana', 0, 2, 'overlap']]),\n  ('normal control 6',\n   [[['ben', 300, 1020], ['ana', 1351, 2071], ['ana', 0, 720], ['ana', 1291, 2011], ['ana', 1891, 2251],\n     ['ben', 990, 1350]],\n    '09:45'],\n   [['ana', 2, 3, 'short_rest'], ['ana', 3, 1, 'overlap'], ['ana', 1, 4, 'overlap'],\n    ['ben', 0, 5, 'overlap']]),\n  ('normal control 7',\n   [[['chi', 3110, 3830], ['chi', 2000, 2480], ['ana', 3180, 3540], ['ana', 1320, 2040], ['dev', 2000, 2720],\n     ['ana', 2700, 3180], ['dev', 3381, 3981]],\n    '09:45'],\n   [['ana', 5, 2, 'short_rest']]),\n  ('normal control 8',\n   [[['ana', 1940, 2180], ['ana', 6040, 6760], ['ana', 2000, 2480], ['ana', 3680, 4040]], '12:00'],\n   [['ana', 0, 2, 'overlap']])],\n [('regression: latest end tracking 1',\n   [[['ana', 3820, 4540], ['ben', 2970, 3690], ['chi', 1940, 2420], ['ana', 3760, 4000], ['ana', 300, 900],\n     ['ana', 1600, 2320], ['chi', 2570, 2930], ['ben', 4590, 4830], ['ben', 870, 1470], ['ben', 300, 900],\n     ['chi', 2000, 2240], ['chi', 1880, 2600]],\n    '10:30'],\n   [['ana', 3, 0, 'overlap'], ['ben', 9, 8, 'overlap'], ['chi', 11, 2, 'overlap'], ['chi', 11, 10, 'overlap'],\n    ['chi', 11, 6, 'overlap']]),\n  ('regression variant: latest end tracking 2',\n   [[['ana', 3490, 3730], ['dev', 1200, 1680], ['ana', 2550, 2790], ['ben', 2480, 2720], ['dev', 1260, 1500],\n     ['ana', 1170, 1650], ['ben', 3381, 3861], ['ben', 3861, 4341], ['ana', 300, 540], ['ben', 0, 480],\n     ['dev', 1320, 1560]],\n    '09:45'],\n   [['ben', 6, 7, 'short_rest'], ['dev', 1, 4, 'overlap'], ['dev', 1, 10, 'overlap']]),\n  ('partial repair guard 3',\n   [[['ana', 3390, 3870], ['dev', 300, 1020], ['ana', 0, 720], ['ana', 2790, 3390], ['ana', 2220, 2820],\n     ['dev', 240, 840]],\n    '12:00'],\n   [['ana', 4, 3, 'overlap'], ['ana', 3, 0, 'short_rest'], ['dev', 5, 1, 'overlap']]),\n  ('boundary control 4', [[['ana', 0, 480], ['ana', 1139, 1620]], '11:00'], [['ana', 0, 1, 'short_rest']]),\n  ('boundary control 5', [[['ben', 0, 480], ['ben', 1110, 1400]], '10:30'], []),\n  ('normal control 6', [[['ana', 3440, 4160], ['ana', 2000, 2240], ['ana', 2240, 2840]], '11:00'],\n   [['ana', 1, 2, 'short_rest'], ['ana', 2, 0, 'short_rest']]),\n  ('normal control 7',\n   [[['dev', 6220, 6700], ['ana', 2000, 2360], ['ben', 1860, 2340], ['ben', 1680, 2040], ['dev', 3500, 4220],\n     ['dev', 2000, 2600], ['ana', 1940, 2420], ['ben', 1620, 1980], ['ben', 1320, 1680]],\n    '10:30'],\n   [['ana', 6, 1, 'overlap'], ['ben', 8, 7, 'overlap'], ['ben', 7, 3, 'overlap'], ['ben', 3, 2, 'overlap']]),\n  ('normal control 8',\n   [[['dev', 1320, 1800], ['ana', 2690, 3410], ['chi', 3440, 4040], ['dev', 4720, 5200], ['chi', 4040, 4640],\n     ['ana', 2000, 2720], ['chi', 2000, 2600], ['dev', 2500, 3220], ['chi', 2600, 2840]],\n    '10:30'],\n   [['ana', 5, 1, 'overlap'], ['chi', 6, 8, 'short_rest'], ['chi', 8, 2, 'short_rest'],\n    ['chi', 2, 4, 'short_rest']])]]\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":"0ddbff4164b095ddc38b1972e8a1e5390cc1dd54abffa1e937aeb83d24288c31","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(shifts, min_rest):\n    h, m = min_rest.split(':')\n    limit = int(h) * 60 + int(m)\n    by = {}\n    for i, (w, s, e) in enumerate(shifts):\n        by.setdefault(w, []).append((s, e, i))\n    out = []\n    for w in sorted(by):\n        seq = sorted(by[w])\n        prev = None\n        for s, e, i in seq:\n            if prev is not None:\n                pe, pi = prev\n                gap = s - pe\n                if gap < 0:\n                    out.append([w, pi, i, 'overlap'])\n                elif gap < limit:\n                    out.append([w, pi, i, 'short_rest'])\n            if True:\n                prev = (e, i)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: latest end tracking 1', [[['ana', 0, 900], ['ana', 100, 300], ['ana', 600, 800]], '11:00'],\n   [['ana', 0, 1, 'overlap'], ['ana', 0, 2, 'overlap']]),\n  ('regression variant: latest end tracking 2',\n   [[['dev', 2000, 2480], ['dev', 4231, 4951], ['ana', 0, 240], ['chi', 1860, 2340], ['dev', 3120, 3600],\n     ['chi', 1260, 1860], ['dev', 1940, 2420], ['ana', 901, 1501], ['chi', 1320, 1680]],\n    '09:45'],\n   [['chi', 5, 8, 'overlap'], ['chi', 5, 3, 'short_rest'], ['dev', 6, 0, 'overlap']]),\n  ('partial repair guard 3',\n   [[['chi', 0, 720], ['ana', 2000, 2360], ['ben', 300, 900], ['chi', 3209, 3569], ['ana', 2990, 3350],\n     ['chi', 720, 1320], ['ana', 5350, 5830], ['chi', 1949, 2309], ['ben', 1600, 2200]],\n    '10:30'],\n   [['chi', 0, 5, 'short_rest'], ['chi', 5, 7, 'short_rest']]),\n  ('boundary control 4', [[['ana', 0, 480], ['ana', 1139, 1620]], '11:00'], [['ana', 0, 1, 'short_rest']]),\n  ('normal control 5',\n   [[['chi', 2000, 2360], ['chi', 2991, 3351], ['ana', 3140, 3500], ['ana', 2000, 2240]], '10:31'], []),\n  ('normal control 6', [[['ben', 3770, 4490], ['ben', 300, 780], ['ben', 1410, 1770]], '09:45'], []),\n  ('normal control 7',\n   [[['dev', 6220, 6700], ['ana', 2000, 2360], ['ben', 1860, 2340], ['ben', 1680, 2040], ['dev', 3500, 4220],\n     ['dev', 2000, 2600], ['ana', 1940, 2420], ['ben', 1620, 1980], ['ben', 1320, 1680]],\n    '10:30'],\n   [['ana', 6, 1, 'overlap'], ['ben', 8, 7, 'overlap'], ['ben', 7, 3, 'overlap'], ['ben', 3, 2, 'overlap']]),\n  ('normal control 8', [[['dev', 0, 240], ['dev', 120, 600], ['dev', 1200, 1920]], '11:00'],\n   [['dev', 0, 1, 'overlap'], ['dev', 1, 2, 'short_rest']])],\n [('regression: latest end tracking 1',\n   [[['ana', 2620, 3220], ['ana', 0, 600], ['ben', 5542, 5902], ['ana', 1300, 2020], ['ben', 3200, 3920],\n     ['ben', 4551, 4911], ['ben', 2000, 2600], ['ana', 0, 600]],\n    '12:00'],\n   [['ana', 1, 7, 'overlap'], ['ana', 1, 3, 'short_rest'], ['ana', 3, 0, 'short_rest'],\n    ['ben', 6, 4, 'short_rest'], ['ben', 4, 5, 'short_rest'], ['ben', 5, 2, 'short_rest']]),\n  ('regression variant: latest end tracking 2',\n   [[['ana', 3820, 4540], ['ben', 2970, 3690], ['chi', 1940, 2420], ['ana', 3760, 4000], ['ana', 300, 900],\n     ['ana', 1600, 2320], ['chi', 2570, 2930], ['ben', 4590, 4830], ['ben', 870, 1470], ['ben', 300, 900],\n     ['chi', 2000, 2240], ['chi', 1880, 2600]],\n    '10:30'],\n   [['ana', 3, 0, 'overlap'], ['ben', 9, 8, 'overlap'], ['chi', 11, 2, 'overlap'], ['chi', 11, 10, 'overlap'],\n    ['chi', 11, 6, 'overlap']]),\n  ('partial repair guard 3',\n   [[['dev', 3000, 3720], ['ana', 2431, 3151], ['ana', 1471, 1831], ['ana', 0, 480], ['ana', 1111, 1471],\n     ['dev', 1320, 1560], ['dev', 1560, 2040], ['dev', 1920, 2400]],\n    '10:31'],\n   [['ana', 4, 2, 'short_rest'], ['ana', 2, 1, 'short_rest'], ['dev', 5, 6, 'short_rest'],\n    ['dev', 6, 7, 'overlap'], ['dev', 7, 0, 'short_rest']]),\n  ('boundary control 4', [[['ben', 0, 480], ['ben', 1110, 1400]], '10:30'], []),\n  ('boundary control 5', [[['ana', 0, 480], ['ana', 480, 960], ['ben', 0, 480]], '10:30'],\n   [['ana', 0, 1, 'short_rest']]),\n  ('normal control 6',\n   [[['dev', 1771, 2011], ['dev', 300, 540], ['ana', 0, 240], ['ana', 2240, 2840], ['dev', 510, 1110]],\n    '10:30'],\n   [['dev', 1, 4, 'overlap']]),\n  ('normal control 7',\n   [[['ben', 1320, 1560], ['ben', 1560, 1920], ['ana', 1741, 2461], ['ana', 901, 1141], ['chi', 2869, 3109],\n     ['chi', 2000, 2240], ['ana', 0, 240]],\n    '12:00'],\n   [['ana', 6, 3, 'short_rest'], ['ana', 3, 2, 'short_rest'], ['ben', 0, 1, 'short_rest'],\n    ['chi', 5, 4, 'short_rest']]),\n  ('normal control 8',\n   [[['ana', 1351, 1831], ['ana', 2461, 2941], ['ana', 2401, 2881], ['ana', 0, 720]], '12:00'],\n   [['ana', 3, 0, 'short_rest'], ['ana', 0, 2, 'short_rest'], ['ana', 2, 1, 'overlap']])],\n [('regression: latest end tracking 1',\n   [[['dev', 2000, 2360], ['ana', 5060, 5540], ['ben', 300, 780], ['dev', 3049, 3769], ['ana', 2000, 2360],\n     ['dev', 1940, 2420], ['ben', 1441, 2041], ['ana', 2960, 3560]],\n    '10:31'],\n   [['ana', 4, 7, 'short_rest'], ['dev', 5, 0, 'overlap'], ['dev', 5, 3, 'short_rest']]),\n  ('regression variant: latest end tracking 2',\n   [[['ana', 1940, 2300], ['ana', 2000, 2360], ['ana', 1880, 2480], ['ana', 2480, 3080]], '10:30'],\n   [['ana', 2, 0, 'overlap'], ['ana', 2, 1, 'overlap'], ['ana', 2, 3, 'short_rest']]),\n  ('partial repair guard 3',\n   [[['chi', 2360, 2720], ['ben', 991, 1711], ['ben', 0, 360], ['chi', 2000, 2480], ['dev', 780, 1500],\n     ['dev', 3500, 3860], ['ben', 0, 600], ['dev', 300, 900], ['dev', 4520, 5000]],\n    '11:00'],\n   [['ben', 2, 6, 'overlap'], ['ben', 6, 1, 'short_rest'], ['chi', 3, 0, 'overlap'],\n    ['dev', 7, 4, 'overlap']]),\n  ('boundary control 4', [[['ana', 1200, 1680], ['ana', 0, 480]], '11:00'], []),\n  ('boundary control 5', [[['ana', 0, 480], ['ana', 1140, 1620]], '11:00'], []),\n  ('normal control 6',\n   [[['ben', 1180, 1540], ['ben', 2231, 2711], ['ana', 2360, 2720], ['ben', 0, 480], ['ben', 1120, 1600],\n     ['ana', 2000, 2360]],\n    '10:31'],\n   [['ana', 5, 2, 'short_rest'], ['ben', 4, 0, 'overlap']]),\n  ('normal control 7',\n   [[['ana', 2620, 3220], ['ana', 0, 600], ['ben', 5542, 5902], ['ana', 1300, 2020], ['ben', 3200, 3920],\n     ['ben', 4551, 4911], ['ben', 2000, 2600], ['ana', 0, 600]],\n    '12:00'],\n   [['ana', 1, 7, 'overlap'], ['ana', 1, 3, 'short_rest'], ['ana', 3, 0, 'short_rest'],\n    ['ben', 6, 4, 'short_rest'], ['ben', 4, 5, 'short_rest'], ['ben', 5, 2, 'short_rest']]),\n  ('normal control 8',\n   [[['ana', 2000, 2600], ['ben', 4821, 5421], ['ana', 2600, 2960], ['chi', 1800, 2160], ['ben', 4581, 4821],\n     ['ben', 3231, 3951], ['chi', 1320, 1800], ['ana', 3860, 4460], ['ben', 2000, 2600]],\n    '11:00'],\n   [['ana', 0, 2, 'short_rest'], ['ben', 8, 5, 'short_rest'], ['ben', 5, 4, 'short_rest'],\n    ['ben', 4, 1, 'short_rest'], ['chi', 6, 3, 'short_rest']])],\n [('regression: latest end tracking 1',\n   [[['ana', 0, 600], ['chi', 1300, 2020], ['ana', 510, 1110], ['ana', 990, 1350], ['chi', 2650, 2890],\n     ['ana', 570, 1050], ['ben', 1320, 1800], ['chi', 0, 600], ['ben', 0, 360], ['ben', 240, 720],\n     ['ben', 2429, 3029]],\n    '11:00'],\n   [['ana', 0, 2, 'overlap'], ['ana', 2, 5, 'overlap'], ['ana', 2, 3, 'overlap'], ['ben', 8, 9, 'overlap'],\n    ['ben', 9, 6, 'short_rest'], ['ben', 6, 10, 'short_rest'], ['chi', 1, 4, 'short_rest']]),\n  ('regression variant: latest end tracking 2',\n   [[['ana', 2730, 3330], ['dev', 0, 360], ['ana', 1620, 2100], ['ben', 3380, 3620], ['dev', 1690, 2290],\n     ['dev', 270, 990], ['ben', 0, 240], ['ben', 3260, 3500], ['ben', 900, 1260], ['ana', 300, 1020],\n     ['dev', 330, 810]],\n    '12:00'],\n   [['ana', 9, 2, 'short_rest'], ['ana', 2, 0, 'short_rest'], ['ben', 6, 8, 'short_rest'],\n    ['ben', 7, 3, 'overlap'], ['dev', 1, 5, 'overlap'], ['dev', 5, 10, 'overlap'],\n    ['dev', 5, 4, 'short_rest']]),\n  ('partial repair guard 3',\n   [[['ana', 300, 660], ['dev', 1270, 1510], ['dev', 940, 1300], ['dev', 0, 240], ['ben', 2000, 2600],\n     ['ana', 630, 870], ['ana', 1499, 1739], ['dev', 2110, 2470], ['ben', 3261, 3741]],\n    '10:31'],\n   [['ana', 0, 5, 'overlap'], ['ana', 5, 6, 'short_rest'], ['dev', 2, 1, 'overlap'],\n    ['dev', 1, 7, 'short_rest']]),\n  ('boundary control 4', [[['ben', 0, 480], ['ben', 3400, 3800]], '11:00'], []),\n  ('boundary control 5', [[['ana', 0, 900], ['ana', 100, 300], ['ana', 600, 800]], '11:00'],\n   [['ana', 0, 1, 'overlap'], ['ana', 0, 2, 'overlap']]),\n  ('normal control 6',\n   [[['ben', 300, 1020], ['ana', 1351, 2071], ['ana', 0, 720], ['ana', 1291, 2011], ['ana', 1891, 2251],\n     ['ben', 990, 1350]],\n    '09:45'],\n   [['ana', 2, 3, 'short_rest'], ['ana', 3, 1, 'overlap'], ['ana', 1, 4, 'overlap'],\n    ['ben', 0, 5, 'overlap']]),\n  ('normal control 7',\n   [[['chi', 3110, 3830], ['chi', 2000, 2480], ['ana', 3180, 3540], ['ana', 1320, 2040], ['dev', 2000, 2720],\n     ['ana', 2700, 3180], ['dev', 3381, 3981]],\n    '09:45'],\n   [['ana', 5, 2, 'short_rest']]),\n  ('normal control 8',\n   [[['ana', 1940, 2180], ['ana', 6040, 6760], ['ana', 2000, 2480], ['ana', 3680, 4040]], '12:00'],\n   [['ana', 0, 2, 'overlap']])],\n [('regression: latest end tracking 1',\n   [[['ana', 3820, 4540], ['ben', 2970, 3690], ['chi', 1940, 2420], ['ana', 3760, 4000], ['ana', 300, 900],\n     ['ana', 1600, 2320], ['chi', 2570, 2930], ['ben', 4590, 4830], ['ben', 870, 1470], ['ben', 300, 900],\n     ['chi', 2000, 2240], ['chi', 1880, 2600]],\n    '10:30'],\n   [['ana', 3, 0, 'overlap'], ['ben', 9, 8, 'overlap'], ['chi', 11, 2, 'overlap'], ['chi', 11, 10, 'overlap'],\n    ['chi', 11, 6, 'overlap']]),\n  ('regression variant: latest end tracking 2',\n   [[['ana', 3490, 3730], ['dev', 1200, 1680], ['ana', 2550, 2790], ['ben', 2480, 2720], ['dev', 1260, 1500],\n     ['ana', 1170, 1650], ['ben', 3381, 3861], ['ben', 3861, 4341], ['ana', 300, 540], ['ben', 0, 480],\n     ['dev', 1320, 1560]],\n    '09:45'],\n   [['ben', 6, 7, 'short_rest'], ['dev', 1, 4, 'overlap'], ['dev', 1, 10, 'overlap']]),\n  ('partial repair guard 3',\n   [[['ana', 3390, 3870], ['dev', 300, 1020], ['ana', 0, 720], ['ana', 2790, 3390], ['ana', 2220, 2820],\n     ['dev', 240, 840]],\n    '12:00'],\n   [['ana', 4, 3, 'overlap'], ['ana', 3, 0, 'short_rest'], ['dev', 5, 1, 'overlap']]),\n  ('boundary control 4', [[['ana', 0, 480], ['ana', 1139, 1620]], '11:00'], [['ana', 0, 1, 'short_rest']]),\n  ('boundary control 5', [[['ben', 0, 480], ['ben', 1110, 1400]], '10:30'], []),\n  ('normal control 6', [[['ana', 3440, 4160], ['ana', 2000, 2240], ['ana', 2240, 2840]], '11:00'],\n   [['ana', 1, 2, 'short_rest'], ['ana', 2, 0, 'short_rest']]),\n  ('normal control 7',\n   [[['dev', 6220, 6700], ['ana', 2000, 2360], ['ben', 1860, 2340], ['ben', 1680, 2040], ['dev', 3500, 4220],\n     ['dev', 2000, 2600], ['ana', 1940, 2420], ['ben', 1620, 1980], ['ben', 1320, 1680]],\n    '10:30'],\n   [['ana', 6, 1, 'overlap'], ['ben', 8, 7, 'overlap'], ['ben', 7, 3, 'overlap'], ['ben', 3, 2, 'overlap']]),\n  ('normal control 8',\n   [[['dev', 1320, 1800], ['ana', 2690, 3410], ['chi', 3440, 4040], ['dev', 4720, 5200], ['chi', 4040, 4640],\n     ['ana', 2000, 2720], ['chi', 2000, 2600], ['dev', 2500, 3220], ['chi', 2600, 2840]],\n    '10:30'],\n   [['ana', 5, 1, 'overlap'], ['chi', 6, 8, 'short_rest'], ['chi', 8, 2, 'short_rest'],\n    ['chi', 2, 4, 'short_rest']])]]\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 toy labor rule for a bounded roster model; it is not legal advice and does not claim conformance with any jurisdiction, award, or collective agreement. 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-shift-rostering-labor-rules-minimum-rest-between-shifts-latest-end-tracking","generated_at":"2026-09-29T14:51:58.973263+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Rest-period validation is the most common roster labor rule; errors either hide fatigue risks or block legal rosters.","root_cause":"The rest reference end is replaced by every shift instead of keeping the latest end seen.","sha256":"5a0881438f7048bead073c912329f957beec3a361f79c0b4b23adc1ba8dc16d0","title":"Rest reference forgets a long enclosing shift · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":42.089,"exit_code":1,"observations":[{"actual":[["ana",0,1,"overlap"],["ana",0,2,"overlap"]],"check":"regression: latest end tracking 1","expected":[["ana",0,1,"overlap"],["ana",0,2,"overlap"]],"passed":true},{"actual":[["chi",5,8,"overlap"],["chi",5,3,"short_rest"],["dev",6,0,"overlap"]],"check":"regression variant: latest end tracking 2","expected":[["chi",5,8,"overlap"],["chi",5,3,"short_rest"],["dev",6,0,"overlap"]],"passed":true},{"actual":[["chi",0,5,"short_rest"]],"check":"partial repair guard 3","expected":[["chi",0,5,"short_rest"],["chi",5,7,"short_rest"]],"passed":false},{"actual":[["ana",0,1,"short_rest"]],"check":"boundary control 4","expected":[["ana",0,1,"short_rest"]],"passed":true},{"actual":[],"check":"normal control 5","expected":[],"passed":true},{"actual":[],"check":"normal control 6","expected":[],"passed":true},{"actual":[["ana",6,1,"overlap"],["ben",8,7,"overlap"],["ben",8,3,"short_rest"],["ben",8,2,"short_rest"]],"check":"normal control 7","expected":[["ana",6,1,"overlap"],["ben",8,7,"overlap"],["ben",7,3,"overlap"],["ben",3,2,"overlap"]],"passed":false},{"actual":[["dev",0,1,"overlap"]],"check":"normal control 8","expected":[["dev",0,1,"overlap"],["dev",1,2,"short_rest"]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: latest end tracking 1\", \"actual\": [[\"ana\", 0, 1, \"overlap\"], [\"ana\", 0, 2, \"overlap\"]], \"expected\": [[\"ana\", 0, 1, \"overlap\"], [\"ana\", 0, 2, \"overlap\"]], \"passed\": true}, {\"check\": \"regression variant: latest end tracking 2\", \"actual\": [[\"chi\", 5, 8, \"overlap\"], [\"chi\", 5, 3, \"short_rest\"], [\"dev\", 6, 0, \"overlap\"]], \"expected\": [[\"chi\", 5, 8, \"overlap\"], [\"chi\", 5, 3, \"short_rest\"], [\"dev\", 6, 0, \"overlap\"]], \"passed\": true}, {\"check\": \"partial repair guard 3\", \"actual\": [[\"chi\", 0, 5, \"short_rest\"]], \"expected\": [[\"chi\", 0, 5, \"short_rest\"], [\"chi\", 5, 7, \"short_rest\"]], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [[\"ana\", 0, 1, \"short_rest\"]], \"expected\": [[\"ana\", 0, 1, \"short_rest\"]], \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": [[\"ana\", 6, 1, \"overlap\"], [\"ben\", 8, 7, \"overlap\"], [\"ben\", 8, 3, \"short_rest\"], [\"ben\", 8, 2, \"short_rest\"]], \"expected\": [[\"ana\", 6, 1, \"overlap\"], [\"ben\", 8, 7, \"overlap\"], [\"ben\", 7, 3, \"overlap\"], [\"ben\", 3, 2, \"overlap\"]], \"passed\": false}, {\"check\": \"normal control 8\", \"actual\": [[\"dev\", 0, 1, \"overlap\"]], \"expected\": [[\"dev\", 0, 1, \"overlap\"], [\"dev\", 1, 2, \"short_rest\"]], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.99,"exit_code":1,"observations":[{"actual":[["ana",0,1,"overlap"],["ana",1,2,"short_rest"]],"check":"regression: latest end tracking 1","expected":[["ana",0,1,"overlap"],["ana",0,2,"overlap"]],"passed":false},{"actual":[["chi",5,8,"overlap"],["chi",8,3,"short_rest"],["dev",6,0,"overlap"]],"check":"regression variant: latest end tracking 2","expected":[["chi",5,8,"overlap"],["chi",5,3,"short_rest"],["dev",6,0,"overlap"]],"passed":false},{"actual":[["chi",0,5,"short_rest"],["chi",5,7,"short_rest"]],"check":"partial repair guard 3","expected":[["chi",0,5,"short_rest"],["chi",5,7,"short_rest"]],"passed":true},{"actual":[["ana",0,1,"short_rest"]],"check":"boundary control 4","expected":[["ana",0,1,"short_rest"]],"passed":true},{"actual":[],"check":"normal control 5","expected":[],"passed":true},{"actual":[],"check":"normal control 6","expected":[],"passed":true},{"actual":[["ana",6,1,"overlap"],["ben",8,7,"overlap"],["ben",7,3,"overlap"],["ben",3,2,"overlap"]],"check":"normal control 7","expected":[["ana",6,1,"overlap"],["ben",8,7,"overlap"],["ben",7,3,"overlap"],["ben",3,2,"overlap"]],"passed":true},{"actual":[["dev",0,1,"overlap"],["dev",1,2,"short_rest"]],"check":"normal control 8","expected":[["dev",0,1,"overlap"],["dev",1,2,"short_rest"]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: latest end tracking 1\", \"actual\": [[\"ana\", 0, 1, \"overlap\"], [\"ana\", 1, 2, \"short_rest\"]], \"expected\": [[\"ana\", 0, 1, \"overlap\"], [\"ana\", 0, 2, \"overlap\"]], \"passed\": false}, {\"check\": \"regression variant: latest end tracking 2\", \"actual\": [[\"chi\", 5, 8, \"overlap\"], [\"chi\", 8, 3, \"short_rest\"], [\"dev\", 6, 0, \"overlap\"]], \"expected\": [[\"chi\", 5, 8, \"overlap\"], [\"chi\", 5, 3, \"short_rest\"], [\"dev\", 6, 0, \"overlap\"]], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [[\"chi\", 0, 5, \"short_rest\"], [\"chi\", 5, 7, \"short_rest\"]], \"expected\": [[\"chi\", 0, 5, \"short_rest\"], [\"chi\", 5, 7, \"short_rest\"]], \"passed\": true}, {\"check\": \"boundary control 4\", \"actual\": [[\"ana\", 0, 1, \"short_rest\"]], \"expected\": [[\"ana\", 0, 1, \"short_rest\"]], \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": [[\"ana\", 6, 1, \"overlap\"], [\"ben\", 8, 7, \"overlap\"], [\"ben\", 7, 3, \"overlap\"], [\"ben\", 3, 2, \"overlap\"]], \"expected\": [[\"ana\", 6, 1, \"overlap\"], [\"ben\", 8, 7, \"overlap\"], [\"ben\", 7, 3, \"overlap\"], [\"ben\", 3, 2, \"overlap\"]], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [[\"dev\", 0, 1, \"overlap\"], [\"dev\", 1, 2, \"short_rest\"]], \"expected\": [[\"dev\", 0, 1, \"overlap\"], [\"dev\", 1, 2, \"short_rest\"]], \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}