{"abstract":"Two days off between shifts looks like a short rest, and overlapping shifts disappear.","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":"Reducing modulo a week still turns overlaps into large positive gaps.","family":"w2-shift-rostering-labor-rules-minimum-rest-between-shifts-clock-wrap-gap","id":"FA-93846","implementations":{"attempt":{"sha256":"71862324394abced47a37e5a2eef6a4ff2ff6da955baab013474538dc3fe31a7","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) % 10080\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 e > 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: clock wrap gap 1', [[['ana', 0, 900], ['ana', 100, 300], ['ana', 600, 800]], '11:00'],\n   [['ana', 0, 1, 'overlap'], ['ana', 0, 2, 'overlap']]),\n  ('regression variant: clock wrap gap 2',\n   [[['ana', 1320, 1680], ['chi', 2579, 2939], ['dev', 2570, 2810], ['ana', 2311, 2911], ['ana', 3572, 3932],\n     ['chi', 0, 720], ['dev', 2000, 2600], ['chi', 1350, 1950], ['ana', 3812, 4412]],\n    '12:00'],\n   [['ana', 0, 3, 'short_rest'], ['ana', 3, 4, 'short_rest'], ['ana', 4, 8, 'overlap'],\n    ['chi', 5, 7, 'short_rest'], ['chi', 7, 1, 'short_rest'], ['dev', 6, 2, 'overlap']]),\n  ('partial repair guard 3',\n   [[['dev', 2101, 2821], ['ana', 300, 1020], ['chi', 2000, 2720], ['dev', 300, 780], ['dev', 1411, 1771],\n     ['dev', 1741, 2221], ['chi', 1940, 2420], ['ana', 2320, 3040], ['ana', 1720, 2440]],\n    '10:30'],\n   [['ana', 8, 7, 'overlap'], ['chi', 6, 2, 'overlap'], ['dev', 4, 5, 'overlap'], ['dev', 5, 0, 'overlap']]),\n  ('boundary control 4', [[['ana', 0, 480], ['ana', 1139, 1620]], '11:00'], [['ana', 0, 1, 'short_rest']]),\n  ('normal control 5', [[['chi', 2010, 2490], ['chi', 1320, 2040]], '09:45'], [['chi', 1, 0, 'overlap']]),\n  ('normal control 6',\n   [[['ana', 3401, 3881], ['dev', 1680, 1920], ['dev', 1320, 1800], ['ana', 2341, 2701], ['ana', 1320, 1680],\n     ['chi', 1589, 2309], ['chi', 3209, 3809], ['ana', 4512, 4752], ['chi', 300, 1020], ['dev', 2551, 2911],\n     ['chi', 1649, 2129]],\n    '11:00'],\n   [['ana', 0, 7, 'short_rest'], ['chi', 8, 5, 'short_rest'], ['chi', 5, 10, 'overlap'],\n    ['dev', 2, 1, 'overlap'], ['dev', 1, 9, 'short_rest']]),\n  ('normal control 7',\n   [[['ben', 1320, 1560], ['dev', 1320, 1800], ['dev', 4980, 5460], ['dev', 3800, 4280], ['ben', 2190, 2670]],\n    '11:00'],\n   [['ben', 0, 4, 'short_rest']]),\n  ('normal control 8',\n   [[['ben', 2380, 3100], ['chi', 300, 1020], ['chi', 2821, 3301], ['ana', 2000, 2480], ['ben', 1320, 1680],\n     ['chi', 1681, 1921], ['ana', 2480, 3080]],\n    '10:31'],\n   [['ana', 3, 6, 'short_rest']])],\n [('regression: clock wrap gap 1', [[['ben', 0, 480], ['ben', 3400, 3800]], '11:00'], []),\n  ('regression variant: clock wrap gap 2',\n   [[['chi', 2700, 3180], ['ben', 1380, 1860], ['chi', 1320, 1800], ['chi', 3150, 3750], ['ben', 0, 480],\n     ['chi', 5750, 5990]],\n    '10:30'],\n   [['chi', 0, 3, 'overlap']]),\n  ('partial repair guard 3',\n   [[['ana', 1380, 1620], ['dev', 3420, 3660], ['ana', 3241, 3841], ['ana', 2220, 2580], ['ben', 4841, 5201],\n     ['ana', 300, 780], ['ben', 3460, 4180], ['ben', 1320, 1800], ['dev', 1320, 1920], ['dev', 3540, 4260],\n     ['ben', 2500, 2860]],\n    '10:30'],\n   [['ana', 5, 0, 'short_rest'], ['ana', 0, 3, 'short_rest'], ['ben', 10, 6, 'short_rest'],\n    ['dev', 1, 9, 'overlap']]),\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   [[['ana', 1940, 2180], ['ana', 6040, 6760], ['ana', 2000, 2480], ['ana', 3680, 4040]], '12:00'],\n   [['ana', 0, 2, 'overlap']]),\n  ('normal control 7', [[['chi', 300, 900], ['chi', 870, 1230], ['chi', 3230, 3710]], '10:31'],\n   [['chi', 0, 1, 'overlap']]),\n  ('normal control 8',\n   [[['chi', 2251, 2731], ['ben', 2940, 3540], ['ben', 4171, 4411], ['chi', 1320, 1680], ['chi', 1260, 1620],\n     ['ben', 1320, 2040]],\n    '09:45'],\n   [['chi', 4, 3, 'overlap'], ['chi', 3, 0, 'short_rest']])],\n [('regression: clock wrap gap 1', [[['ana', 4760, 5480], ['ana', 300, 660], ['ana', 2660, 3260]], '10:31'],\n   []),\n  ('regression variant: clock wrap gap 2',\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  ('partial repair guard 3',\n   [[['dev', 1420, 2020], ['ben', 3111, 3591], ['chi', 1320, 1680], ['chi', 480, 720], ['dev', 0, 720],\n     ['chi', 0, 600], ['ben', 2000, 2480], ['ben', 3051, 3771], ['dev', 2651, 3251], ['chi', 2280, 2760]],\n    '09:45'],\n   [['ben', 6, 7, 'short_rest'], ['ben', 7, 1, 'overlap'], ['chi', 5, 3, '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   [[['ana', 0, 600], ['ben', 300, 900], ['chi', 5400, 6000], ['chi', 6600, 7200], ['ben', 2900, 3500],\n     ['chi', 2000, 2600], ['chi', 4100, 4700], ['ben', 4131, 4371], ['ana', 480, 1200]],\n    '10:30'],\n   [['ana', 0, 8, 'overlap'], ['chi', 2, 3, 'short_rest']]),\n  ('normal control 7',\n   [[['ben', 1800, 2280], ['chi', 2069, 2549], ['chi', 0, 480], ['ben', 300, 900], ['chi', 1080, 1440]],\n    '11:00'],\n   [['chi', 2, 4, 'short_rest'], ['chi', 4, 1, 'short_rest']]),\n  ('normal control 8',\n   [[['chi', 2000, 2240], ['ben', 1261, 1741], ['chi', 2840, 3440], ['ben', 0, 600], ['ana', 1021, 1381],\n     ['ben', 2641, 3361], ['ana', 0, 360]],\n    '10:31'],\n   [['chi', 0, 2, 'short_rest']])],\n [('regression: clock wrap gap 1',\n   [[['ana', 4741, 5101], ['dev', 1940, 2300], ['ben', 3719, 3959], ['ben', 2999, 3719], ['ben', 2549, 3029],\n     ['ben', 1320, 1920], ['ana', 2220, 2940], ['ana', 0, 720], ['dev', 2000, 2360], ['ana', 3601, 3841]],\n    '11:00'],\n   [['ben', 5, 4, 'short_rest'], ['ben', 4, 3, 'overlap'], ['ben', 3, 2, 'short_rest'],\n    ['dev', 1, 8, 'overlap']]),\n  ('regression variant: clock wrap gap 2',\n   [[['chi', 2480, 2720], ['chi', 2000, 2600], ['chi', 4720, 5080], ['chi', 5740, 5980]], '09:45'],\n   [['chi', 1, 0, 'overlap']]),\n  ('boundary control 3', [[['ben', 0, 480], ['ben', 3400, 3800]], '11:00'], []),\n  ('boundary control 4', [[['ana', 0, 900], ['ana', 100, 300], ['ana', 600, 800]], '11:00'],\n   [['ana', 0, 1, 'overlap'], ['ana', 0, 2, 'overlap']]),\n  ('normal control 5',\n   [[['chi', 3180, 3780], ['dev', 1320, 1680], ['dev', 1560, 2040], ['dev', 5340, 5580], ['chi', 1320, 1680],\n     ['dev', 4040, 4640]],\n    '09:45'],\n   [['dev', 1, 2, 'overlap']]),\n  ('normal control 6',\n   [[['chi', 1620, 2340], ['chi', 0, 360], ['dev', 2000, 2600], ['chi', 2971, 3451], ['ben', 2251, 2971],\n     ['ben', 1110, 1590], ['dev', 5760, 6240], ['dev', 3229, 3709], ['chi', 1260, 1740], ['dev', 4409, 5129],\n     ['ben', 0, 480]],\n    '12:00'],\n   [['ben', 10, 5, 'short_rest'], ['ben', 5, 4, 'short_rest'], ['chi', 8, 0, 'overlap'],\n    ['chi', 0, 3, 'short_rest'], ['dev', 2, 7, 'short_rest'], ['dev', 7, 9, 'short_rest'],\n    ['dev', 9, 6, 'short_rest']]),\n  ('normal control 7',\n   [[['dev', 2460, 2700], ['dev', 2700, 3300], ['chi', 6549, 6909], ['dev', 0, 480], ['chi', 2960, 3320],\n     ['chi', 2000, 2360], ['dev', 1110, 1830], ['chi', 3949, 4549]],\n    '11:00'],\n   [['chi', 5, 4, 'short_rest'], ['chi', 4, 7, 'short_rest'], ['dev', 3, 6, 'short_rest'],\n    ['dev', 6, 0, 'short_rest'], ['dev', 0, 1, 'short_rest']]),\n  ('normal control 8', [[['chi', 1351, 1831], ['chi', 0, 720]], '09:45'], [])],\n [('regression: clock wrap gap 1',\n   [[['ana', 1940, 2180], ['ana', 6040, 6760], ['ana', 2000, 2480], ['ana', 3680, 4040]], '12:00'],\n   [['ana', 0, 2, 'overlap']]),\n  ('regression variant: clock wrap gap 2',\n   [[['chi', 1620, 2340], ['chi', 0, 360], ['dev', 2000, 2600], ['chi', 2971, 3451], ['ben', 2251, 2971],\n     ['ben', 1110, 1590], ['dev', 5760, 6240], ['dev', 3229, 3709], ['chi', 1260, 1740], ['dev', 4409, 5129],\n     ['ben', 0, 480]],\n    '12:00'],\n   [['ben', 10, 5, 'short_rest'], ['ben', 5, 4, 'short_rest'], ['chi', 8, 0, 'overlap'],\n    ['chi', 0, 3, 'short_rest'], ['dev', 2, 7, 'short_rest'], ['dev', 7, 9, 'short_rest'],\n    ['dev', 9, 6, 'short_rest']]),\n  ('partial repair guard 3',\n   [[['chi', 1940, 2420], ['ana', 1320, 1680], ['ana', 5760, 6480], ['ana', 2340, 2700], ['chi', 2000, 2720],\n     ['chi', 3051, 3771], ['ana', 4700, 5060]],\n    '11:00'],\n   [['chi', 0, 4, 'overlap'], ['chi', 4, 5, 'short_rest']]),\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',\n   [[['chi', 3540, 3780], ['chi', 1320, 1560], ['chi', 4411, 4651], ['chi', 2189, 2909]], '10:30'],\n   [['chi', 1, 3, 'short_rest']]),\n  ('normal control 7',\n   [[['dev', 1260, 1860], ['ana', 2551, 2911], ['ana', 1231, 1951], ['ana', 0, 600], ['dev', 0, 600]],\n    '09:45'],\n   []),\n  ('normal control 8',\n   [[['ben', 2380, 3100], ['chi', 300, 1020], ['chi', 2821, 3301], ['ana', 2000, 2480], ['ben', 1320, 1680],\n     ['chi', 1681, 1921], ['ana', 2480, 3080]],\n    '10:31'],\n   [['ana', 3, 6, '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":"bfd8e127cdd64334afbef11a4cf4d1a0c99da7f1b9232efb60a2aa2b178a9ab0","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) % 1440\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 e > 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: clock wrap gap 1', [[['ana', 0, 900], ['ana', 100, 300], ['ana', 600, 800]], '11:00'],\n   [['ana', 0, 1, 'overlap'], ['ana', 0, 2, 'overlap']]),\n  ('regression variant: clock wrap gap 2',\n   [[['ana', 1320, 1680], ['chi', 2579, 2939], ['dev', 2570, 2810], ['ana', 2311, 2911], ['ana', 3572, 3932],\n     ['chi', 0, 720], ['dev', 2000, 2600], ['chi', 1350, 1950], ['ana', 3812, 4412]],\n    '12:00'],\n   [['ana', 0, 3, 'short_rest'], ['ana', 3, 4, 'short_rest'], ['ana', 4, 8, 'overlap'],\n    ['chi', 5, 7, 'short_rest'], ['chi', 7, 1, 'short_rest'], ['dev', 6, 2, 'overlap']]),\n  ('partial repair guard 3',\n   [[['dev', 2101, 2821], ['ana', 300, 1020], ['chi', 2000, 2720], ['dev', 300, 780], ['dev', 1411, 1771],\n     ['dev', 1741, 2221], ['chi', 1940, 2420], ['ana', 2320, 3040], ['ana', 1720, 2440]],\n    '10:30'],\n   [['ana', 8, 7, 'overlap'], ['chi', 6, 2, 'overlap'], ['dev', 4, 5, 'overlap'], ['dev', 5, 0, 'overlap']]),\n  ('boundary control 4', [[['ana', 0, 480], ['ana', 1139, 1620]], '11:00'], [['ana', 0, 1, 'short_rest']]),\n  ('normal control 5', [[['chi', 2010, 2490], ['chi', 1320, 2040]], '09:45'], [['chi', 1, 0, 'overlap']]),\n  ('normal control 6',\n   [[['ana', 3401, 3881], ['dev', 1680, 1920], ['dev', 1320, 1800], ['ana', 2341, 2701], ['ana', 1320, 1680],\n     ['chi', 1589, 2309], ['chi', 3209, 3809], ['ana', 4512, 4752], ['chi', 300, 1020], ['dev', 2551, 2911],\n     ['chi', 1649, 2129]],\n    '11:00'],\n   [['ana', 0, 7, 'short_rest'], ['chi', 8, 5, 'short_rest'], ['chi', 5, 10, 'overlap'],\n    ['dev', 2, 1, 'overlap'], ['dev', 1, 9, 'short_rest']]),\n  ('normal control 7',\n   [[['ben', 1320, 1560], ['dev', 1320, 1800], ['dev', 4980, 5460], ['dev', 3800, 4280], ['ben', 2190, 2670]],\n    '11:00'],\n   [['ben', 0, 4, 'short_rest']]),\n  ('normal control 8',\n   [[['ben', 2380, 3100], ['chi', 300, 1020], ['chi', 2821, 3301], ['ana', 2000, 2480], ['ben', 1320, 1680],\n     ['chi', 1681, 1921], ['ana', 2480, 3080]],\n    '10:31'],\n   [['ana', 3, 6, 'short_rest']])],\n [('regression: clock wrap gap 1', [[['ben', 0, 480], ['ben', 3400, 3800]], '11:00'], []),\n  ('regression variant: clock wrap gap 2',\n   [[['chi', 2700, 3180], ['ben', 1380, 1860], ['chi', 1320, 1800], ['chi', 3150, 3750], ['ben', 0, 480],\n     ['chi', 5750, 5990]],\n    '10:30'],\n   [['chi', 0, 3, 'overlap']]),\n  ('partial repair guard 3',\n   [[['ana', 1380, 1620], ['dev', 3420, 3660], ['ana', 3241, 3841], ['ana', 2220, 2580], ['ben', 4841, 5201],\n     ['ana', 300, 780], ['ben', 3460, 4180], ['ben', 1320, 1800], ['dev', 1320, 1920], ['dev', 3540, 4260],\n     ['ben', 2500, 2860]],\n    '10:30'],\n   [['ana', 5, 0, 'short_rest'], ['ana', 0, 3, 'short_rest'], ['ben', 10, 6, 'short_rest'],\n    ['dev', 1, 9, 'overlap']]),\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   [[['ana', 1940, 2180], ['ana', 6040, 6760], ['ana', 2000, 2480], ['ana', 3680, 4040]], '12:00'],\n   [['ana', 0, 2, 'overlap']]),\n  ('normal control 7', [[['chi', 300, 900], ['chi', 870, 1230], ['chi', 3230, 3710]], '10:31'],\n   [['chi', 0, 1, 'overlap']]),\n  ('normal control 8',\n   [[['chi', 2251, 2731], ['ben', 2940, 3540], ['ben', 4171, 4411], ['chi', 1320, 1680], ['chi', 1260, 1620],\n     ['ben', 1320, 2040]],\n    '09:45'],\n   [['chi', 4, 3, 'overlap'], ['chi', 3, 0, 'short_rest']])],\n [('regression: clock wrap gap 1', [[['ana', 4760, 5480], ['ana', 300, 660], ['ana', 2660, 3260]], '10:31'],\n   []),\n  ('regression variant: clock wrap gap 2',\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  ('partial repair guard 3',\n   [[['dev', 1420, 2020], ['ben', 3111, 3591], ['chi', 1320, 1680], ['chi', 480, 720], ['dev', 0, 720],\n     ['chi', 0, 600], ['ben', 2000, 2480], ['ben', 3051, 3771], ['dev', 2651, 3251], ['chi', 2280, 2760]],\n    '09:45'],\n   [['ben', 6, 7, 'short_rest'], ['ben', 7, 1, 'overlap'], ['chi', 5, 3, '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   [[['ana', 0, 600], ['ben', 300, 900], ['chi', 5400, 6000], ['chi', 6600, 7200], ['ben', 2900, 3500],\n     ['chi', 2000, 2600], ['chi', 4100, 4700], ['ben', 4131, 4371], ['ana', 480, 1200]],\n    '10:30'],\n   [['ana', 0, 8, 'overlap'], ['chi', 2, 3, 'short_rest']]),\n  ('normal control 7',\n   [[['ben', 1800, 2280], ['chi', 2069, 2549], ['chi', 0, 480], ['ben', 300, 900], ['chi', 1080, 1440]],\n    '11:00'],\n   [['chi', 2, 4, 'short_rest'], ['chi', 4, 1, 'short_rest']]),\n  ('normal control 8',\n   [[['chi', 2000, 2240], ['ben', 1261, 1741], ['chi', 2840, 3440], ['ben', 0, 600], ['ana', 1021, 1381],\n     ['ben', 2641, 3361], ['ana', 0, 360]],\n    '10:31'],\n   [['chi', 0, 2, 'short_rest']])],\n [('regression: clock wrap gap 1',\n   [[['ana', 4741, 5101], ['dev', 1940, 2300], ['ben', 3719, 3959], ['ben', 2999, 3719], ['ben', 2549, 3029],\n     ['ben', 1320, 1920], ['ana', 2220, 2940], ['ana', 0, 720], ['dev', 2000, 2360], ['ana', 3601, 3841]],\n    '11:00'],\n   [['ben', 5, 4, 'short_rest'], ['ben', 4, 3, 'overlap'], ['ben', 3, 2, 'short_rest'],\n    ['dev', 1, 8, 'overlap']]),\n  ('regression variant: clock wrap gap 2',\n   [[['chi', 2480, 2720], ['chi', 2000, 2600], ['chi', 4720, 5080], ['chi', 5740, 5980]], '09:45'],\n   [['chi', 1, 0, 'overlap']]),\n  ('boundary control 3', [[['ben', 0, 480], ['ben', 3400, 3800]], '11:00'], []),\n  ('boundary control 4', [[['ana', 0, 900], ['ana', 100, 300], ['ana', 600, 800]], '11:00'],\n   [['ana', 0, 1, 'overlap'], ['ana', 0, 2, 'overlap']]),\n  ('normal control 5',\n   [[['chi', 3180, 3780], ['dev', 1320, 1680], ['dev', 1560, 2040], ['dev', 5340, 5580], ['chi', 1320, 1680],\n     ['dev', 4040, 4640]],\n    '09:45'],\n   [['dev', 1, 2, 'overlap']]),\n  ('normal control 6',\n   [[['chi', 1620, 2340], ['chi', 0, 360], ['dev', 2000, 2600], ['chi', 2971, 3451], ['ben', 2251, 2971],\n     ['ben', 1110, 1590], ['dev', 5760, 6240], ['dev', 3229, 3709], ['chi', 1260, 1740], ['dev', 4409, 5129],\n     ['ben', 0, 480]],\n    '12:00'],\n   [['ben', 10, 5, 'short_rest'], ['ben', 5, 4, 'short_rest'], ['chi', 8, 0, 'overlap'],\n    ['chi', 0, 3, 'short_rest'], ['dev', 2, 7, 'short_rest'], ['dev', 7, 9, 'short_rest'],\n    ['dev', 9, 6, 'short_rest']]),\n  ('normal control 7',\n   [[['dev', 2460, 2700], ['dev', 2700, 3300], ['chi', 6549, 6909], ['dev', 0, 480], ['chi', 2960, 3320],\n     ['chi', 2000, 2360], ['dev', 1110, 1830], ['chi', 3949, 4549]],\n    '11:00'],\n   [['chi', 5, 4, 'short_rest'], ['chi', 4, 7, 'short_rest'], ['dev', 3, 6, 'short_rest'],\n    ['dev', 6, 0, 'short_rest'], ['dev', 0, 1, 'short_rest']]),\n  ('normal control 8', [[['chi', 1351, 1831], ['chi', 0, 720]], '09:45'], [])],\n [('regression: clock wrap gap 1',\n   [[['ana', 1940, 2180], ['ana', 6040, 6760], ['ana', 2000, 2480], ['ana', 3680, 4040]], '12:00'],\n   [['ana', 0, 2, 'overlap']]),\n  ('regression variant: clock wrap gap 2',\n   [[['chi', 1620, 2340], ['chi', 0, 360], ['dev', 2000, 2600], ['chi', 2971, 3451], ['ben', 2251, 2971],\n     ['ben', 1110, 1590], ['dev', 5760, 6240], ['dev', 3229, 3709], ['chi', 1260, 1740], ['dev', 4409, 5129],\n     ['ben', 0, 480]],\n    '12:00'],\n   [['ben', 10, 5, 'short_rest'], ['ben', 5, 4, 'short_rest'], ['chi', 8, 0, 'overlap'],\n    ['chi', 0, 3, 'short_rest'], ['dev', 2, 7, 'short_rest'], ['dev', 7, 9, 'short_rest'],\n    ['dev', 9, 6, 'short_rest']]),\n  ('partial repair guard 3',\n   [[['chi', 1940, 2420], ['ana', 1320, 1680], ['ana', 5760, 6480], ['ana', 2340, 2700], ['chi', 2000, 2720],\n     ['chi', 3051, 3771], ['ana', 4700, 5060]],\n    '11:00'],\n   [['chi', 0, 4, 'overlap'], ['chi', 4, 5, 'short_rest']]),\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',\n   [[['chi', 3540, 3780], ['chi', 1320, 1560], ['chi', 4411, 4651], ['chi', 2189, 2909]], '10:30'],\n   [['chi', 1, 3, 'short_rest']]),\n  ('normal control 7',\n   [[['dev', 1260, 1860], ['ana', 2551, 2911], ['ana', 1231, 1951], ['ana', 0, 600], ['dev', 0, 600]],\n    '09:45'],\n   []),\n  ('normal control 8',\n   [[['ben', 2380, 3100], ['chi', 300, 1020], ['chi', 2821, 3301], ['ana', 2000, 2480], ['ben', 1320, 1680],\n     ['chi', 1681, 1921], ['ana', 2480, 3080]],\n    '10:31'],\n   [['ana', 3, 6, '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-clock-wrap-gap","generated_at":"2026-09-29T14:51:58.841219+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 gap is reduced modulo 1440 as if both times were clock readings on adjacent days.","sha256":"1af8323aa5de2d58fdec1112a9afadeae15b5c0561954d30aa5f12e4b4544ac2","title":"Rest gap computed as wall-clock difference modulo one day · 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":44.242,"exit_code":1,"observations":[{"actual":[],"check":"regression: clock wrap gap 1","expected":[["ana",0,1,"overlap"],["ana",0,2,"overlap"]],"passed":false},{"actual":[["ana",0,3,"short_rest"],["ana",3,4,"short_rest"],["chi",5,7,"short_rest"],["chi",7,1,"short_rest"]],"check":"regression variant: clock wrap gap 2","expected":[["ana",0,3,"short_rest"],["ana",3,4,"short_rest"],["ana",4,8,"overlap"],["chi",5,7,"short_rest"],["chi",7,1,"short_rest"],["dev",6,2,"overlap"]],"passed":false},{"actual":[],"check":"partial repair guard 3","expected":[["ana",8,7,"overlap"],["chi",6,2,"overlap"],["dev",4,5,"overlap"],["dev",5,0,"overlap"]],"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":[["chi",1,0,"overlap"]],"passed":false},{"actual":[["ana",0,7,"short_rest"],["chi",8,5,"short_rest"],["dev",1,9,"short_rest"]],"check":"normal control 6","expected":[["ana",0,7,"short_rest"],["chi",8,5,"short_rest"],["chi",5,10,"overlap"],["dev",2,1,"overlap"],["dev",1,9,"short_rest"]],"passed":false},{"actual":[["ben",0,4,"short_rest"]],"check":"normal control 7","expected":[["ben",0,4,"short_rest"]],"passed":true},{"actual":[["ana",3,6,"short_rest"]],"check":"normal control 8","expected":[["ana",3,6,"short_rest"]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: clock wrap gap 1\", \"actual\": [], \"expected\": [[\"ana\", 0, 1, \"overlap\"], [\"ana\", 0, 2, \"overlap\"]], \"passed\": false}, {\"check\": \"regression variant: clock wrap gap 2\", \"actual\": [[\"ana\", 0, 3, \"short_rest\"], [\"ana\", 3, 4, \"short_rest\"], [\"chi\", 5, 7, \"short_rest\"], [\"chi\", 7, 1, \"short_rest\"]], \"expected\": [[\"ana\", 0, 3, \"short_rest\"], [\"ana\", 3, 4, \"short_rest\"], [\"ana\", 4, 8, \"overlap\"], [\"chi\", 5, 7, \"short_rest\"], [\"chi\", 7, 1, \"short_rest\"], [\"dev\", 6, 2, \"overlap\"]], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [], \"expected\": [[\"ana\", 8, 7, \"overlap\"], [\"chi\", 6, 2, \"overlap\"], [\"dev\", 4, 5, \"overlap\"], [\"dev\", 5, 0, \"overlap\"]], \"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\": [[\"chi\", 1, 0, \"overlap\"]], \"passed\": false}, {\"check\": \"normal control 6\", \"actual\": [[\"ana\", 0, 7, \"short_rest\"], [\"chi\", 8, 5, \"short_rest\"], [\"dev\", 1, 9, \"short_rest\"]], \"expected\": [[\"ana\", 0, 7, \"short_rest\"], [\"chi\", 8, 5, \"short_rest\"], [\"chi\", 5, 10, \"overlap\"], [\"dev\", 2, 1, \"overlap\"], [\"dev\", 1, 9, \"short_rest\"]], \"passed\": false}, {\"check\": \"normal control 7\", \"actual\": [[\"ben\", 0, 4, \"short_rest\"]], \"expected\": [[\"ben\", 0, 4, \"short_rest\"]], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [[\"ana\", 3, 6, \"short_rest\"]], \"expected\": [[\"ana\", 3, 6, \"short_rest\"]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.286,"exit_code":1,"observations":[{"actual":[["ana",0,1,"short_rest"]],"check":"regression: clock wrap gap 1","expected":[["ana",0,1,"overlap"],["ana",0,2,"overlap"]],"passed":false},{"actual":[["ana",0,3,"short_rest"],["ana",3,4,"short_rest"],["chi",5,7,"short_rest"],["chi",7,1,"short_rest"]],"check":"regression variant: clock wrap gap 2","expected":[["ana",0,3,"short_rest"],["ana",3,4,"short_rest"],["ana",4,8,"overlap"],["chi",5,7,"short_rest"],["chi",7,1,"short_rest"],["dev",6,2,"overlap"]],"passed":false},{"actual":[],"check":"partial repair guard 3","expected":[["ana",8,7,"overlap"],["chi",6,2,"overlap"],["dev",4,5,"overlap"],["dev",5,0,"overlap"]],"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":[["chi",1,0,"overlap"]],"passed":false},{"actual":[["ana",0,7,"short_rest"],["chi",8,5,"short_rest"],["dev",1,9,"short_rest"]],"check":"normal control 6","expected":[["ana",0,7,"short_rest"],["chi",8,5,"short_rest"],["chi",5,10,"overlap"],["dev",2,1,"overlap"],["dev",1,9,"short_rest"]],"passed":false},{"actual":[["ben",0,4,"short_rest"],["dev",1,3,"short_rest"]],"check":"normal control 7","expected":[["ben",0,4,"short_rest"]],"passed":false},{"actual":[["ana",3,6,"short_rest"]],"check":"normal control 8","expected":[["ana",3,6,"short_rest"]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: clock wrap gap 1\", \"actual\": [[\"ana\", 0, 1, \"short_rest\"]], \"expected\": [[\"ana\", 0, 1, \"overlap\"], [\"ana\", 0, 2, \"overlap\"]], \"passed\": false}, {\"check\": \"regression variant: clock wrap gap 2\", \"actual\": [[\"ana\", 0, 3, \"short_rest\"], [\"ana\", 3, 4, \"short_rest\"], [\"chi\", 5, 7, \"short_rest\"], [\"chi\", 7, 1, \"short_rest\"]], \"expected\": [[\"ana\", 0, 3, \"short_rest\"], [\"ana\", 3, 4, \"short_rest\"], [\"ana\", 4, 8, \"overlap\"], [\"chi\", 5, 7, \"short_rest\"], [\"chi\", 7, 1, \"short_rest\"], [\"dev\", 6, 2, \"overlap\"]], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [], \"expected\": [[\"ana\", 8, 7, \"overlap\"], [\"chi\", 6, 2, \"overlap\"], [\"dev\", 4, 5, \"overlap\"], [\"dev\", 5, 0, \"overlap\"]], \"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\": [[\"chi\", 1, 0, \"overlap\"]], \"passed\": false}, {\"check\": \"normal control 6\", \"actual\": [[\"ana\", 0, 7, \"short_rest\"], [\"chi\", 8, 5, \"short_rest\"], [\"dev\", 1, 9, \"short_rest\"]], \"expected\": [[\"ana\", 0, 7, \"short_rest\"], [\"chi\", 8, 5, \"short_rest\"], [\"chi\", 5, 10, \"overlap\"], [\"dev\", 2, 1, \"overlap\"], [\"dev\", 1, 9, \"short_rest\"]], \"passed\": false}, {\"check\": \"normal control 7\", \"actual\": [[\"ben\", 0, 4, \"short_rest\"], [\"dev\", 1, 3, \"short_rest\"]], \"expected\": [[\"ben\", 0, 4, \"short_rest\"]], \"passed\": false}, {\"check\": \"normal control 8\", \"actual\": [[\"ana\", 3, 6, \"short_rest\"]], \"expected\": [[\"ana\", 3, 6, \"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."}}