FAILURE MAP
← Case archive

FA-93861 / Shift rostering labor rules / Open access

Rest reference forgets a long enclosing shift · case 01

After a short shift nested inside a long one, later shifts are measured from the short shift's end.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The rest reference end is replaced by every shift instead of keeping the latest end seen.

VERIFIED REPAIR

Advance the reference only when the new shift ends later than the current reference.

Unsuccessful approach: Advancing only for non-overlapping shifts keeps a stale end when an overlapping shift extends further.

Case 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.

Why this case matters

Rest-period validation is the most common roster labor rule; errors either hide fatigue risks or block legal rosters.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(shifts, min_rest):
    h, m = min_rest.split(':')
    limit = int(h) * 60 + int(m)
    by = {}
    for i, (w, s, e) in enumerate(shifts):
        by.setdefault(w, []).append((s, e, i))
    out = []
    for w in sorted(by):
        seq = sorted(by[w])
        prev = None
        for s, e, i in seq:
            if prev is not None:
                pe, pi = prev
                gap = s - pe
                if gap < 0:
                    out.append([w, pi, i, 'overlap'])
                elif gap < limit:
                    out.append([w, pi, i, 'short_rest'])
            if True:
                prev = (e, i)
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: latest end tracking 1', [[['ana', 0, 900], ['ana', 100, 300], ['ana', 600, 800]], '11:00'],
   [['ana', 0, 1, 'overlap'], ['ana', 0, 2, 'overlap']]),
  ('regression variant: latest end tracking 2',
   [[['dev', 2000, 2480], ['dev', 4231, 4951], ['ana', 0, 240], ['chi', 1860, 2340], ['dev', 3120, 3600],
     ['chi', 1260, 1860], ['dev', 1940, 2420], ['ana', 901, 1501], ['chi', 1320, 1680]],
    '09:45'],
   [['chi', 5, 8, 'overlap'], ['chi', 5, 3, 'short_rest'], ['dev', 6, 0, 'overlap']]),
  ('partial repair guard 3',
   [[['chi', 0, 720], ['ana', 2000, 2360], ['ben', 300, 900], ['chi', 3209, 3569], ['ana', 2990, 3350],
     ['chi', 720, 1320], ['ana', 5350, 5830], ['chi', 1949, 2309], ['ben', 1600, 2200]],
    '10:30'],
   [['chi', 0, 5, 'short_rest'], ['chi', 5, 7, 'short_rest']]),
  ('boundary control 4', [[['ana', 0, 480], ['ana', 1139, 1620]], '11:00'], [['ana', 0, 1, 'short_rest']]),
  ('normal control 5',
   [[['chi', 2000, 2360], ['chi', 2991, 3351], ['ana', 3140, 3500], ['ana', 2000, 2240]], '10:31'], []),
  ('normal control 6', [[['ben', 3770, 4490], ['ben', 300, 780], ['ben', 1410, 1770]], '09:45'], []),
  ('normal control 7',
   [[['dev', 6220, 6700], ['ana', 2000, 2360], ['ben', 1860, 2340], ['ben', 1680, 2040], ['dev', 3500, 4220],
     ['dev', 2000, 2600], ['ana', 1940, 2420], ['ben', 1620, 1980], ['ben', 1320, 1680]],
    '10:30'],
   [['ana', 6, 1, 'overlap'], ['ben', 8, 7, 'overlap'], ['ben', 7, 3, 'overlap'], ['ben', 3, 2, 'overlap']]),
  ('normal control 8', [[['dev', 0, 240], ['dev', 120, 600], ['dev', 1200, 1920]], '11:00'],
   [['dev', 0, 1, 'overlap'], ['dev', 1, 2, 'short_rest']])],
 [('regression: latest end tracking 1',
   [[['ana', 2620, 3220], ['ana', 0, 600], ['ben', 5542, 5902], ['ana', 1300, 2020], ['ben', 3200, 3920],
     ['ben', 4551, 4911], ['ben', 2000, 2600], ['ana', 0, 600]],
    '12:00'],
   [['ana', 1, 7, 'overlap'], ['ana', 1, 3, 'short_rest'], ['ana', 3, 0, 'short_rest'],
    ['ben', 6, 4, 'short_rest'], ['ben', 4, 5, 'short_rest'], ['ben', 5, 2, 'short_rest']]),
  ('regression variant: latest end tracking 2',
   [[['ana', 3820, 4540], ['ben', 2970, 3690], ['chi', 1940, 2420], ['ana', 3760, 4000], ['ana', 300, 900],
     ['ana', 1600, 2320], ['chi', 2570, 2930], ['ben', 4590, 4830], ['ben', 870, 1470], ['ben', 300, 900],
     ['chi', 2000, 2240], ['chi', 1880, 2600]],
    '10:30'],
   [['ana', 3, 0, 'overlap'], ['ben', 9, 8, 'overlap'], ['chi', 11, 2, 'overlap'], ['chi', 11, 10, 'overlap'],
    ['chi', 11, 6, 'overlap']]),
  ('partial repair guard 3',
   [[['dev', 3000, 3720], ['ana', 2431, 3151], ['ana', 1471, 1831], ['ana', 0, 480], ['ana', 1111, 1471],
     ['dev', 1320, 1560], ['dev', 1560, 2040], ['dev', 1920, 2400]],
    '10:31'],
   [['ana', 4, 2, 'short_rest'], ['ana', 2, 1, 'short_rest'], ['dev', 5, 6, 'short_rest'],
    ['dev', 6, 7, 'overlap'], ['dev', 7, 0, 'short_rest']]),
  ('boundary control 4', [[['ben', 0, 480], ['ben', 1110, 1400]], '10:30'], []),
  ('boundary control 5', [[['ana', 0, 480], ['ana', 480, 960], ['ben', 0, 480]], '10:30'],
   [['ana', 0, 1, 'short_rest']]),
  ('normal control 6',
   [[['dev', 1771, 2011], ['dev', 300, 540], ['ana', 0, 240], ['ana', 2240, 2840], ['dev', 510, 1110]],
    '10:30'],
   [['dev', 1, 4, 'overlap']]),
  ('normal control 7',
   [[['ben', 1320, 1560], ['ben', 1560, 1920], ['ana', 1741, 2461], ['ana', 901, 1141], ['chi', 2869, 3109],
     ['chi', 2000, 2240], ['ana', 0, 240]],
    '12:00'],
   [['ana', 6, 3, 'short_rest'], ['ana', 3, 2, 'short_rest'], ['ben', 0, 1, 'short_rest'],
    ['chi', 5, 4, 'short_rest']]),
  ('normal control 8',
   [[['ana', 1351, 1831], ['ana', 2461, 2941], ['ana', 2401, 2881], ['ana', 0, 720]], '12:00'],
   [['ana', 3, 0, 'short_rest'], ['ana', 0, 2, 'short_rest'], ['ana', 2, 1, 'overlap']])],
 [('regression: latest end tracking 1',
   [[['dev', 2000, 2360], ['ana', 5060, 5540], ['ben', 300, 780], ['dev', 3049, 3769], ['ana', 2000, 2360],
     ['dev', 1940, 2420], ['ben', 1441, 2041], ['ana', 2960, 3560]],
    '10:31'],
   [['ana', 4, 7, 'short_rest'], ['dev', 5, 0, 'overlap'], ['dev', 5, 3, 'short_rest']]),
  ('regression variant: latest end tracking 2',
   [[['ana', 1940, 2300], ['ana', 2000, 2360], ['ana', 1880, 2480], ['ana', 2480, 3080]], '10:30'],
   [['ana', 2, 0, 'overlap'], ['ana', 2, 1, 'overlap'], ['ana', 2, 3, 'short_rest']]),
  ('partial repair guard 3',
   [[['chi', 2360, 2720], ['ben', 991, 1711], ['ben', 0, 360], ['chi', 2000, 2480], ['dev', 780, 1500],
     ['dev', 3500, 3860], ['ben', 0, 600], ['dev', 300, 900], ['dev', 4520, 5000]],
    '11:00'],
   [['ben', 2, 6, 'overlap'], ['ben', 6, 1, 'short_rest'], ['chi', 3, 0, 'overlap'],
    ['dev', 7, 4, 'overlap']]),
  ('boundary control 4', [[['ana', 1200, 1680], ['ana', 0, 480]], '11:00'], []),
  ('boundary control 5', [[['ana', 0, 480], ['ana', 1140, 1620]], '11:00'], []),
  ('normal control 6',
   [[['ben', 1180, 1540], ['ben', 2231, 2711], ['ana', 2360, 2720], ['ben', 0, 480], ['ben', 1120, 1600],
     ['ana', 2000, 2360]],
    '10:31'],
   [['ana', 5, 2, 'short_rest'], ['ben', 4, 0, 'overlap']]),
  ('normal control 7',
   [[['ana', 2620, 3220], ['ana', 0, 600], ['ben', 5542, 5902], ['ana', 1300, 2020], ['ben', 3200, 3920],
     ['ben', 4551, 4911], ['ben', 2000, 2600], ['ana', 0, 600]],
    '12:00'],
   [['ana', 1, 7, 'overlap'], ['ana', 1, 3, 'short_rest'], ['ana', 3, 0, 'short_rest'],
    ['ben', 6, 4, 'short_rest'], ['ben', 4, 5, 'short_rest'], ['ben', 5, 2, 'short_rest']]),
  ('normal control 8',
   [[['ana', 2000, 2600], ['ben', 4821, 5421], ['ana', 2600, 2960], ['chi', 1800, 2160], ['ben', 4581, 4821],
     ['ben', 3231, 3951], ['chi', 1320, 1800], ['ana', 3860, 4460], ['ben', 2000, 2600]],
    '11:00'],
   [['ana', 0, 2, 'short_rest'], ['ben', 8, 5, 'short_rest'], ['ben', 5, 4, 'short_rest'],
    ['ben', 4, 1, 'short_rest'], ['chi', 6, 3, 'short_rest']])],
 [('regression: latest end tracking 1',
   [[['ana', 0, 600], ['chi', 1300, 2020], ['ana', 510, 1110], ['ana', 990, 1350], ['chi', 2650, 2890],
     ['ana', 570, 1050], ['ben', 1320, 1800], ['chi', 0, 600], ['ben', 0, 360], ['ben', 240, 720],
     ['ben', 2429, 3029]],
    '11:00'],
   [['ana', 0, 2, 'overlap'], ['ana', 2, 5, 'overlap'], ['ana', 2, 3, 'overlap'], ['ben', 8, 9, 'overlap'],
    ['ben', 9, 6, 'short_rest'], ['ben', 6, 10, 'short_rest'], ['chi', 1, 4, 'short_rest']]),
  ('regression variant: latest end tracking 2',
   [[['ana', 2730, 3330], ['dev', 0, 360], ['ana', 1620, 2100], ['ben', 3380, 3620], ['dev', 1690, 2290],
     ['dev', 270, 990], ['ben', 0, 240], ['ben', 3260, 3500], ['ben', 900, 1260], ['ana', 300, 1020],
     ['dev', 330, 810]],
    '12:00'],
   [['ana', 9, 2, 'short_rest'], ['ana', 2, 0, 'short_rest'], ['ben', 6, 8, 'short_rest'],
    ['ben', 7, 3, 'overlap'], ['dev', 1, 5, 'overlap'], ['dev', 5, 10, 'overlap'],
    ['dev', 5, 4, 'short_rest']]),
  ('partial repair guard 3',
   [[['ana', 300, 660], ['dev', 1270, 1510], ['dev', 940, 1300], ['dev', 0, 240], ['ben', 2000, 2600],
     ['ana', 630, 870], ['ana', 1499, 1739], ['dev', 2110, 2470], ['ben', 3261, 3741]],
    '10:31'],
   [['ana', 0, 5, 'overlap'], ['ana', 5, 6, 'short_rest'], ['dev', 2, 1, 'overlap'],
    ['dev', 1, 7, 'short_rest']]),
  ('boundary control 4', [[['ben', 0, 480], ['ben', 3400, 3800]], '11:00'], []),
  ('boundary control 5', [[['ana', 0, 900], ['ana', 100, 300], ['ana', 600, 800]], '11:00'],
   [['ana', 0, 1, 'overlap'], ['ana', 0, 2, 'overlap']]),
  ('normal control 6',
   [[['ben', 300, 1020], ['ana', 1351, 2071], ['ana', 0, 720], ['ana', 1291, 2011], ['ana', 1891, 2251],
     ['ben', 990, 1350]],
    '09:45'],
   [['ana', 2, 3, 'short_rest'], ['ana', 3, 1, 'overlap'], ['ana', 1, 4, 'overlap'],
    ['ben', 0, 5, 'overlap']]),
  ('normal control 7',
   [[['chi', 3110, 3830], ['chi', 2000, 2480], ['ana', 3180, 3540], ['ana', 1320, 2040], ['dev', 2000, 2720],
     ['ana', 2700, 3180], ['dev', 3381, 3981]],
    '09:45'],
   [['ana', 5, 2, 'short_rest']]),
  ('normal control 8',
   [[['ana', 1940, 2180], ['ana', 6040, 6760], ['ana', 2000, 2480], ['ana', 3680, 4040]], '12:00'],
   [['ana', 0, 2, 'overlap']])],
 [('regression: latest end tracking 1',
   [[['ana', 3820, 4540], ['ben', 2970, 3690], ['chi', 1940, 2420], ['ana', 3760, 4000], ['ana', 300, 900],
     ['ana', 1600, 2320], ['chi', 2570, 2930], ['ben', 4590, 4830], ['ben', 870, 1470], ['ben', 300, 900],
     ['chi', 2000, 2240], ['chi', 1880, 2600]],
    '10:30'],
   [['ana', 3, 0, 'overlap'], ['ben', 9, 8, 'overlap'], ['chi', 11, 2, 'overlap'], ['chi', 11, 10, 'overlap'],
    ['chi', 11, 6, 'overlap']]),
  ('regression variant: latest end tracking 2',
   [[['ana', 3490, 3730], ['dev', 1200, 1680], ['ana', 2550, 2790], ['ben', 2480, 2720], ['dev', 1260, 1500],
     ['ana', 1170, 1650], ['ben', 3381, 3861], ['ben', 3861, 4341], ['ana', 300, 540], ['ben', 0, 480],
     ['dev', 1320, 1560]],
    '09:45'],
   [['ben', 6, 7, 'short_rest'], ['dev', 1, 4, 'overlap'], ['dev', 1, 10, 'overlap']]),
  ('partial repair guard 3',
   [[['ana', 3390, 3870], ['dev', 300, 1020], ['ana', 0, 720], ['ana', 2790, 3390], ['ana', 2220, 2820],
     ['dev', 240, 840]],
    '12:00'],
   [['ana', 4, 3, 'overlap'], ['ana', 3, 0, 'short_rest'], ['dev', 5, 1, 'overlap']]),
  ('boundary control 4', [[['ana', 0, 480], ['ana', 1139, 1620]], '11:00'], [['ana', 0, 1, 'short_rest']]),
  ('boundary control 5', [[['ben', 0, 480], ['ben', 1110, 1400]], '10:30'], []),
  ('normal control 6', [[['ana', 3440, 4160], ['ana', 2000, 2240], ['ana', 2240, 2840]], '11:00'],
   [['ana', 1, 2, 'short_rest'], ['ana', 2, 0, 'short_rest']]),
  ('normal control 7',
   [[['dev', 6220, 6700], ['ana', 2000, 2360], ['ben', 1860, 2340], ['ben', 1680, 2040], ['dev', 3500, 4220],
     ['dev', 2000, 2600], ['ana', 1940, 2420], ['ben', 1620, 1980], ['ben', 1320, 1680]],
    '10:30'],
   [['ana', 6, 1, 'overlap'], ['ben', 8, 7, 'overlap'], ['ben', 7, 3, 'overlap'], ['ben', 3, 2, 'overlap']]),
  ('normal control 8',
   [[['dev', 1320, 1800], ['ana', 2690, 3410], ['chi', 3440, 4040], ['dev', 4720, 5200], ['chi', 4040, 4640],
     ['ana', 2000, 2720], ['chi', 2000, 2600], ['dev', 2500, 3220], ['chi', 2600, 2840]],
    '10:30'],
   [['ana', 5, 1, 'overlap'], ['chi', 6, 8, 'short_rest'], ['chi', 8, 2, 'short_rest'],
    ['chi', 2, 4, 'short_rest']])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: latest end tracking 1[['ana', 0, 1, 'overlap'], ['ana', 1, 2, 'short_rest']][['ana', 0, 1, 'overlap'], ['ana', 0, 2, 'overlap']]Failed
regression variant: latest end tracking 2[['chi', 5, 8, 'overlap'], ['chi', 8, 3, 'short_rest'], ['dev', 6, 0, 'overlap']][['chi', 5, 8, 'overlap'], ['chi', 5, 3, 'short_rest'], ['dev', 6, 0, 'overlap']]Failed
partial repair guard 3[['chi', 0, 5, 'short_rest'], ['chi', 5, 7, 'short_rest']][['chi', 0, 5, 'short_rest'], ['chi', 5, 7, 'short_rest']]Passed
boundary control 4[['ana', 0, 1, 'short_rest']][['ana', 0, 1, 'short_rest']]Passed
normal control 5[][]Passed
normal control 6[][]Passed
normal control 7[['ana', 6, 1, 'overlap'], ['ben', 8, 7, 'overlap'], ['ben', 7, 3, 'overlap'], ['ben', 3, 2, 'overlap']][['ana', 6, 1, 'overlap'], ['ben', 8, 7, 'overlap'], ['ben', 7, 3, 'overlap'], ['ben', 3, 2, 'overlap']]Passed
normal control 8[['dev', 0, 1, 'overlap'], ['dev', 1, 2, 'short_rest']][['dev', 0, 1, 'overlap'], ['dev', 1, 2, 'short_rest']]Passed

SHA-256 / 0ddbff4164b095ddc38b1972e8a1e5390cc1dd54abffa1e937aeb83d24288c31

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(shifts, min_rest):
    h, m = min_rest.split(':')
    limit = int(h) * 60 + int(m)
    by = {}
    for i, (w, s, e) in enumerate(shifts):
        by.setdefault(w, []).append((s, e, i))
    out = []
    for w in sorted(by):
        seq = sorted(by[w])
        prev = None
        for s, e, i in seq:
            if prev is not None:
                pe, pi = prev
                gap = s - pe
                if gap < 0:
                    out.append([w, pi, i, 'overlap'])
                elif gap < limit:
                    out.append([w, pi, i, 'short_rest'])
            if prev is None or s > prev[0]:
                prev = (e, i)
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: latest end tracking 1', [[['ana', 0, 900], ['ana', 100, 300], ['ana', 600, 800]], '11:00'],
   [['ana', 0, 1, 'overlap'], ['ana', 0, 2, 'overlap']]),
  ('regression variant: latest end tracking 2',
   [[['dev', 2000, 2480], ['dev', 4231, 4951], ['ana', 0, 240], ['chi', 1860, 2340], ['dev', 3120, 3600],
     ['chi', 1260, 1860], ['dev', 1940, 2420], ['ana', 901, 1501], ['chi', 1320, 1680]],
    '09:45'],
   [['chi', 5, 8, 'overlap'], ['chi', 5, 3, 'short_rest'], ['dev', 6, 0, 'overlap']]),
  ('partial repair guard 3',
   [[['chi', 0, 720], ['ana', 2000, 2360], ['ben', 300, 900], ['chi', 3209, 3569], ['ana', 2990, 3350],
     ['chi', 720, 1320], ['ana', 5350, 5830], ['chi', 1949, 2309], ['ben', 1600, 2200]],
    '10:30'],
   [['chi', 0, 5, 'short_rest'], ['chi', 5, 7, 'short_rest']]),
  ('boundary control 4', [[['ana', 0, 480], ['ana', 1139, 1620]], '11:00'], [['ana', 0, 1, 'short_rest']]),
  ('normal control 5',
   [[['chi', 2000, 2360], ['chi', 2991, 3351], ['ana', 3140, 3500], ['ana', 2000, 2240]], '10:31'], []),
  ('normal control 6', [[['ben', 3770, 4490], ['ben', 300, 780], ['ben', 1410, 1770]], '09:45'], []),
  ('normal control 7',
   [[['dev', 6220, 6700], ['ana', 2000, 2360], ['ben', 1860, 2340], ['ben', 1680, 2040], ['dev', 3500, 4220],
     ['dev', 2000, 2600], ['ana', 1940, 2420], ['ben', 1620, 1980], ['ben', 1320, 1680]],
    '10:30'],
   [['ana', 6, 1, 'overlap'], ['ben', 8, 7, 'overlap'], ['ben', 7, 3, 'overlap'], ['ben', 3, 2, 'overlap']]),
  ('normal control 8', [[['dev', 0, 240], ['dev', 120, 600], ['dev', 1200, 1920]], '11:00'],
   [['dev', 0, 1, 'overlap'], ['dev', 1, 2, 'short_rest']])],
 [('regression: latest end tracking 1',
   [[['ana', 2620, 3220], ['ana', 0, 600], ['ben', 5542, 5902], ['ana', 1300, 2020], ['ben', 3200, 3920],
     ['ben', 4551, 4911], ['ben', 2000, 2600], ['ana', 0, 600]],
    '12:00'],
   [['ana', 1, 7, 'overlap'], ['ana', 1, 3, 'short_rest'], ['ana', 3, 0, 'short_rest'],
    ['ben', 6, 4, 'short_rest'], ['ben', 4, 5, 'short_rest'], ['ben', 5, 2, 'short_rest']]),
  ('regression variant: latest end tracking 2',
   [[['ana', 3820, 4540], ['ben', 2970, 3690], ['chi', 1940, 2420], ['ana', 3760, 4000], ['ana', 300, 900],
     ['ana', 1600, 2320], ['chi', 2570, 2930], ['ben', 4590, 4830], ['ben', 870, 1470], ['ben', 300, 900],
     ['chi', 2000, 2240], ['chi', 1880, 2600]],
    '10:30'],
   [['ana', 3, 0, 'overlap'], ['ben', 9, 8, 'overlap'], ['chi', 11, 2, 'overlap'], ['chi', 11, 10, 'overlap'],
    ['chi', 11, 6, 'overlap']]),
  ('partial repair guard 3',
   [[['dev', 3000, 3720], ['ana', 2431, 3151], ['ana', 1471, 1831], ['ana', 0, 480], ['ana', 1111, 1471],
     ['dev', 1320, 1560], ['dev', 1560, 2040], ['dev', 1920, 2400]],
    '10:31'],
   [['ana', 4, 2, 'short_rest'], ['ana', 2, 1, 'short_rest'], ['dev', 5, 6, 'short_rest'],
    ['dev', 6, 7, 'overlap'], ['dev', 7, 0, 'short_rest']]),
  ('boundary control 4', [[['ben', 0, 480], ['ben', 1110, 1400]], '10:30'], []),
  ('boundary control 5', [[['ana', 0, 480], ['ana', 480, 960], ['ben', 0, 480]], '10:30'],
   [['ana', 0, 1, 'short_rest']]),
  ('normal control 6',
   [[['dev', 1771, 2011], ['dev', 300, 540], ['ana', 0, 240], ['ana', 2240, 2840], ['dev', 510, 1110]],
    '10:30'],
   [['dev', 1, 4, 'overlap']]),
  ('normal control 7',
   [[['ben', 1320, 1560], ['ben', 1560, 1920], ['ana', 1741, 2461], ['ana', 901, 1141], ['chi', 2869, 3109],
     ['chi', 2000, 2240], ['ana', 0, 240]],
    '12:00'],
   [['ana', 6, 3, 'short_rest'], ['ana', 3, 2, 'short_rest'], ['ben', 0, 1, 'short_rest'],
    ['chi', 5, 4, 'short_rest']]),
  ('normal control 8',
   [[['ana', 1351, 1831], ['ana', 2461, 2941], ['ana', 2401, 2881], ['ana', 0, 720]], '12:00'],
   [['ana', 3, 0, 'short_rest'], ['ana', 0, 2, 'short_rest'], ['ana', 2, 1, 'overlap']])],
 [('regression: latest end tracking 1',
   [[['dev', 2000, 2360], ['ana', 5060, 5540], ['ben', 300, 780], ['dev', 3049, 3769], ['ana', 2000, 2360],
     ['dev', 1940, 2420], ['ben', 1441, 2041], ['ana', 2960, 3560]],
    '10:31'],
   [['ana', 4, 7, 'short_rest'], ['dev', 5, 0, 'overlap'], ['dev', 5, 3, 'short_rest']]),
  ('regression variant: latest end tracking 2',
   [[['ana', 1940, 2300], ['ana', 2000, 2360], ['ana', 1880, 2480], ['ana', 2480, 3080]], '10:30'],
   [['ana', 2, 0, 'overlap'], ['ana', 2, 1, 'overlap'], ['ana', 2, 3, 'short_rest']]),
  ('partial repair guard 3',
   [[['chi', 2360, 2720], ['ben', 991, 1711], ['ben', 0, 360], ['chi', 2000, 2480], ['dev', 780, 1500],
     ['dev', 3500, 3860], ['ben', 0, 600], ['dev', 300, 900], ['dev', 4520, 5000]],
    '11:00'],
   [['ben', 2, 6, 'overlap'], ['ben', 6, 1, 'short_rest'], ['chi', 3, 0, 'overlap'],
    ['dev', 7, 4, 'overlap']]),
  ('boundary control 4', [[['ana', 1200, 1680], ['ana', 0, 480]], '11:00'], []),
  ('boundary control 5', [[['ana', 0, 480], ['ana', 1140, 1620]], '11:00'], []),
  ('normal control 6',
   [[['ben', 1180, 1540], ['ben', 2231, 2711], ['ana', 2360, 2720], ['ben', 0, 480], ['ben', 1120, 1600],
     ['ana', 2000, 2360]],
    '10:31'],
   [['ana', 5, 2, 'short_rest'], ['ben', 4, 0, 'overlap']]),
  ('normal control 7',
   [[['ana', 2620, 3220], ['ana', 0, 600], ['ben', 5542, 5902], ['ana', 1300, 2020], ['ben', 3200, 3920],
     ['ben', 4551, 4911], ['ben', 2000, 2600], ['ana', 0, 600]],
    '12:00'],
   [['ana', 1, 7, 'overlap'], ['ana', 1, 3, 'short_rest'], ['ana', 3, 0, 'short_rest'],
    ['ben', 6, 4, 'short_rest'], ['ben', 4, 5, 'short_rest'], ['ben', 5, 2, 'short_rest']]),
  ('normal control 8',
   [[['ana', 2000, 2600], ['ben', 4821, 5421], ['ana', 2600, 2960], ['chi', 1800, 2160], ['ben', 4581, 4821],
     ['ben', 3231, 3951], ['chi', 1320, 1800], ['ana', 3860, 4460], ['ben', 2000, 2600]],
    '11:00'],
   [['ana', 0, 2, 'short_rest'], ['ben', 8, 5, 'short_rest'], ['ben', 5, 4, 'short_rest'],
    ['ben', 4, 1, 'short_rest'], ['chi', 6, 3, 'short_rest']])],
 [('regression: latest end tracking 1',
   [[['ana', 0, 600], ['chi', 1300, 2020], ['ana', 510, 1110], ['ana', 990, 1350], ['chi', 2650, 2890],
     ['ana', 570, 1050], ['ben', 1320, 1800], ['chi', 0, 600], ['ben', 0, 360], ['ben', 240, 720],
     ['ben', 2429, 3029]],
    '11:00'],
   [['ana', 0, 2, 'overlap'], ['ana', 2, 5, 'overlap'], ['ana', 2, 3, 'overlap'], ['ben', 8, 9, 'overlap'],
    ['ben', 9, 6, 'short_rest'], ['ben', 6, 10, 'short_rest'], ['chi', 1, 4, 'short_rest']]),
  ('regression variant: latest end tracking 2',
   [[['ana', 2730, 3330], ['dev', 0, 360], ['ana', 1620, 2100], ['ben', 3380, 3620], ['dev', 1690, 2290],
     ['dev', 270, 990], ['ben', 0, 240], ['ben', 3260, 3500], ['ben', 900, 1260], ['ana', 300, 1020],
     ['dev', 330, 810]],
    '12:00'],
   [['ana', 9, 2, 'short_rest'], ['ana', 2, 0, 'short_rest'], ['ben', 6, 8, 'short_rest'],
    ['ben', 7, 3, 'overlap'], ['dev', 1, 5, 'overlap'], ['dev', 5, 10, 'overlap'],
    ['dev', 5, 4, 'short_rest']]),
  ('partial repair guard 3',
   [[['ana', 300, 660], ['dev', 1270, 1510], ['dev', 940, 1300], ['dev', 0, 240], ['ben', 2000, 2600],
     ['ana', 630, 870], ['ana', 1499, 1739], ['dev', 2110, 2470], ['ben', 3261, 3741]],
    '10:31'],
   [['ana', 0, 5, 'overlap'], ['ana', 5, 6, 'short_rest'], ['dev', 2, 1, 'overlap'],
    ['dev', 1, 7, 'short_rest']]),
  ('boundary control 4', [[['ben', 0, 480], ['ben', 3400, 3800]], '11:00'], []),
  ('boundary control 5', [[['ana', 0, 900], ['ana', 100, 300], ['ana', 600, 800]], '11:00'],
   [['ana', 0, 1, 'overlap'], ['ana', 0, 2, 'overlap']]),
  ('normal control 6',
   [[['ben', 300, 1020], ['ana', 1351, 2071], ['ana', 0, 720], ['ana', 1291, 2011], ['ana', 1891, 2251],
     ['ben', 990, 1350]],
    '09:45'],
   [['ana', 2, 3, 'short_rest'], ['ana', 3, 1, 'overlap'], ['ana', 1, 4, 'overlap'],
    ['ben', 0, 5, 'overlap']]),
  ('normal control 7',
   [[['chi', 3110, 3830], ['chi', 2000, 2480], ['ana', 3180, 3540], ['ana', 1320, 2040], ['dev', 2000, 2720],
     ['ana', 2700, 3180], ['dev', 3381, 3981]],
    '09:45'],
   [['ana', 5, 2, 'short_rest']]),
  ('normal control 8',
   [[['ana', 1940, 2180], ['ana', 6040, 6760], ['ana', 2000, 2480], ['ana', 3680, 4040]], '12:00'],
   [['ana', 0, 2, 'overlap']])],
 [('regression: latest end tracking 1',
   [[['ana', 3820, 4540], ['ben', 2970, 3690], ['chi', 1940, 2420], ['ana', 3760, 4000], ['ana', 300, 900],
     ['ana', 1600, 2320], ['chi', 2570, 2930], ['ben', 4590, 4830], ['ben', 870, 1470], ['ben', 300, 900],
     ['chi', 2000, 2240], ['chi', 1880, 2600]],
    '10:30'],
   [['ana', 3, 0, 'overlap'], ['ben', 9, 8, 'overlap'], ['chi', 11, 2, 'overlap'], ['chi', 11, 10, 'overlap'],
    ['chi', 11, 6, 'overlap']]),
  ('regression variant: latest end tracking 2',
   [[['ana', 3490, 3730], ['dev', 1200, 1680], ['ana', 2550, 2790], ['ben', 2480, 2720], ['dev', 1260, 1500],
     ['ana', 1170, 1650], ['ben', 3381, 3861], ['ben', 3861, 4341], ['ana', 300, 540], ['ben', 0, 480],
     ['dev', 1320, 1560]],
    '09:45'],
   [['ben', 6, 7, 'short_rest'], ['dev', 1, 4, 'overlap'], ['dev', 1, 10, 'overlap']]),
  ('partial repair guard 3',
   [[['ana', 3390, 3870], ['dev', 300, 1020], ['ana', 0, 720], ['ana', 2790, 3390], ['ana', 2220, 2820],
     ['dev', 240, 840]],
    '12:00'],
   [['ana', 4, 3, 'overlap'], ['ana', 3, 0, 'short_rest'], ['dev', 5, 1, 'overlap']]),
  ('boundary control 4', [[['ana', 0, 480], ['ana', 1139, 1620]], '11:00'], [['ana', 0, 1, 'short_rest']]),
  ('boundary control 5', [[['ben', 0, 480], ['ben', 1110, 1400]], '10:30'], []),
  ('normal control 6', [[['ana', 3440, 4160], ['ana', 2000, 2240], ['ana', 2240, 2840]], '11:00'],
   [['ana', 1, 2, 'short_rest'], ['ana', 2, 0, 'short_rest']]),
  ('normal control 7',
   [[['dev', 6220, 6700], ['ana', 2000, 2360], ['ben', 1860, 2340], ['ben', 1680, 2040], ['dev', 3500, 4220],
     ['dev', 2000, 2600], ['ana', 1940, 2420], ['ben', 1620, 1980], ['ben', 1320, 1680]],
    '10:30'],
   [['ana', 6, 1, 'overlap'], ['ben', 8, 7, 'overlap'], ['ben', 7, 3, 'overlap'], ['ben', 3, 2, 'overlap']]),
  ('normal control 8',
   [[['dev', 1320, 1800], ['ana', 2690, 3410], ['chi', 3440, 4040], ['dev', 4720, 5200], ['chi', 4040, 4640],
     ['ana', 2000, 2720], ['chi', 2000, 2600], ['dev', 2500, 3220], ['chi', 2600, 2840]],
    '10:30'],
   [['ana', 5, 1, 'overlap'], ['chi', 6, 8, 'short_rest'], ['chi', 8, 2, 'short_rest'],
    ['chi', 2, 4, 'short_rest']])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: latest end tracking 1[['ana', 0, 1, 'overlap'], ['ana', 0, 2, 'overlap']][['ana', 0, 1, 'overlap'], ['ana', 0, 2, 'overlap']]Passed
regression variant: latest end tracking 2[['chi', 5, 8, 'overlap'], ['chi', 5, 3, 'short_rest'], ['dev', 6, 0, 'overlap']][['chi', 5, 8, 'overlap'], ['chi', 5, 3, 'short_rest'], ['dev', 6, 0, 'overlap']]Passed
partial repair guard 3[['chi', 0, 5, 'short_rest']][['chi', 0, 5, 'short_rest'], ['chi', 5, 7, 'short_rest']]Failed
boundary control 4[['ana', 0, 1, 'short_rest']][['ana', 0, 1, 'short_rest']]Passed
normal control 5[][]Passed
normal control 6[][]Passed
normal control 7[['ana', 6, 1, 'overlap'], ['ben', 8, 7, 'overlap'], ['ben', 8, 3, 'short_rest'], ['ben', 8, 2, 'short_rest']][['ana', 6, 1, 'overlap'], ['ben', 8, 7, 'overlap'], ['ben', 7, 3, 'overlap'], ['ben', 3, 2, 'overlap']]Failed
normal control 8[['dev', 0, 1, 'overlap']][['dev', 0, 1, 'overlap'], ['dev', 1, 2, 'short_rest']]Failed

SHA-256 / d94d044a02c443e35757ae56f37d7ba7e38ac7b7dc18c91fdc29148b1f86be6d

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(shifts, min_rest):
    h, m = min_rest.split(':')
    limit = int(h) * 60 + int(m)
    by = {}
    for i, (w, s, e) in enumerate(shifts):
        by.setdefault(w, []).append((s, e, i))
    out = []
    for w in sorted(by):
        seq = sorted(by[w])
        prev = None
        for s, e, i in seq:
            if prev is not None:
                pe, pi = prev
                gap = s - pe
                if gap < 0:
                    out.append([w, pi, i, 'overlap'])
                elif gap < limit:
                    out.append([w, pi, i, 'short_rest'])
            if prev is None or e > prev[0]:
                prev = (e, i)
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: latest end tracking 1', [[['ana', 0, 900], ['ana', 100, 300], ['ana', 600, 800]], '11:00'],
   [['ana', 0, 1, 'overlap'], ['ana', 0, 2, 'overlap']]),
  ('regression variant: latest end tracking 2',
   [[['dev', 2000, 2480], ['dev', 4231, 4951], ['ana', 0, 240], ['chi', 1860, 2340], ['dev', 3120, 3600],
     ['chi', 1260, 1860], ['dev', 1940, 2420], ['ana', 901, 1501], ['chi', 1320, 1680]],
    '09:45'],
   [['chi', 5, 8, 'overlap'], ['chi', 5, 3, 'short_rest'], ['dev', 6, 0, 'overlap']]),
  ('partial repair guard 3',
   [[['chi', 0, 720], ['ana', 2000, 2360], ['ben', 300, 900], ['chi', 3209, 3569], ['ana', 2990, 3350],
     ['chi', 720, 1320], ['ana', 5350, 5830], ['chi', 1949, 2309], ['ben', 1600, 2200]],
    '10:30'],
   [['chi', 0, 5, 'short_rest'], ['chi', 5, 7, 'short_rest']]),
  ('boundary control 4', [[['ana', 0, 480], ['ana', 1139, 1620]], '11:00'], [['ana', 0, 1, 'short_rest']]),
  ('normal control 5',
   [[['chi', 2000, 2360], ['chi', 2991, 3351], ['ana', 3140, 3500], ['ana', 2000, 2240]], '10:31'], []),
  ('normal control 6', [[['ben', 3770, 4490], ['ben', 300, 780], ['ben', 1410, 1770]], '09:45'], []),
  ('normal control 7',
   [[['dev', 6220, 6700], ['ana', 2000, 2360], ['ben', 1860, 2340], ['ben', 1680, 2040], ['dev', 3500, 4220],
     ['dev', 2000, 2600], ['ana', 1940, 2420], ['ben', 1620, 1980], ['ben', 1320, 1680]],
    '10:30'],
   [['ana', 6, 1, 'overlap'], ['ben', 8, 7, 'overlap'], ['ben', 7, 3, 'overlap'], ['ben', 3, 2, 'overlap']]),
  ('normal control 8', [[['dev', 0, 240], ['dev', 120, 600], ['dev', 1200, 1920]], '11:00'],
   [['dev', 0, 1, 'overlap'], ['dev', 1, 2, 'short_rest']])],
 [('regression: latest end tracking 1',
   [[['ana', 2620, 3220], ['ana', 0, 600], ['ben', 5542, 5902], ['ana', 1300, 2020], ['ben', 3200, 3920],
     ['ben', 4551, 4911], ['ben', 2000, 2600], ['ana', 0, 600]],
    '12:00'],
   [['ana', 1, 7, 'overlap'], ['ana', 1, 3, 'short_rest'], ['ana', 3, 0, 'short_rest'],
    ['ben', 6, 4, 'short_rest'], ['ben', 4, 5, 'short_rest'], ['ben', 5, 2, 'short_rest']]),
  ('regression variant: latest end tracking 2',
   [[['ana', 3820, 4540], ['ben', 2970, 3690], ['chi', 1940, 2420], ['ana', 3760, 4000], ['ana', 300, 900],
     ['ana', 1600, 2320], ['chi', 2570, 2930], ['ben', 4590, 4830], ['ben', 870, 1470], ['ben', 300, 900],
     ['chi', 2000, 2240], ['chi', 1880, 2600]],
    '10:30'],
   [['ana', 3, 0, 'overlap'], ['ben', 9, 8, 'overlap'], ['chi', 11, 2, 'overlap'], ['chi', 11, 10, 'overlap'],
    ['chi', 11, 6, 'overlap']]),
  ('partial repair guard 3',
   [[['dev', 3000, 3720], ['ana', 2431, 3151], ['ana', 1471, 1831], ['ana', 0, 480], ['ana', 1111, 1471],
     ['dev', 1320, 1560], ['dev', 1560, 2040], ['dev', 1920, 2400]],
    '10:31'],
   [['ana', 4, 2, 'short_rest'], ['ana', 2, 1, 'short_rest'], ['dev', 5, 6, 'short_rest'],
    ['dev', 6, 7, 'overlap'], ['dev', 7, 0, 'short_rest']]),
  ('boundary control 4', [[['ben', 0, 480], ['ben', 1110, 1400]], '10:30'], []),
  ('boundary control 5', [[['ana', 0, 480], ['ana', 480, 960], ['ben', 0, 480]], '10:30'],
   [['ana', 0, 1, 'short_rest']]),
  ('normal control 6',
   [[['dev', 1771, 2011], ['dev', 300, 540], ['ana', 0, 240], ['ana', 2240, 2840], ['dev', 510, 1110]],
    '10:30'],
   [['dev', 1, 4, 'overlap']]),
  ('normal control 7',
   [[['ben', 1320, 1560], ['ben', 1560, 1920], ['ana', 1741, 2461], ['ana', 901, 1141], ['chi', 2869, 3109],
     ['chi', 2000, 2240], ['ana', 0, 240]],
    '12:00'],
   [['ana', 6, 3, 'short_rest'], ['ana', 3, 2, 'short_rest'], ['ben', 0, 1, 'short_rest'],
    ['chi', 5, 4, 'short_rest']]),
  ('normal control 8',
   [[['ana', 1351, 1831], ['ana', 2461, 2941], ['ana', 2401, 2881], ['ana', 0, 720]], '12:00'],
   [['ana', 3, 0, 'short_rest'], ['ana', 0, 2, 'short_rest'], ['ana', 2, 1, 'overlap']])],
 [('regression: latest end tracking 1',
   [[['dev', 2000, 2360], ['ana', 5060, 5540], ['ben', 300, 780], ['dev', 3049, 3769], ['ana', 2000, 2360],
     ['dev', 1940, 2420], ['ben', 1441, 2041], ['ana', 2960, 3560]],
    '10:31'],
   [['ana', 4, 7, 'short_rest'], ['dev', 5, 0, 'overlap'], ['dev', 5, 3, 'short_rest']]),
  ('regression variant: latest end tracking 2',
   [[['ana', 1940, 2300], ['ana', 2000, 2360], ['ana', 1880, 2480], ['ana', 2480, 3080]], '10:30'],
   [['ana', 2, 0, 'overlap'], ['ana', 2, 1, 'overlap'], ['ana', 2, 3, 'short_rest']]),
  ('partial repair guard 3',
   [[['chi', 2360, 2720], ['ben', 991, 1711], ['ben', 0, 360], ['chi', 2000, 2480], ['dev', 780, 1500],
     ['dev', 3500, 3860], ['ben', 0, 600], ['dev', 300, 900], ['dev', 4520, 5000]],
    '11:00'],
   [['ben', 2, 6, 'overlap'], ['ben', 6, 1, 'short_rest'], ['chi', 3, 0, 'overlap'],
    ['dev', 7, 4, 'overlap']]),
  ('boundary control 4', [[['ana', 1200, 1680], ['ana', 0, 480]], '11:00'], []),
  ('boundary control 5', [[['ana', 0, 480], ['ana', 1140, 1620]], '11:00'], []),
  ('normal control 6',
   [[['ben', 1180, 1540], ['ben', 2231, 2711], ['ana', 2360, 2720], ['ben', 0, 480], ['ben', 1120, 1600],
     ['ana', 2000, 2360]],
    '10:31'],
   [['ana', 5, 2, 'short_rest'], ['ben', 4, 0, 'overlap']]),
  ('normal control 7',
   [[['ana', 2620, 3220], ['ana', 0, 600], ['ben', 5542, 5902], ['ana', 1300, 2020], ['ben', 3200, 3920],
     ['ben', 4551, 4911], ['ben', 2000, 2600], ['ana', 0, 600]],
    '12:00'],
   [['ana', 1, 7, 'overlap'], ['ana', 1, 3, 'short_rest'], ['ana', 3, 0, 'short_rest'],
    ['ben', 6, 4, 'short_rest'], ['ben', 4, 5, 'short_rest'], ['ben', 5, 2, 'short_rest']]),
  ('normal control 8',
   [[['ana', 2000, 2600], ['ben', 4821, 5421], ['ana', 2600, 2960], ['chi', 1800, 2160], ['ben', 4581, 4821],
     ['ben', 3231, 3951], ['chi', 1320, 1800], ['ana', 3860, 4460], ['ben', 2000, 2600]],
    '11:00'],
   [['ana', 0, 2, 'short_rest'], ['ben', 8, 5, 'short_rest'], ['ben', 5, 4, 'short_rest'],
    ['ben', 4, 1, 'short_rest'], ['chi', 6, 3, 'short_rest']])],
 [('regression: latest end tracking 1',
   [[['ana', 0, 600], ['chi', 1300, 2020], ['ana', 510, 1110], ['ana', 990, 1350], ['chi', 2650, 2890],
     ['ana', 570, 1050], ['ben', 1320, 1800], ['chi', 0, 600], ['ben', 0, 360], ['ben', 240, 720],
     ['ben', 2429, 3029]],
    '11:00'],
   [['ana', 0, 2, 'overlap'], ['ana', 2, 5, 'overlap'], ['ana', 2, 3, 'overlap'], ['ben', 8, 9, 'overlap'],
    ['ben', 9, 6, 'short_rest'], ['ben', 6, 10, 'short_rest'], ['chi', 1, 4, 'short_rest']]),
  ('regression variant: latest end tracking 2',
   [[['ana', 2730, 3330], ['dev', 0, 360], ['ana', 1620, 2100], ['ben', 3380, 3620], ['dev', 1690, 2290],
     ['dev', 270, 990], ['ben', 0, 240], ['ben', 3260, 3500], ['ben', 900, 1260], ['ana', 300, 1020],
     ['dev', 330, 810]],
    '12:00'],
   [['ana', 9, 2, 'short_rest'], ['ana', 2, 0, 'short_rest'], ['ben', 6, 8, 'short_rest'],
    ['ben', 7, 3, 'overlap'], ['dev', 1, 5, 'overlap'], ['dev', 5, 10, 'overlap'],
    ['dev', 5, 4, 'short_rest']]),
  ('partial repair guard 3',
   [[['ana', 300, 660], ['dev', 1270, 1510], ['dev', 940, 1300], ['dev', 0, 240], ['ben', 2000, 2600],
     ['ana', 630, 870], ['ana', 1499, 1739], ['dev', 2110, 2470], ['ben', 3261, 3741]],
    '10:31'],
   [['ana', 0, 5, 'overlap'], ['ana', 5, 6, 'short_rest'], ['dev', 2, 1, 'overlap'],
    ['dev', 1, 7, 'short_rest']]),
  ('boundary control 4', [[['ben', 0, 480], ['ben', 3400, 3800]], '11:00'], []),
  ('boundary control 5', [[['ana', 0, 900], ['ana', 100, 300], ['ana', 600, 800]], '11:00'],
   [['ana', 0, 1, 'overlap'], ['ana', 0, 2, 'overlap']]),
  ('normal control 6',
   [[['ben', 300, 1020], ['ana', 1351, 2071], ['ana', 0, 720], ['ana', 1291, 2011], ['ana', 1891, 2251],
     ['ben', 990, 1350]],
    '09:45'],
   [['ana', 2, 3, 'short_rest'], ['ana', 3, 1, 'overlap'], ['ana', 1, 4, 'overlap'],
    ['ben', 0, 5, 'overlap']]),
  ('normal control 7',
   [[['chi', 3110, 3830], ['chi', 2000, 2480], ['ana', 3180, 3540], ['ana', 1320, 2040], ['dev', 2000, 2720],
     ['ana', 2700, 3180], ['dev', 3381, 3981]],
    '09:45'],
   [['ana', 5, 2, 'short_rest']]),
  ('normal control 8',
   [[['ana', 1940, 2180], ['ana', 6040, 6760], ['ana', 2000, 2480], ['ana', 3680, 4040]], '12:00'],
   [['ana', 0, 2, 'overlap']])],
 [('regression: latest end tracking 1',
   [[['ana', 3820, 4540], ['ben', 2970, 3690], ['chi', 1940, 2420], ['ana', 3760, 4000], ['ana', 300, 900],
     ['ana', 1600, 2320], ['chi', 2570, 2930], ['ben', 4590, 4830], ['ben', 870, 1470], ['ben', 300, 900],
     ['chi', 2000, 2240], ['chi', 1880, 2600]],
    '10:30'],
   [['ana', 3, 0, 'overlap'], ['ben', 9, 8, 'overlap'], ['chi', 11, 2, 'overlap'], ['chi', 11, 10, 'overlap'],
    ['chi', 11, 6, 'overlap']]),
  ('regression variant: latest end tracking 2',
   [[['ana', 3490, 3730], ['dev', 1200, 1680], ['ana', 2550, 2790], ['ben', 2480, 2720], ['dev', 1260, 1500],
     ['ana', 1170, 1650], ['ben', 3381, 3861], ['ben', 3861, 4341], ['ana', 300, 540], ['ben', 0, 480],
     ['dev', 1320, 1560]],
    '09:45'],
   [['ben', 6, 7, 'short_rest'], ['dev', 1, 4, 'overlap'], ['dev', 1, 10, 'overlap']]),
  ('partial repair guard 3',
   [[['ana', 3390, 3870], ['dev', 300, 1020], ['ana', 0, 720], ['ana', 2790, 3390], ['ana', 2220, 2820],
     ['dev', 240, 840]],
    '12:00'],
   [['ana', 4, 3, 'overlap'], ['ana', 3, 0, 'short_rest'], ['dev', 5, 1, 'overlap']]),
  ('boundary control 4', [[['ana', 0, 480], ['ana', 1139, 1620]], '11:00'], [['ana', 0, 1, 'short_rest']]),
  ('boundary control 5', [[['ben', 0, 480], ['ben', 1110, 1400]], '10:30'], []),
  ('normal control 6', [[['ana', 3440, 4160], ['ana', 2000, 2240], ['ana', 2240, 2840]], '11:00'],
   [['ana', 1, 2, 'short_rest'], ['ana', 2, 0, 'short_rest']]),
  ('normal control 7',
   [[['dev', 6220, 6700], ['ana', 2000, 2360], ['ben', 1860, 2340], ['ben', 1680, 2040], ['dev', 3500, 4220],
     ['dev', 2000, 2600], ['ana', 1940, 2420], ['ben', 1620, 1980], ['ben', 1320, 1680]],
    '10:30'],
   [['ana', 6, 1, 'overlap'], ['ben', 8, 7, 'overlap'], ['ben', 7, 3, 'overlap'], ['ben', 3, 2, 'overlap']]),
  ('normal control 8',
   [[['dev', 1320, 1800], ['ana', 2690, 3410], ['chi', 3440, 4040], ['dev', 4720, 5200], ['chi', 4040, 4640],
     ['ana', 2000, 2720], ['chi', 2000, 2600], ['dev', 2500, 3220], ['chi', 2600, 2840]],
    '10:30'],
   [['ana', 5, 1, 'overlap'], ['chi', 6, 8, 'short_rest'], ['chi', 8, 2, 'short_rest'],
    ['chi', 2, 4, 'short_rest']])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: latest end tracking 1[['ana', 0, 1, 'overlap'], ['ana', 0, 2, 'overlap']][['ana', 0, 1, 'overlap'], ['ana', 0, 2, 'overlap']]Passed
regression variant: latest end tracking 2[['chi', 5, 8, 'overlap'], ['chi', 5, 3, 'short_rest'], ['dev', 6, 0, 'overlap']][['chi', 5, 8, 'overlap'], ['chi', 5, 3, 'short_rest'], ['dev', 6, 0, 'overlap']]Passed
partial repair guard 3[['chi', 0, 5, 'short_rest'], ['chi', 5, 7, 'short_rest']][['chi', 0, 5, 'short_rest'], ['chi', 5, 7, 'short_rest']]Passed
boundary control 4[['ana', 0, 1, 'short_rest']][['ana', 0, 1, 'short_rest']]Passed
normal control 5[][]Passed
normal control 6[][]Passed
normal control 7[['ana', 6, 1, 'overlap'], ['ben', 8, 7, 'overlap'], ['ben', 7, 3, 'overlap'], ['ben', 3, 2, 'overlap']][['ana', 6, 1, 'overlap'], ['ben', 8, 7, 'overlap'], ['ben', 7, 3, 'overlap'], ['ben', 3, 2, 'overlap']]Passed
normal control 8[['dev', 0, 1, 'overlap'], ['dev', 1, 2, 'short_rest']][['dev', 0, 1, 'overlap'], ['dev', 1, 2, 'short_rest']]Passed

SHA-256 / e86e0469d405a33686cb25049c504e6db02e4477452b2b6659a694f5cfd52274

Verification & scope

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.

Observations recorded using Python 3.12.14 at 2026-09-29T14:51:58.973263+00:00.

Case digest / 9d70bc658c71b482df3580bfa9c1b5e63fb789a08784a9c25e9ec8f35de2e0f2