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.
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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