FA-94106 / Shift rostering labor rules / Open access
Swap qualification checked against the shift each worker gives away · case 01
An unqualified nurse can take an ICU shift as long as the shift they hand over matches their skills.
ROOT CAUSE
Each worker is validated against their outgoing shift instead of the incoming one.
VERIFIED REPAIR
Validate each receiver against the shift they receive.
Unsuccessful approach: Validating only the partner who takes the original shift misses the other direction.
Case contract
roster maps worker to shifts [id, start, end, skill]; req = [a, b, a_gives, b_gives or None]. After the swap a holds its shifts minus a_gives plus b's shift, b holds its shifts minus b_gives plus a's shift. Checks in order: receiver qualified for each received shift (a then b), then for a then b sorted by start: overlap, then rest below the minimum, then total minutes above cap. Return the first failure [reason, worker] or ["ok", None].
Why this case matters
Self-service shift swaps must be revalidated against labor rules for both parties after the exchange.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(roster, quals, req, rest, cap):
a, b, ga, gb = req
sa = [t for t in roster[a] if t[0] == ga][0]
sb = [t for t in roster[b] if t[0] == gb]
sb = sb[0] if sb else None
new = {a: [t for t in roster[a] if t[0] != ga] + ([sb] if sb else []),
b: [t for t in roster[b] if t[0] != gb] + [sa]}
got = {a: sa, b: sb}
for w in (a, b):
if got[w] and got[w][3] not in quals[w]:
return ['qual', w]
for w in (a, b):
seq = sorted(new[w], key=lambda t: t[1])
for p, q in zip(seq, seq[1:]):
if q[1] < p[2]:
return ['overlap', w]
if q[1] - p[2] < rest:
return ['rest', w]
for w in (a, b):
if sum(t[2] - t[1] for t in new[w]) > cap:
return ['cap', w]
return ['ok', None]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: qualification receiver 1',
[{'a': [['s', 0, 480, 'icu']], 'b': [['u', 2000, 2480, 'rn']]}, {'a': ['rn', 'icu'], 'b': ['rn']},
['a', 'b', 's', 'u'], 600, 960],
['qual', 'b']),
('regression variant: qualification receiver 2',
[{'a': [['t', 1240, 1720, 'icu'], ['s', 60, 540, 'rn'], ['u', 2720, 3320, 'rn']],
'b': [['w', 1300, 1780, 'rn'], ['v', 0, 600, 'icu'], ['x', 2480, 3080, 'icu']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'x'], 600, 1440],
['qual', 'a']),
('partial repair guard 3',
[{'a': [['s', 0, 480, 'rn']],
'b': [['v', 2500, 2980, 'rn'], ['t', 0, 600, 'icu'], ['u', 1300, 1900, 'rn']]},
{'a': ['rn'], 'b': ['rn']}, ['a', 'b', 's', 't'], 600, 1440],
['qual', 'a']),
('boundary control 4',
[{'a': [['s', 0, 480, 'rn']], 'b': [['u', 1080, 1560, 'rn']]}, {'a': ['rn'], 'b': ['rn']},
['a', 'b', 's', None], 600, 960],
['ok', None]),
('normal control 5',
[{'a': [['t', 840, 1080, 'rn'], ['s', 0, 240, 'icu']],
'b': [['v', 1360, 1840, 'rn'], ['u', 60, 660, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 's', None], 600, 960],
['overlap', 'b']),
('normal control 6',
[{'a': [['t', 600, 1080, 'rn'], ['s', 60, 300, 'rn']], 'b': [['u', 60, 540, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'u'], 600, 1200],
['overlap', 'a']),
('normal control 7',
[{'a': [['s', 60, 660, 'rn'], ['t', 960, 1440, 'rn']],
'b': [['v', 1260, 1860, 'rn'], ['u', 60, 660, 'rn']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', None], 600, 1200],
['overlap', 'b']),
('normal control 8',
[{'a': [['s', 0, 480, 'rn'], ['t', 1180, 1660, 'rn']],
'b': [['v', 1240, 1840, 'icu'], ['w', 2439, 2919, 'icu'], ['u', 60, 540, 'icu']]},
{'a': ['rn'], 'b': ['rn']}, ['a', 'b', 't', 'u'], 600, 1200],
['qual', 'a'])],
[('regression: qualification receiver 1',
[{'a': [['s', 60, 540, 'rn'], ['u', 1919, 2519, 'rn'], ['t', 1139, 1619, 'icu']],
'b': [['x', 2218, 2818, 'rn'], ['v', 60, 540, 'icu'], ['w', 1139, 1619, 'rn']]},
{'a': ['rn'], 'b': ['rn']}, ['a', 'b', 't', None], 600, 960],
['qual', 'b']),
('regression variant: qualification receiver 2',
[{'a': [['s', 60, 660, 'rn']],
'b': [['t', 0, 240, 'icu'], ['u', 840, 1440, 'icu'], ['v', 2440, 2680, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 's', 't'], 600, 1200],
['rest', 'b']),
('partial repair guard 3',
[{'a': [['s', 60, 660, 'icu'], ['t', 1260, 1740, 'rn']],
'b': [['w', 2019, 2499, 'rn'], ['u', 0, 240, 'rn'], ['v', 940, 1420, 'icu']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'v'], 600, 1200],
['qual', 'a']),
('boundary control 4',
[{'a': [['s', 0, 720, 'rn'], ['t', 1400, 1880, 'rn']], 'b': [['u', 3000, 3240, 'rn']]},
{'a': ['rn'], 'b': ['rn']}, ['a', 'b', 's', 'u'], 600, 720],
['ok', None]),
('normal control 5',
[{'a': [['s', 60, 660, 'icu']], 'b': [['t', 60, 540, 'rn'], ['u', 1240, 1480, 'rn']]},
{'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 's', None], 600, 1440],
['overlap', 'b']),
('normal control 6',
[{'a': [['s', 0, 240, 'rn']], 'b': [['u', 1140, 1740, 'icu'], ['t', 60, 540, 'icu']]},
{'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 's', 't'], 600, 1200],
['ok', None]),
('normal control 7',
[{'a': [['u', 2200, 2440, 'rn'], ['s', 60, 660, 'rn'], ['t', 1360, 1600, 'rn']],
'b': [['v', 0, 240, 'rn'], ['w', 839, 1079, 'rn']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 'u', 'v'], 600, 960],
['overlap', 'a']),
('normal control 8',
[{'a': [['u', 2200, 2680, 'rn'], ['s', 60, 300, 'rn'], ['t', 900, 1500, 'rn']],
'b': [['x', 2680, 3160, 'icu'], ['v', 0, 600, 'icu'], ['w', 1600, 2080, 'icu']]},
{'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'v'], 600, 1440],
['overlap', 'a'])],
[('regression: qualification receiver 1',
[{'a': [['s', 0, 480, 'icu'], ['t', 1180, 1660, 'rn'], ['u', 2259, 2499, 'rn']],
'b': [['v', 0, 480, 'rn'], ['x', 1919, 2399, 'icu'], ['w', 1079, 1319, 'rn']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'w'], 600, 960],
['overlap', 'a']),
('regression variant: qualification receiver 2',
[{'a': [['u', 2560, 3040, 'icu'], ['t', 1260, 1860, 'icu'], ['s', 60, 660, 'rn']],
'b': [['v', 60, 300, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 'u', 'v'], 600, 1440],
['qual', 'b']),
('partial repair guard 3',
[{'a': [['t', 1240, 1720, 'rn'], ['s', 60, 540, 'rn']], 'b': [['u', 0, 240, 'icu']]},
{'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', 'u'], 600, 960],
['qual', 'a']),
('boundary control 4',
[{'a': [['s', 0, 480, 'icu']], 'b': [['u', 2000, 2480, 'rn']]}, {'a': ['rn', 'icu'], 'b': ['rn']},
['a', 'b', 's', 'u'], 600, 960],
['qual', 'b']),
('normal control 5',
[{'a': [['s', 0, 480, 'icu'], ['t', 1480, 1720, 'rn']],
'b': [['u', 60, 300, 'rn'], ['v', 1000, 1480, 'icu'], ['w', 1780, 2260, 'rn']]},
{'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 's', 'u'], 600, 1440],
['rest', 'b']),
('normal control 6',
[{'a': [['s', 60, 540, 'rn']],
'b': [['t', 0, 600, 'icu'], ['u', 1600, 2200, 'rn'], ['v', 3200, 3440, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'v'], 600, 1440],
['overlap', 'b']),
('normal control 7',
[{'a': [['s', 60, 300, 'rn'], ['t', 899, 1499, 'icu']],
'b': [['u', 60, 660, 'icu'], ['v', 960, 1440, 'rn']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'v'], 600, 960],
['rest', 'b']),
('normal control 8',
[{'a': [['s', 0, 480, 'rn'], ['t', 1180, 1420, 'rn']], 'b': [['u', 0, 600, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', None], 600, 1440],
['rest', 'b'])],
[('regression: qualification receiver 1',
[{'a': [['t', 1240, 1720, 'icu'], ['s', 0, 240, 'rn']],
'b': [['u', 60, 300, 'rn'], ['v', 1300, 1780, 'icu']]},
{'a': ['rn'], 'b': ['rn']}, ['a', 'b', 't', 'u'], 600, 1200],
['qual', 'b']),
('regression variant: qualification receiver 2',
[{'a': [['t', 1360, 1600, 'rn'], ['s', 60, 660, 'icu']],
'b': [['u', 0, 480, 'rn'], ['v', 1079, 1559, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 's', 'v'], 600, 1200],
['qual', 'b']),
('partial repair guard 3',
[{'a': [['s', 0, 600, 'rn'], ['t', 1600, 1840, 'rn']],
'b': [['v', 780, 1020, 'icu'], ['u', 0, 480, 'icu']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'u'], 600, 1440],
['qual', 'a']),
('boundary control 4',
[{'a': [['t', 1200, 1680, 'rn'], ['s', 0, 700, 'icu']], 'b': [['u', 3000, 3700, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 's', 'u'], 600, 1180],
['ok', None]),
('normal control 5',
[{'a': [['s', 0, 240, 'icu']], 'b': [['t', 0, 480, 'icu'], ['u', 1180, 1780, 'icu']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'u'], 600, 960],
['qual', 'a']),
('normal control 6',
[{'a': [['u', 1839, 2439, 'icu'], ['t', 1000, 1240, 'rn'], ['s', 60, 300, 'rn']],
'b': [['w', 1240, 1480, 'icu'], ['v', 0, 240, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 'u', 'v'], 600, 960],
['overlap', 'a']),
('normal control 7',
[{'a': [['t', 600, 1080, 'rn'], ['s', 60, 300, 'icu']],
'b': [['v', 1360, 1840, 'icu'], ['u', 60, 660, 'rn'], ['w', 2140, 2740, 'icu']]},
{'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'u'], 600, 1440],
['overlap', 'a']),
('normal control 8',
[{'a': [['s', 0, 480, 'rn']], 'b': [['t', 60, 300, 'rn']]}, {'a': ['rn'], 'b': ['rn']},
['a', 'b', 's', None], 600, 1200],
['overlap', 'b'])],
[('regression: qualification receiver 1',
[{'a': [['t', 1300, 1780, 'rn'], ['s', 0, 600, 'rn']], 'b': [['u', 60, 660, 'icu']]},
{'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 't', 'u'], 600, 960],
['overlap', 'a']),
('regression variant: qualification receiver 2',
[{'a': [['t', 1240, 1720, 'rn'], ['s', 60, 540, 'rn']], 'b': [['u', 0, 240, 'icu']]},
{'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', 'u'], 600, 960],
['qual', 'a']),
('partial repair guard 3',
[{'a': [['s', 60, 540, 'rn'], ['u', 2420, 3020, 'rn'], ['t', 1240, 1720, 'rn']],
'b': [['v', 60, 660, 'icu']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'v'], 600, 1440],
['qual', 'a']),
('boundary control 4',
[{'a': [['s', 0, 600, 'rn'], ['t', 1200, 1680, 'rn']], 'b': [['u', 3000, 3480, 'rn']]},
{'a': ['rn'], 'b': ['rn']}, ['a', 'b', 's', 'u'], 600, 960],
['ok', None]),
('normal control 5',
[{'a': [['t', 1079, 1679, 'rn'], ['u', 2679, 2919, 'rn'], ['s', 0, 480, 'rn']],
'b': [['v', 0, 240, 'rn'], ['w', 1240, 1480, 'rn']]},
{'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', 'w'], 600, 1440],
['ok', None]),
('normal control 6',
[{'a': [['s', 60, 540, 'rn'], ['t', 1540, 2140, 'rn'], ['u', 2739, 2979, 'icu']],
'b': [['w', 1180, 1660, 'rn'], ['v', 0, 480, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 's', None], 600, 1200],
['rest', 'a']),
('normal control 7',
[{'a': [['t', 1240, 1480, 'rn'], ['s', 0, 240, 'icu']],
'b': [['u', 0, 600, 'rn'], ['v', 1200, 1800, 'rn']]},
{'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', None], 600, 1200],
['overlap', 'b']),
('normal control 8',
[{'a': [['t', 960, 1440, 'rn'], ['s', 60, 660, 'rn']],
'b': [['v', 1140, 1620, 'icu'], ['u', 60, 540, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 's', 'u'], 600, 1440],
['rest', 'a'])]]
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: qualification receiver 1 | ['ok', None] | ['qual', 'b'] | Failed |
| regression variant: qualification receiver 2 | ['overlap', 'a'] | ['qual', 'a'] | Failed |
| partial repair guard 3 | ['qual', 'b'] | ['qual', 'a'] | Failed |
| boundary control 4 | ['ok', None] | ['ok', None] | Passed |
| normal control 5 | ['overlap', 'b'] | ['overlap', 'b'] | Passed |
| normal control 6 | ['overlap', 'a'] | ['overlap', 'a'] | Passed |
| normal control 7 | ['overlap', 'b'] | ['overlap', 'b'] | Passed |
| normal control 8 | ['qual', 'b'] | ['qual', 'a'] | Failed |
SHA-256 / 0d491bfcb58aa918471d847067f4e4d33b5f8151ca6d68a45a7e7544849314c7
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(roster, quals, req, rest, cap):
a, b, ga, gb = req
sa = [t for t in roster[a] if t[0] == ga][0]
sb = [t for t in roster[b] if t[0] == gb]
sb = sb[0] if sb else None
new = {a: [t for t in roster[a] if t[0] != ga] + ([sb] if sb else []),
b: [t for t in roster[b] if t[0] != gb] + [sa]}
got = {a: None, b: sa}
for w in (a, b):
if got[w] and got[w][3] not in quals[w]:
return ['qual', w]
for w in (a, b):
seq = sorted(new[w], key=lambda t: t[1])
for p, q in zip(seq, seq[1:]):
if q[1] < p[2]:
return ['overlap', w]
if q[1] - p[2] < rest:
return ['rest', w]
for w in (a, b):
if sum(t[2] - t[1] for t in new[w]) > cap:
return ['cap', w]
return ['ok', None]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: qualification receiver 1',
[{'a': [['s', 0, 480, 'icu']], 'b': [['u', 2000, 2480, 'rn']]}, {'a': ['rn', 'icu'], 'b': ['rn']},
['a', 'b', 's', 'u'], 600, 960],
['qual', 'b']),
('regression variant: qualification receiver 2',
[{'a': [['t', 1240, 1720, 'icu'], ['s', 60, 540, 'rn'], ['u', 2720, 3320, 'rn']],
'b': [['w', 1300, 1780, 'rn'], ['v', 0, 600, 'icu'], ['x', 2480, 3080, 'icu']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'x'], 600, 1440],
['qual', 'a']),
('partial repair guard 3',
[{'a': [['s', 0, 480, 'rn']],
'b': [['v', 2500, 2980, 'rn'], ['t', 0, 600, 'icu'], ['u', 1300, 1900, 'rn']]},
{'a': ['rn'], 'b': ['rn']}, ['a', 'b', 's', 't'], 600, 1440],
['qual', 'a']),
('boundary control 4',
[{'a': [['s', 0, 480, 'rn']], 'b': [['u', 1080, 1560, 'rn']]}, {'a': ['rn'], 'b': ['rn']},
['a', 'b', 's', None], 600, 960],
['ok', None]),
('normal control 5',
[{'a': [['t', 840, 1080, 'rn'], ['s', 0, 240, 'icu']],
'b': [['v', 1360, 1840, 'rn'], ['u', 60, 660, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 's', None], 600, 960],
['overlap', 'b']),
('normal control 6',
[{'a': [['t', 600, 1080, 'rn'], ['s', 60, 300, 'rn']], 'b': [['u', 60, 540, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'u'], 600, 1200],
['overlap', 'a']),
('normal control 7',
[{'a': [['s', 60, 660, 'rn'], ['t', 960, 1440, 'rn']],
'b': [['v', 1260, 1860, 'rn'], ['u', 60, 660, 'rn']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', None], 600, 1200],
['overlap', 'b']),
('normal control 8',
[{'a': [['s', 0, 480, 'rn'], ['t', 1180, 1660, 'rn']],
'b': [['v', 1240, 1840, 'icu'], ['w', 2439, 2919, 'icu'], ['u', 60, 540, 'icu']]},
{'a': ['rn'], 'b': ['rn']}, ['a', 'b', 't', 'u'], 600, 1200],
['qual', 'a'])],
[('regression: qualification receiver 1',
[{'a': [['s', 60, 540, 'rn'], ['u', 1919, 2519, 'rn'], ['t', 1139, 1619, 'icu']],
'b': [['x', 2218, 2818, 'rn'], ['v', 60, 540, 'icu'], ['w', 1139, 1619, 'rn']]},
{'a': ['rn'], 'b': ['rn']}, ['a', 'b', 't', None], 600, 960],
['qual', 'b']),
('regression variant: qualification receiver 2',
[{'a': [['s', 60, 660, 'rn']],
'b': [['t', 0, 240, 'icu'], ['u', 840, 1440, 'icu'], ['v', 2440, 2680, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 's', 't'], 600, 1200],
['rest', 'b']),
('partial repair guard 3',
[{'a': [['s', 60, 660, 'icu'], ['t', 1260, 1740, 'rn']],
'b': [['w', 2019, 2499, 'rn'], ['u', 0, 240, 'rn'], ['v', 940, 1420, 'icu']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'v'], 600, 1200],
['qual', 'a']),
('boundary control 4',
[{'a': [['s', 0, 720, 'rn'], ['t', 1400, 1880, 'rn']], 'b': [['u', 3000, 3240, 'rn']]},
{'a': ['rn'], 'b': ['rn']}, ['a', 'b', 's', 'u'], 600, 720],
['ok', None]),
('normal control 5',
[{'a': [['s', 60, 660, 'icu']], 'b': [['t', 60, 540, 'rn'], ['u', 1240, 1480, 'rn']]},
{'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 's', None], 600, 1440],
['overlap', 'b']),
('normal control 6',
[{'a': [['s', 0, 240, 'rn']], 'b': [['u', 1140, 1740, 'icu'], ['t', 60, 540, 'icu']]},
{'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 's', 't'], 600, 1200],
['ok', None]),
('normal control 7',
[{'a': [['u', 2200, 2440, 'rn'], ['s', 60, 660, 'rn'], ['t', 1360, 1600, 'rn']],
'b': [['v', 0, 240, 'rn'], ['w', 839, 1079, 'rn']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 'u', 'v'], 600, 960],
['overlap', 'a']),
('normal control 8',
[{'a': [['u', 2200, 2680, 'rn'], ['s', 60, 300, 'rn'], ['t', 900, 1500, 'rn']],
'b': [['x', 2680, 3160, 'icu'], ['v', 0, 600, 'icu'], ['w', 1600, 2080, 'icu']]},
{'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'v'], 600, 1440],
['overlap', 'a'])],
[('regression: qualification receiver 1',
[{'a': [['s', 0, 480, 'icu'], ['t', 1180, 1660, 'rn'], ['u', 2259, 2499, 'rn']],
'b': [['v', 0, 480, 'rn'], ['x', 1919, 2399, 'icu'], ['w', 1079, 1319, 'rn']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'w'], 600, 960],
['overlap', 'a']),
('regression variant: qualification receiver 2',
[{'a': [['u', 2560, 3040, 'icu'], ['t', 1260, 1860, 'icu'], ['s', 60, 660, 'rn']],
'b': [['v', 60, 300, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 'u', 'v'], 600, 1440],
['qual', 'b']),
('partial repair guard 3',
[{'a': [['t', 1240, 1720, 'rn'], ['s', 60, 540, 'rn']], 'b': [['u', 0, 240, 'icu']]},
{'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', 'u'], 600, 960],
['qual', 'a']),
('boundary control 4',
[{'a': [['s', 0, 480, 'icu']], 'b': [['u', 2000, 2480, 'rn']]}, {'a': ['rn', 'icu'], 'b': ['rn']},
['a', 'b', 's', 'u'], 600, 960],
['qual', 'b']),
('normal control 5',
[{'a': [['s', 0, 480, 'icu'], ['t', 1480, 1720, 'rn']],
'b': [['u', 60, 300, 'rn'], ['v', 1000, 1480, 'icu'], ['w', 1780, 2260, 'rn']]},
{'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 's', 'u'], 600, 1440],
['rest', 'b']),
('normal control 6',
[{'a': [['s', 60, 540, 'rn']],
'b': [['t', 0, 600, 'icu'], ['u', 1600, 2200, 'rn'], ['v', 3200, 3440, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'v'], 600, 1440],
['overlap', 'b']),
('normal control 7',
[{'a': [['s', 60, 300, 'rn'], ['t', 899, 1499, 'icu']],
'b': [['u', 60, 660, 'icu'], ['v', 960, 1440, 'rn']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'v'], 600, 960],
['rest', 'b']),
('normal control 8',
[{'a': [['s', 0, 480, 'rn'], ['t', 1180, 1420, 'rn']], 'b': [['u', 0, 600, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', None], 600, 1440],
['rest', 'b'])],
[('regression: qualification receiver 1',
[{'a': [['t', 1240, 1720, 'icu'], ['s', 0, 240, 'rn']],
'b': [['u', 60, 300, 'rn'], ['v', 1300, 1780, 'icu']]},
{'a': ['rn'], 'b': ['rn']}, ['a', 'b', 't', 'u'], 600, 1200],
['qual', 'b']),
('regression variant: qualification receiver 2',
[{'a': [['t', 1360, 1600, 'rn'], ['s', 60, 660, 'icu']],
'b': [['u', 0, 480, 'rn'], ['v', 1079, 1559, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 's', 'v'], 600, 1200],
['qual', 'b']),
('partial repair guard 3',
[{'a': [['s', 0, 600, 'rn'], ['t', 1600, 1840, 'rn']],
'b': [['v', 780, 1020, 'icu'], ['u', 0, 480, 'icu']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'u'], 600, 1440],
['qual', 'a']),
('boundary control 4',
[{'a': [['t', 1200, 1680, 'rn'], ['s', 0, 700, 'icu']], 'b': [['u', 3000, 3700, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 's', 'u'], 600, 1180],
['ok', None]),
('normal control 5',
[{'a': [['s', 0, 240, 'icu']], 'b': [['t', 0, 480, 'icu'], ['u', 1180, 1780, 'icu']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'u'], 600, 960],
['qual', 'a']),
('normal control 6',
[{'a': [['u', 1839, 2439, 'icu'], ['t', 1000, 1240, 'rn'], ['s', 60, 300, 'rn']],
'b': [['w', 1240, 1480, 'icu'], ['v', 0, 240, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 'u', 'v'], 600, 960],
['overlap', 'a']),
('normal control 7',
[{'a': [['t', 600, 1080, 'rn'], ['s', 60, 300, 'icu']],
'b': [['v', 1360, 1840, 'icu'], ['u', 60, 660, 'rn'], ['w', 2140, 2740, 'icu']]},
{'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'u'], 600, 1440],
['overlap', 'a']),
('normal control 8',
[{'a': [['s', 0, 480, 'rn']], 'b': [['t', 60, 300, 'rn']]}, {'a': ['rn'], 'b': ['rn']},
['a', 'b', 's', None], 600, 1200],
['overlap', 'b'])],
[('regression: qualification receiver 1',
[{'a': [['t', 1300, 1780, 'rn'], ['s', 0, 600, 'rn']], 'b': [['u', 60, 660, 'icu']]},
{'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 't', 'u'], 600, 960],
['overlap', 'a']),
('regression variant: qualification receiver 2',
[{'a': [['t', 1240, 1720, 'rn'], ['s', 60, 540, 'rn']], 'b': [['u', 0, 240, 'icu']]},
{'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', 'u'], 600, 960],
['qual', 'a']),
('partial repair guard 3',
[{'a': [['s', 60, 540, 'rn'], ['u', 2420, 3020, 'rn'], ['t', 1240, 1720, 'rn']],
'b': [['v', 60, 660, 'icu']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'v'], 600, 1440],
['qual', 'a']),
('boundary control 4',
[{'a': [['s', 0, 600, 'rn'], ['t', 1200, 1680, 'rn']], 'b': [['u', 3000, 3480, 'rn']]},
{'a': ['rn'], 'b': ['rn']}, ['a', 'b', 's', 'u'], 600, 960],
['ok', None]),
('normal control 5',
[{'a': [['t', 1079, 1679, 'rn'], ['u', 2679, 2919, 'rn'], ['s', 0, 480, 'rn']],
'b': [['v', 0, 240, 'rn'], ['w', 1240, 1480, 'rn']]},
{'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', 'w'], 600, 1440],
['ok', None]),
('normal control 6',
[{'a': [['s', 60, 540, 'rn'], ['t', 1540, 2140, 'rn'], ['u', 2739, 2979, 'icu']],
'b': [['w', 1180, 1660, 'rn'], ['v', 0, 480, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 's', None], 600, 1200],
['rest', 'a']),
('normal control 7',
[{'a': [['t', 1240, 1480, 'rn'], ['s', 0, 240, 'icu']],
'b': [['u', 0, 600, 'rn'], ['v', 1200, 1800, 'rn']]},
{'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', None], 600, 1200],
['overlap', 'b']),
('normal control 8',
[{'a': [['t', 960, 1440, 'rn'], ['s', 60, 660, 'rn']],
'b': [['v', 1140, 1620, 'icu'], ['u', 60, 540, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 's', 'u'], 600, 1440],
['rest', 'a'])]]
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: qualification receiver 1 | ['qual', 'b'] | ['qual', 'b'] | Passed |
| regression variant: qualification receiver 2 | ['overlap', 'a'] | ['qual', 'a'] | Failed |
| partial repair guard 3 | ['cap', 'b'] | ['qual', 'a'] | Failed |
| boundary control 4 | ['ok', None] | ['ok', None] | Passed |
| normal control 5 | ['overlap', 'b'] | ['overlap', 'b'] | Passed |
| normal control 6 | ['overlap', 'a'] | ['overlap', 'a'] | Passed |
| normal control 7 | ['overlap', 'b'] | ['overlap', 'b'] | Passed |
| normal control 8 | ['overlap', 'a'] | ['qual', 'a'] | Failed |
SHA-256 / af959bd7c8c9c592ba4b6a24c2f51de2341e654ce114856a8a455de182a45ddd
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(roster, quals, req, rest, cap):
a, b, ga, gb = req
sa = [t for t in roster[a] if t[0] == ga][0]
sb = [t for t in roster[b] if t[0] == gb]
sb = sb[0] if sb else None
new = {a: [t for t in roster[a] if t[0] != ga] + ([sb] if sb else []),
b: [t for t in roster[b] if t[0] != gb] + [sa]}
got = {a: sb, b: sa}
for w in (a, b):
if got[w] and got[w][3] not in quals[w]:
return ['qual', w]
for w in (a, b):
seq = sorted(new[w], key=lambda t: t[1])
for p, q in zip(seq, seq[1:]):
if q[1] < p[2]:
return ['overlap', w]
if q[1] - p[2] < rest:
return ['rest', w]
for w in (a, b):
if sum(t[2] - t[1] for t in new[w]) > cap:
return ['cap', w]
return ['ok', None]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: qualification receiver 1',
[{'a': [['s', 0, 480, 'icu']], 'b': [['u', 2000, 2480, 'rn']]}, {'a': ['rn', 'icu'], 'b': ['rn']},
['a', 'b', 's', 'u'], 600, 960],
['qual', 'b']),
('regression variant: qualification receiver 2',
[{'a': [['t', 1240, 1720, 'icu'], ['s', 60, 540, 'rn'], ['u', 2720, 3320, 'rn']],
'b': [['w', 1300, 1780, 'rn'], ['v', 0, 600, 'icu'], ['x', 2480, 3080, 'icu']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'x'], 600, 1440],
['qual', 'a']),
('partial repair guard 3',
[{'a': [['s', 0, 480, 'rn']],
'b': [['v', 2500, 2980, 'rn'], ['t', 0, 600, 'icu'], ['u', 1300, 1900, 'rn']]},
{'a': ['rn'], 'b': ['rn']}, ['a', 'b', 's', 't'], 600, 1440],
['qual', 'a']),
('boundary control 4',
[{'a': [['s', 0, 480, 'rn']], 'b': [['u', 1080, 1560, 'rn']]}, {'a': ['rn'], 'b': ['rn']},
['a', 'b', 's', None], 600, 960],
['ok', None]),
('normal control 5',
[{'a': [['t', 840, 1080, 'rn'], ['s', 0, 240, 'icu']],
'b': [['v', 1360, 1840, 'rn'], ['u', 60, 660, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 's', None], 600, 960],
['overlap', 'b']),
('normal control 6',
[{'a': [['t', 600, 1080, 'rn'], ['s', 60, 300, 'rn']], 'b': [['u', 60, 540, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'u'], 600, 1200],
['overlap', 'a']),
('normal control 7',
[{'a': [['s', 60, 660, 'rn'], ['t', 960, 1440, 'rn']],
'b': [['v', 1260, 1860, 'rn'], ['u', 60, 660, 'rn']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', None], 600, 1200],
['overlap', 'b']),
('normal control 8',
[{'a': [['s', 0, 480, 'rn'], ['t', 1180, 1660, 'rn']],
'b': [['v', 1240, 1840, 'icu'], ['w', 2439, 2919, 'icu'], ['u', 60, 540, 'icu']]},
{'a': ['rn'], 'b': ['rn']}, ['a', 'b', 't', 'u'], 600, 1200],
['qual', 'a'])],
[('regression: qualification receiver 1',
[{'a': [['s', 60, 540, 'rn'], ['u', 1919, 2519, 'rn'], ['t', 1139, 1619, 'icu']],
'b': [['x', 2218, 2818, 'rn'], ['v', 60, 540, 'icu'], ['w', 1139, 1619, 'rn']]},
{'a': ['rn'], 'b': ['rn']}, ['a', 'b', 't', None], 600, 960],
['qual', 'b']),
('regression variant: qualification receiver 2',
[{'a': [['s', 60, 660, 'rn']],
'b': [['t', 0, 240, 'icu'], ['u', 840, 1440, 'icu'], ['v', 2440, 2680, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 's', 't'], 600, 1200],
['rest', 'b']),
('partial repair guard 3',
[{'a': [['s', 60, 660, 'icu'], ['t', 1260, 1740, 'rn']],
'b': [['w', 2019, 2499, 'rn'], ['u', 0, 240, 'rn'], ['v', 940, 1420, 'icu']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'v'], 600, 1200],
['qual', 'a']),
('boundary control 4',
[{'a': [['s', 0, 720, 'rn'], ['t', 1400, 1880, 'rn']], 'b': [['u', 3000, 3240, 'rn']]},
{'a': ['rn'], 'b': ['rn']}, ['a', 'b', 's', 'u'], 600, 720],
['ok', None]),
('normal control 5',
[{'a': [['s', 60, 660, 'icu']], 'b': [['t', 60, 540, 'rn'], ['u', 1240, 1480, 'rn']]},
{'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 's', None], 600, 1440],
['overlap', 'b']),
('normal control 6',
[{'a': [['s', 0, 240, 'rn']], 'b': [['u', 1140, 1740, 'icu'], ['t', 60, 540, 'icu']]},
{'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 's', 't'], 600, 1200],
['ok', None]),
('normal control 7',
[{'a': [['u', 2200, 2440, 'rn'], ['s', 60, 660, 'rn'], ['t', 1360, 1600, 'rn']],
'b': [['v', 0, 240, 'rn'], ['w', 839, 1079, 'rn']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 'u', 'v'], 600, 960],
['overlap', 'a']),
('normal control 8',
[{'a': [['u', 2200, 2680, 'rn'], ['s', 60, 300, 'rn'], ['t', 900, 1500, 'rn']],
'b': [['x', 2680, 3160, 'icu'], ['v', 0, 600, 'icu'], ['w', 1600, 2080, 'icu']]},
{'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'v'], 600, 1440],
['overlap', 'a'])],
[('regression: qualification receiver 1',
[{'a': [['s', 0, 480, 'icu'], ['t', 1180, 1660, 'rn'], ['u', 2259, 2499, 'rn']],
'b': [['v', 0, 480, 'rn'], ['x', 1919, 2399, 'icu'], ['w', 1079, 1319, 'rn']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'w'], 600, 960],
['overlap', 'a']),
('regression variant: qualification receiver 2',
[{'a': [['u', 2560, 3040, 'icu'], ['t', 1260, 1860, 'icu'], ['s', 60, 660, 'rn']],
'b': [['v', 60, 300, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 'u', 'v'], 600, 1440],
['qual', 'b']),
('partial repair guard 3',
[{'a': [['t', 1240, 1720, 'rn'], ['s', 60, 540, 'rn']], 'b': [['u', 0, 240, 'icu']]},
{'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', 'u'], 600, 960],
['qual', 'a']),
('boundary control 4',
[{'a': [['s', 0, 480, 'icu']], 'b': [['u', 2000, 2480, 'rn']]}, {'a': ['rn', 'icu'], 'b': ['rn']},
['a', 'b', 's', 'u'], 600, 960],
['qual', 'b']),
('normal control 5',
[{'a': [['s', 0, 480, 'icu'], ['t', 1480, 1720, 'rn']],
'b': [['u', 60, 300, 'rn'], ['v', 1000, 1480, 'icu'], ['w', 1780, 2260, 'rn']]},
{'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 's', 'u'], 600, 1440],
['rest', 'b']),
('normal control 6',
[{'a': [['s', 60, 540, 'rn']],
'b': [['t', 0, 600, 'icu'], ['u', 1600, 2200, 'rn'], ['v', 3200, 3440, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'v'], 600, 1440],
['overlap', 'b']),
('normal control 7',
[{'a': [['s', 60, 300, 'rn'], ['t', 899, 1499, 'icu']],
'b': [['u', 60, 660, 'icu'], ['v', 960, 1440, 'rn']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'v'], 600, 960],
['rest', 'b']),
('normal control 8',
[{'a': [['s', 0, 480, 'rn'], ['t', 1180, 1420, 'rn']], 'b': [['u', 0, 600, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', None], 600, 1440],
['rest', 'b'])],
[('regression: qualification receiver 1',
[{'a': [['t', 1240, 1720, 'icu'], ['s', 0, 240, 'rn']],
'b': [['u', 60, 300, 'rn'], ['v', 1300, 1780, 'icu']]},
{'a': ['rn'], 'b': ['rn']}, ['a', 'b', 't', 'u'], 600, 1200],
['qual', 'b']),
('regression variant: qualification receiver 2',
[{'a': [['t', 1360, 1600, 'rn'], ['s', 60, 660, 'icu']],
'b': [['u', 0, 480, 'rn'], ['v', 1079, 1559, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 's', 'v'], 600, 1200],
['qual', 'b']),
('partial repair guard 3',
[{'a': [['s', 0, 600, 'rn'], ['t', 1600, 1840, 'rn']],
'b': [['v', 780, 1020, 'icu'], ['u', 0, 480, 'icu']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'u'], 600, 1440],
['qual', 'a']),
('boundary control 4',
[{'a': [['t', 1200, 1680, 'rn'], ['s', 0, 700, 'icu']], 'b': [['u', 3000, 3700, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 's', 'u'], 600, 1180],
['ok', None]),
('normal control 5',
[{'a': [['s', 0, 240, 'icu']], 'b': [['t', 0, 480, 'icu'], ['u', 1180, 1780, 'icu']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'u'], 600, 960],
['qual', 'a']),
('normal control 6',
[{'a': [['u', 1839, 2439, 'icu'], ['t', 1000, 1240, 'rn'], ['s', 60, 300, 'rn']],
'b': [['w', 1240, 1480, 'icu'], ['v', 0, 240, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 'u', 'v'], 600, 960],
['overlap', 'a']),
('normal control 7',
[{'a': [['t', 600, 1080, 'rn'], ['s', 60, 300, 'icu']],
'b': [['v', 1360, 1840, 'icu'], ['u', 60, 660, 'rn'], ['w', 2140, 2740, 'icu']]},
{'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'u'], 600, 1440],
['overlap', 'a']),
('normal control 8',
[{'a': [['s', 0, 480, 'rn']], 'b': [['t', 60, 300, 'rn']]}, {'a': ['rn'], 'b': ['rn']},
['a', 'b', 's', None], 600, 1200],
['overlap', 'b'])],
[('regression: qualification receiver 1',
[{'a': [['t', 1300, 1780, 'rn'], ['s', 0, 600, 'rn']], 'b': [['u', 60, 660, 'icu']]},
{'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 't', 'u'], 600, 960],
['overlap', 'a']),
('regression variant: qualification receiver 2',
[{'a': [['t', 1240, 1720, 'rn'], ['s', 60, 540, 'rn']], 'b': [['u', 0, 240, 'icu']]},
{'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', 'u'], 600, 960],
['qual', 'a']),
('partial repair guard 3',
[{'a': [['s', 60, 540, 'rn'], ['u', 2420, 3020, 'rn'], ['t', 1240, 1720, 'rn']],
'b': [['v', 60, 660, 'icu']]},
{'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'v'], 600, 1440],
['qual', 'a']),
('boundary control 4',
[{'a': [['s', 0, 600, 'rn'], ['t', 1200, 1680, 'rn']], 'b': [['u', 3000, 3480, 'rn']]},
{'a': ['rn'], 'b': ['rn']}, ['a', 'b', 's', 'u'], 600, 960],
['ok', None]),
('normal control 5',
[{'a': [['t', 1079, 1679, 'rn'], ['u', 2679, 2919, 'rn'], ['s', 0, 480, 'rn']],
'b': [['v', 0, 240, 'rn'], ['w', 1240, 1480, 'rn']]},
{'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', 'w'], 600, 1440],
['ok', None]),
('normal control 6',
[{'a': [['s', 60, 540, 'rn'], ['t', 1540, 2140, 'rn'], ['u', 2739, 2979, 'icu']],
'b': [['w', 1180, 1660, 'rn'], ['v', 0, 480, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 's', None], 600, 1200],
['rest', 'a']),
('normal control 7',
[{'a': [['t', 1240, 1480, 'rn'], ['s', 0, 240, 'icu']],
'b': [['u', 0, 600, 'rn'], ['v', 1200, 1800, 'rn']]},
{'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', None], 600, 1200],
['overlap', 'b']),
('normal control 8',
[{'a': [['t', 960, 1440, 'rn'], ['s', 60, 660, 'rn']],
'b': [['v', 1140, 1620, 'icu'], ['u', 60, 540, 'rn']]},
{'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 's', 'u'], 600, 1440],
['rest', 'a'])]]
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: qualification receiver 1 | ['qual', 'b'] | ['qual', 'b'] | Passed |
| regression variant: qualification receiver 2 | ['qual', 'a'] | ['qual', 'a'] | Passed |
| partial repair guard 3 | ['qual', 'a'] | ['qual', 'a'] | Passed |
| boundary control 4 | ['ok', None] | ['ok', None] | Passed |
| normal control 5 | ['overlap', 'b'] | ['overlap', 'b'] | Passed |
| normal control 6 | ['overlap', 'a'] | ['overlap', 'a'] | Passed |
| normal control 7 | ['overlap', 'b'] | ['overlap', 'b'] | Passed |
| normal control 8 | ['qual', 'a'] | ['qual', 'a'] | Passed |
SHA-256 / 8a728fc22ab7d32a28b066a1fe7668aa32ea467066570edf91046e9c1f7f39b3
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:52:01.304572+00:00.
Case digest / 0e74c1dca093b283f979ac07196c8b0d002338bd2b69acc178fd6eb2569002d4