{"abstract":"An unqualified nurse can take an ICU shift as long as the shift they hand over matches their skills.","category":"Shift rostering labor rules","checks":8,"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].","evaluation_group":"w2-shift-rostering-labor-rules-shift-swap-approval","failed_approach":"Validating only the partner who takes the original shift misses the other direction.","family":"w2-shift-rostering-labor-rules-shift-swap-approval-qualification-receiver","id":"FA-94106","implementations":{"attempt":{"sha256":"af959bd7c8c9c592ba4b6a24c2f51de2341e654ce114856a8a455de182a45ddd","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(roster, quals, req, rest, cap):\n    a, b, ga, gb = req\n    sa = [t for t in roster[a] if t[0] == ga][0]\n    sb = [t for t in roster[b] if t[0] == gb]\n    sb = sb[0] if sb else None\n    new = {a: [t for t in roster[a] if t[0] != ga] + ([sb] if sb else []),\n           b: [t for t in roster[b] if t[0] != gb] + [sa]}\n    got = {a: None, b: sa}\n    for w in (a, b):\n        if got[w] and got[w][3] not in quals[w]:\n            return ['qual', w]\n    for w in (a, b):\n        seq = sorted(new[w], key=lambda t: t[1])\n        for p, q in zip(seq, seq[1:]):\n            if q[1] < p[2]:\n                return ['overlap', w]\n            if q[1] - p[2] < rest:\n                return ['rest', w]\n    for w in (a, b):\n        if sum(t[2] - t[1] for t in new[w]) > cap:\n            return ['cap', w]\n    return ['ok', None]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: qualification receiver 1',\n   [{'a': [['s', 0, 480, 'icu']], 'b': [['u', 2000, 2480, 'rn']]}, {'a': ['rn', 'icu'], 'b': ['rn']},\n    ['a', 'b', 's', 'u'], 600, 960],\n   ['qual', 'b']),\n  ('regression variant: qualification receiver 2',\n   [{'a': [['t', 1240, 1720, 'icu'], ['s', 60, 540, 'rn'], ['u', 2720, 3320, 'rn']],\n     'b': [['w', 1300, 1780, 'rn'], ['v', 0, 600, 'icu'], ['x', 2480, 3080, 'icu']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'x'], 600, 1440],\n   ['qual', 'a']),\n  ('partial repair guard 3',\n   [{'a': [['s', 0, 480, 'rn']],\n     'b': [['v', 2500, 2980, 'rn'], ['t', 0, 600, 'icu'], ['u', 1300, 1900, 'rn']]},\n    {'a': ['rn'], 'b': ['rn']}, ['a', 'b', 's', 't'], 600, 1440],\n   ['qual', 'a']),\n  ('boundary control 4',\n   [{'a': [['s', 0, 480, 'rn']], 'b': [['u', 1080, 1560, 'rn']]}, {'a': ['rn'], 'b': ['rn']},\n    ['a', 'b', 's', None], 600, 960],\n   ['ok', None]),\n  ('normal control 5',\n   [{'a': [['t', 840, 1080, 'rn'], ['s', 0, 240, 'icu']],\n     'b': [['v', 1360, 1840, 'rn'], ['u', 60, 660, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 's', None], 600, 960],\n   ['overlap', 'b']),\n  ('normal control 6',\n   [{'a': [['t', 600, 1080, 'rn'], ['s', 60, 300, 'rn']], 'b': [['u', 60, 540, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'u'], 600, 1200],\n   ['overlap', 'a']),\n  ('normal control 7',\n   [{'a': [['s', 60, 660, 'rn'], ['t', 960, 1440, 'rn']],\n     'b': [['v', 1260, 1860, 'rn'], ['u', 60, 660, 'rn']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', None], 600, 1200],\n   ['overlap', 'b']),\n  ('normal control 8',\n   [{'a': [['s', 0, 480, 'rn'], ['t', 1180, 1660, 'rn']],\n     'b': [['v', 1240, 1840, 'icu'], ['w', 2439, 2919, 'icu'], ['u', 60, 540, 'icu']]},\n    {'a': ['rn'], 'b': ['rn']}, ['a', 'b', 't', 'u'], 600, 1200],\n   ['qual', 'a'])],\n [('regression: qualification receiver 1',\n   [{'a': [['s', 60, 540, 'rn'], ['u', 1919, 2519, 'rn'], ['t', 1139, 1619, 'icu']],\n     'b': [['x', 2218, 2818, 'rn'], ['v', 60, 540, 'icu'], ['w', 1139, 1619, 'rn']]},\n    {'a': ['rn'], 'b': ['rn']}, ['a', 'b', 't', None], 600, 960],\n   ['qual', 'b']),\n  ('regression variant: qualification receiver 2',\n   [{'a': [['s', 60, 660, 'rn']],\n     'b': [['t', 0, 240, 'icu'], ['u', 840, 1440, 'icu'], ['v', 2440, 2680, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 's', 't'], 600, 1200],\n   ['rest', 'b']),\n  ('partial repair guard 3',\n   [{'a': [['s', 60, 660, 'icu'], ['t', 1260, 1740, 'rn']],\n     'b': [['w', 2019, 2499, 'rn'], ['u', 0, 240, 'rn'], ['v', 940, 1420, 'icu']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'v'], 600, 1200],\n   ['qual', 'a']),\n  ('boundary control 4',\n   [{'a': [['s', 0, 720, 'rn'], ['t', 1400, 1880, 'rn']], 'b': [['u', 3000, 3240, 'rn']]},\n    {'a': ['rn'], 'b': ['rn']}, ['a', 'b', 's', 'u'], 600, 720],\n   ['ok', None]),\n  ('normal control 5',\n   [{'a': [['s', 60, 660, 'icu']], 'b': [['t', 60, 540, 'rn'], ['u', 1240, 1480, 'rn']]},\n    {'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 's', None], 600, 1440],\n   ['overlap', 'b']),\n  ('normal control 6',\n   [{'a': [['s', 0, 240, 'rn']], 'b': [['u', 1140, 1740, 'icu'], ['t', 60, 540, 'icu']]},\n    {'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 's', 't'], 600, 1200],\n   ['ok', None]),\n  ('normal control 7',\n   [{'a': [['u', 2200, 2440, 'rn'], ['s', 60, 660, 'rn'], ['t', 1360, 1600, 'rn']],\n     'b': [['v', 0, 240, 'rn'], ['w', 839, 1079, 'rn']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 'u', 'v'], 600, 960],\n   ['overlap', 'a']),\n  ('normal control 8',\n   [{'a': [['u', 2200, 2680, 'rn'], ['s', 60, 300, 'rn'], ['t', 900, 1500, 'rn']],\n     'b': [['x', 2680, 3160, 'icu'], ['v', 0, 600, 'icu'], ['w', 1600, 2080, 'icu']]},\n    {'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'v'], 600, 1440],\n   ['overlap', 'a'])],\n [('regression: qualification receiver 1',\n   [{'a': [['s', 0, 480, 'icu'], ['t', 1180, 1660, 'rn'], ['u', 2259, 2499, 'rn']],\n     'b': [['v', 0, 480, 'rn'], ['x', 1919, 2399, 'icu'], ['w', 1079, 1319, 'rn']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'w'], 600, 960],\n   ['overlap', 'a']),\n  ('regression variant: qualification receiver 2',\n   [{'a': [['u', 2560, 3040, 'icu'], ['t', 1260, 1860, 'icu'], ['s', 60, 660, 'rn']],\n     'b': [['v', 60, 300, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 'u', 'v'], 600, 1440],\n   ['qual', 'b']),\n  ('partial repair guard 3',\n   [{'a': [['t', 1240, 1720, 'rn'], ['s', 60, 540, 'rn']], 'b': [['u', 0, 240, 'icu']]},\n    {'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', 'u'], 600, 960],\n   ['qual', 'a']),\n  ('boundary control 4',\n   [{'a': [['s', 0, 480, 'icu']], 'b': [['u', 2000, 2480, 'rn']]}, {'a': ['rn', 'icu'], 'b': ['rn']},\n    ['a', 'b', 's', 'u'], 600, 960],\n   ['qual', 'b']),\n  ('normal control 5',\n   [{'a': [['s', 0, 480, 'icu'], ['t', 1480, 1720, 'rn']],\n     'b': [['u', 60, 300, 'rn'], ['v', 1000, 1480, 'icu'], ['w', 1780, 2260, 'rn']]},\n    {'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 's', 'u'], 600, 1440],\n   ['rest', 'b']),\n  ('normal control 6',\n   [{'a': [['s', 60, 540, 'rn']],\n     'b': [['t', 0, 600, 'icu'], ['u', 1600, 2200, 'rn'], ['v', 3200, 3440, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'v'], 600, 1440],\n   ['overlap', 'b']),\n  ('normal control 7',\n   [{'a': [['s', 60, 300, 'rn'], ['t', 899, 1499, 'icu']],\n     'b': [['u', 60, 660, 'icu'], ['v', 960, 1440, 'rn']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'v'], 600, 960],\n   ['rest', 'b']),\n  ('normal control 8',\n   [{'a': [['s', 0, 480, 'rn'], ['t', 1180, 1420, 'rn']], 'b': [['u', 0, 600, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', None], 600, 1440],\n   ['rest', 'b'])],\n [('regression: qualification receiver 1',\n   [{'a': [['t', 1240, 1720, 'icu'], ['s', 0, 240, 'rn']],\n     'b': [['u', 60, 300, 'rn'], ['v', 1300, 1780, 'icu']]},\n    {'a': ['rn'], 'b': ['rn']}, ['a', 'b', 't', 'u'], 600, 1200],\n   ['qual', 'b']),\n  ('regression variant: qualification receiver 2',\n   [{'a': [['t', 1360, 1600, 'rn'], ['s', 60, 660, 'icu']],\n     'b': [['u', 0, 480, 'rn'], ['v', 1079, 1559, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 's', 'v'], 600, 1200],\n   ['qual', 'b']),\n  ('partial repair guard 3',\n   [{'a': [['s', 0, 600, 'rn'], ['t', 1600, 1840, 'rn']],\n     'b': [['v', 780, 1020, 'icu'], ['u', 0, 480, 'icu']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'u'], 600, 1440],\n   ['qual', 'a']),\n  ('boundary control 4',\n   [{'a': [['t', 1200, 1680, 'rn'], ['s', 0, 700, 'icu']], 'b': [['u', 3000, 3700, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 's', 'u'], 600, 1180],\n   ['ok', None]),\n  ('normal control 5',\n   [{'a': [['s', 0, 240, 'icu']], 'b': [['t', 0, 480, 'icu'], ['u', 1180, 1780, 'icu']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'u'], 600, 960],\n   ['qual', 'a']),\n  ('normal control 6',\n   [{'a': [['u', 1839, 2439, 'icu'], ['t', 1000, 1240, 'rn'], ['s', 60, 300, 'rn']],\n     'b': [['w', 1240, 1480, 'icu'], ['v', 0, 240, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 'u', 'v'], 600, 960],\n   ['overlap', 'a']),\n  ('normal control 7',\n   [{'a': [['t', 600, 1080, 'rn'], ['s', 60, 300, 'icu']],\n     'b': [['v', 1360, 1840, 'icu'], ['u', 60, 660, 'rn'], ['w', 2140, 2740, 'icu']]},\n    {'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'u'], 600, 1440],\n   ['overlap', 'a']),\n  ('normal control 8',\n   [{'a': [['s', 0, 480, 'rn']], 'b': [['t', 60, 300, 'rn']]}, {'a': ['rn'], 'b': ['rn']},\n    ['a', 'b', 's', None], 600, 1200],\n   ['overlap', 'b'])],\n [('regression: qualification receiver 1',\n   [{'a': [['t', 1300, 1780, 'rn'], ['s', 0, 600, 'rn']], 'b': [['u', 60, 660, 'icu']]},\n    {'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 't', 'u'], 600, 960],\n   ['overlap', 'a']),\n  ('regression variant: qualification receiver 2',\n   [{'a': [['t', 1240, 1720, 'rn'], ['s', 60, 540, 'rn']], 'b': [['u', 0, 240, 'icu']]},\n    {'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', 'u'], 600, 960],\n   ['qual', 'a']),\n  ('partial repair guard 3',\n   [{'a': [['s', 60, 540, 'rn'], ['u', 2420, 3020, 'rn'], ['t', 1240, 1720, 'rn']],\n     'b': [['v', 60, 660, 'icu']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'v'], 600, 1440],\n   ['qual', 'a']),\n  ('boundary control 4',\n   [{'a': [['s', 0, 600, 'rn'], ['t', 1200, 1680, 'rn']], 'b': [['u', 3000, 3480, 'rn']]},\n    {'a': ['rn'], 'b': ['rn']}, ['a', 'b', 's', 'u'], 600, 960],\n   ['ok', None]),\n  ('normal control 5',\n   [{'a': [['t', 1079, 1679, 'rn'], ['u', 2679, 2919, 'rn'], ['s', 0, 480, 'rn']],\n     'b': [['v', 0, 240, 'rn'], ['w', 1240, 1480, 'rn']]},\n    {'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', 'w'], 600, 1440],\n   ['ok', None]),\n  ('normal control 6',\n   [{'a': [['s', 60, 540, 'rn'], ['t', 1540, 2140, 'rn'], ['u', 2739, 2979, 'icu']],\n     'b': [['w', 1180, 1660, 'rn'], ['v', 0, 480, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 's', None], 600, 1200],\n   ['rest', 'a']),\n  ('normal control 7',\n   [{'a': [['t', 1240, 1480, 'rn'], ['s', 0, 240, 'icu']],\n     'b': [['u', 0, 600, 'rn'], ['v', 1200, 1800, 'rn']]},\n    {'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', None], 600, 1200],\n   ['overlap', 'b']),\n  ('normal control 8',\n   [{'a': [['t', 960, 1440, 'rn'], ['s', 60, 660, 'rn']],\n     'b': [['v', 1140, 1620, 'icu'], ['u', 60, 540, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 's', 'u'], 600, 1440],\n   ['rest', 'a'])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"0d491bfcb58aa918471d847067f4e4d33b5f8151ca6d68a45a7e7544849314c7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(roster, quals, req, rest, cap):\n    a, b, ga, gb = req\n    sa = [t for t in roster[a] if t[0] == ga][0]\n    sb = [t for t in roster[b] if t[0] == gb]\n    sb = sb[0] if sb else None\n    new = {a: [t for t in roster[a] if t[0] != ga] + ([sb] if sb else []),\n           b: [t for t in roster[b] if t[0] != gb] + [sa]}\n    got = {a: sa, b: sb}\n    for w in (a, b):\n        if got[w] and got[w][3] not in quals[w]:\n            return ['qual', w]\n    for w in (a, b):\n        seq = sorted(new[w], key=lambda t: t[1])\n        for p, q in zip(seq, seq[1:]):\n            if q[1] < p[2]:\n                return ['overlap', w]\n            if q[1] - p[2] < rest:\n                return ['rest', w]\n    for w in (a, b):\n        if sum(t[2] - t[1] for t in new[w]) > cap:\n            return ['cap', w]\n    return ['ok', None]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: qualification receiver 1',\n   [{'a': [['s', 0, 480, 'icu']], 'b': [['u', 2000, 2480, 'rn']]}, {'a': ['rn', 'icu'], 'b': ['rn']},\n    ['a', 'b', 's', 'u'], 600, 960],\n   ['qual', 'b']),\n  ('regression variant: qualification receiver 2',\n   [{'a': [['t', 1240, 1720, 'icu'], ['s', 60, 540, 'rn'], ['u', 2720, 3320, 'rn']],\n     'b': [['w', 1300, 1780, 'rn'], ['v', 0, 600, 'icu'], ['x', 2480, 3080, 'icu']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'x'], 600, 1440],\n   ['qual', 'a']),\n  ('partial repair guard 3',\n   [{'a': [['s', 0, 480, 'rn']],\n     'b': [['v', 2500, 2980, 'rn'], ['t', 0, 600, 'icu'], ['u', 1300, 1900, 'rn']]},\n    {'a': ['rn'], 'b': ['rn']}, ['a', 'b', 's', 't'], 600, 1440],\n   ['qual', 'a']),\n  ('boundary control 4',\n   [{'a': [['s', 0, 480, 'rn']], 'b': [['u', 1080, 1560, 'rn']]}, {'a': ['rn'], 'b': ['rn']},\n    ['a', 'b', 's', None], 600, 960],\n   ['ok', None]),\n  ('normal control 5',\n   [{'a': [['t', 840, 1080, 'rn'], ['s', 0, 240, 'icu']],\n     'b': [['v', 1360, 1840, 'rn'], ['u', 60, 660, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 's', None], 600, 960],\n   ['overlap', 'b']),\n  ('normal control 6',\n   [{'a': [['t', 600, 1080, 'rn'], ['s', 60, 300, 'rn']], 'b': [['u', 60, 540, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'u'], 600, 1200],\n   ['overlap', 'a']),\n  ('normal control 7',\n   [{'a': [['s', 60, 660, 'rn'], ['t', 960, 1440, 'rn']],\n     'b': [['v', 1260, 1860, 'rn'], ['u', 60, 660, 'rn']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', None], 600, 1200],\n   ['overlap', 'b']),\n  ('normal control 8',\n   [{'a': [['s', 0, 480, 'rn'], ['t', 1180, 1660, 'rn']],\n     'b': [['v', 1240, 1840, 'icu'], ['w', 2439, 2919, 'icu'], ['u', 60, 540, 'icu']]},\n    {'a': ['rn'], 'b': ['rn']}, ['a', 'b', 't', 'u'], 600, 1200],\n   ['qual', 'a'])],\n [('regression: qualification receiver 1',\n   [{'a': [['s', 60, 540, 'rn'], ['u', 1919, 2519, 'rn'], ['t', 1139, 1619, 'icu']],\n     'b': [['x', 2218, 2818, 'rn'], ['v', 60, 540, 'icu'], ['w', 1139, 1619, 'rn']]},\n    {'a': ['rn'], 'b': ['rn']}, ['a', 'b', 't', None], 600, 960],\n   ['qual', 'b']),\n  ('regression variant: qualification receiver 2',\n   [{'a': [['s', 60, 660, 'rn']],\n     'b': [['t', 0, 240, 'icu'], ['u', 840, 1440, 'icu'], ['v', 2440, 2680, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 's', 't'], 600, 1200],\n   ['rest', 'b']),\n  ('partial repair guard 3',\n   [{'a': [['s', 60, 660, 'icu'], ['t', 1260, 1740, 'rn']],\n     'b': [['w', 2019, 2499, 'rn'], ['u', 0, 240, 'rn'], ['v', 940, 1420, 'icu']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'v'], 600, 1200],\n   ['qual', 'a']),\n  ('boundary control 4',\n   [{'a': [['s', 0, 720, 'rn'], ['t', 1400, 1880, 'rn']], 'b': [['u', 3000, 3240, 'rn']]},\n    {'a': ['rn'], 'b': ['rn']}, ['a', 'b', 's', 'u'], 600, 720],\n   ['ok', None]),\n  ('normal control 5',\n   [{'a': [['s', 60, 660, 'icu']], 'b': [['t', 60, 540, 'rn'], ['u', 1240, 1480, 'rn']]},\n    {'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 's', None], 600, 1440],\n   ['overlap', 'b']),\n  ('normal control 6',\n   [{'a': [['s', 0, 240, 'rn']], 'b': [['u', 1140, 1740, 'icu'], ['t', 60, 540, 'icu']]},\n    {'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 's', 't'], 600, 1200],\n   ['ok', None]),\n  ('normal control 7',\n   [{'a': [['u', 2200, 2440, 'rn'], ['s', 60, 660, 'rn'], ['t', 1360, 1600, 'rn']],\n     'b': [['v', 0, 240, 'rn'], ['w', 839, 1079, 'rn']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 'u', 'v'], 600, 960],\n   ['overlap', 'a']),\n  ('normal control 8',\n   [{'a': [['u', 2200, 2680, 'rn'], ['s', 60, 300, 'rn'], ['t', 900, 1500, 'rn']],\n     'b': [['x', 2680, 3160, 'icu'], ['v', 0, 600, 'icu'], ['w', 1600, 2080, 'icu']]},\n    {'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'v'], 600, 1440],\n   ['overlap', 'a'])],\n [('regression: qualification receiver 1',\n   [{'a': [['s', 0, 480, 'icu'], ['t', 1180, 1660, 'rn'], ['u', 2259, 2499, 'rn']],\n     'b': [['v', 0, 480, 'rn'], ['x', 1919, 2399, 'icu'], ['w', 1079, 1319, 'rn']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'w'], 600, 960],\n   ['overlap', 'a']),\n  ('regression variant: qualification receiver 2',\n   [{'a': [['u', 2560, 3040, 'icu'], ['t', 1260, 1860, 'icu'], ['s', 60, 660, 'rn']],\n     'b': [['v', 60, 300, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 'u', 'v'], 600, 1440],\n   ['qual', 'b']),\n  ('partial repair guard 3',\n   [{'a': [['t', 1240, 1720, 'rn'], ['s', 60, 540, 'rn']], 'b': [['u', 0, 240, 'icu']]},\n    {'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', 'u'], 600, 960],\n   ['qual', 'a']),\n  ('boundary control 4',\n   [{'a': [['s', 0, 480, 'icu']], 'b': [['u', 2000, 2480, 'rn']]}, {'a': ['rn', 'icu'], 'b': ['rn']},\n    ['a', 'b', 's', 'u'], 600, 960],\n   ['qual', 'b']),\n  ('normal control 5',\n   [{'a': [['s', 0, 480, 'icu'], ['t', 1480, 1720, 'rn']],\n     'b': [['u', 60, 300, 'rn'], ['v', 1000, 1480, 'icu'], ['w', 1780, 2260, 'rn']]},\n    {'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 's', 'u'], 600, 1440],\n   ['rest', 'b']),\n  ('normal control 6',\n   [{'a': [['s', 60, 540, 'rn']],\n     'b': [['t', 0, 600, 'icu'], ['u', 1600, 2200, 'rn'], ['v', 3200, 3440, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'v'], 600, 1440],\n   ['overlap', 'b']),\n  ('normal control 7',\n   [{'a': [['s', 60, 300, 'rn'], ['t', 899, 1499, 'icu']],\n     'b': [['u', 60, 660, 'icu'], ['v', 960, 1440, 'rn']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'v'], 600, 960],\n   ['rest', 'b']),\n  ('normal control 8',\n   [{'a': [['s', 0, 480, 'rn'], ['t', 1180, 1420, 'rn']], 'b': [['u', 0, 600, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', None], 600, 1440],\n   ['rest', 'b'])],\n [('regression: qualification receiver 1',\n   [{'a': [['t', 1240, 1720, 'icu'], ['s', 0, 240, 'rn']],\n     'b': [['u', 60, 300, 'rn'], ['v', 1300, 1780, 'icu']]},\n    {'a': ['rn'], 'b': ['rn']}, ['a', 'b', 't', 'u'], 600, 1200],\n   ['qual', 'b']),\n  ('regression variant: qualification receiver 2',\n   [{'a': [['t', 1360, 1600, 'rn'], ['s', 60, 660, 'icu']],\n     'b': [['u', 0, 480, 'rn'], ['v', 1079, 1559, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 's', 'v'], 600, 1200],\n   ['qual', 'b']),\n  ('partial repair guard 3',\n   [{'a': [['s', 0, 600, 'rn'], ['t', 1600, 1840, 'rn']],\n     'b': [['v', 780, 1020, 'icu'], ['u', 0, 480, 'icu']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'u'], 600, 1440],\n   ['qual', 'a']),\n  ('boundary control 4',\n   [{'a': [['t', 1200, 1680, 'rn'], ['s', 0, 700, 'icu']], 'b': [['u', 3000, 3700, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 's', 'u'], 600, 1180],\n   ['ok', None]),\n  ('normal control 5',\n   [{'a': [['s', 0, 240, 'icu']], 'b': [['t', 0, 480, 'icu'], ['u', 1180, 1780, 'icu']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'u'], 600, 960],\n   ['qual', 'a']),\n  ('normal control 6',\n   [{'a': [['u', 1839, 2439, 'icu'], ['t', 1000, 1240, 'rn'], ['s', 60, 300, 'rn']],\n     'b': [['w', 1240, 1480, 'icu'], ['v', 0, 240, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 'u', 'v'], 600, 960],\n   ['overlap', 'a']),\n  ('normal control 7',\n   [{'a': [['t', 600, 1080, 'rn'], ['s', 60, 300, 'icu']],\n     'b': [['v', 1360, 1840, 'icu'], ['u', 60, 660, 'rn'], ['w', 2140, 2740, 'icu']]},\n    {'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'u'], 600, 1440],\n   ['overlap', 'a']),\n  ('normal control 8',\n   [{'a': [['s', 0, 480, 'rn']], 'b': [['t', 60, 300, 'rn']]}, {'a': ['rn'], 'b': ['rn']},\n    ['a', 'b', 's', None], 600, 1200],\n   ['overlap', 'b'])],\n [('regression: qualification receiver 1',\n   [{'a': [['t', 1300, 1780, 'rn'], ['s', 0, 600, 'rn']], 'b': [['u', 60, 660, 'icu']]},\n    {'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 't', 'u'], 600, 960],\n   ['overlap', 'a']),\n  ('regression variant: qualification receiver 2',\n   [{'a': [['t', 1240, 1720, 'rn'], ['s', 60, 540, 'rn']], 'b': [['u', 0, 240, 'icu']]},\n    {'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', 'u'], 600, 960],\n   ['qual', 'a']),\n  ('partial repair guard 3',\n   [{'a': [['s', 60, 540, 'rn'], ['u', 2420, 3020, 'rn'], ['t', 1240, 1720, 'rn']],\n     'b': [['v', 60, 660, 'icu']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'v'], 600, 1440],\n   ['qual', 'a']),\n  ('boundary control 4',\n   [{'a': [['s', 0, 600, 'rn'], ['t', 1200, 1680, 'rn']], 'b': [['u', 3000, 3480, 'rn']]},\n    {'a': ['rn'], 'b': ['rn']}, ['a', 'b', 's', 'u'], 600, 960],\n   ['ok', None]),\n  ('normal control 5',\n   [{'a': [['t', 1079, 1679, 'rn'], ['u', 2679, 2919, 'rn'], ['s', 0, 480, 'rn']],\n     'b': [['v', 0, 240, 'rn'], ['w', 1240, 1480, 'rn']]},\n    {'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', 'w'], 600, 1440],\n   ['ok', None]),\n  ('normal control 6',\n   [{'a': [['s', 60, 540, 'rn'], ['t', 1540, 2140, 'rn'], ['u', 2739, 2979, 'icu']],\n     'b': [['w', 1180, 1660, 'rn'], ['v', 0, 480, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 's', None], 600, 1200],\n   ['rest', 'a']),\n  ('normal control 7',\n   [{'a': [['t', 1240, 1480, 'rn'], ['s', 0, 240, 'icu']],\n     'b': [['u', 0, 600, 'rn'], ['v', 1200, 1800, 'rn']]},\n    {'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', None], 600, 1200],\n   ['overlap', 'b']),\n  ('normal control 8',\n   [{'a': [['t', 960, 1440, 'rn'], ['s', 60, 660, 'rn']],\n     'b': [['v', 1140, 1620, 'icu'], ['u', 60, 540, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 's', 'u'], 600, 1440],\n   ['rest', 'a'])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"8a728fc22ab7d32a28b066a1fe7668aa32ea467066570edf91046e9c1f7f39b3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(roster, quals, req, rest, cap):\n    a, b, ga, gb = req\n    sa = [t for t in roster[a] if t[0] == ga][0]\n    sb = [t for t in roster[b] if t[0] == gb]\n    sb = sb[0] if sb else None\n    new = {a: [t for t in roster[a] if t[0] != ga] + ([sb] if sb else []),\n           b: [t for t in roster[b] if t[0] != gb] + [sa]}\n    got = {a: sb, b: sa}\n    for w in (a, b):\n        if got[w] and got[w][3] not in quals[w]:\n            return ['qual', w]\n    for w in (a, b):\n        seq = sorted(new[w], key=lambda t: t[1])\n        for p, q in zip(seq, seq[1:]):\n            if q[1] < p[2]:\n                return ['overlap', w]\n            if q[1] - p[2] < rest:\n                return ['rest', w]\n    for w in (a, b):\n        if sum(t[2] - t[1] for t in new[w]) > cap:\n            return ['cap', w]\n    return ['ok', None]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: qualification receiver 1',\n   [{'a': [['s', 0, 480, 'icu']], 'b': [['u', 2000, 2480, 'rn']]}, {'a': ['rn', 'icu'], 'b': ['rn']},\n    ['a', 'b', 's', 'u'], 600, 960],\n   ['qual', 'b']),\n  ('regression variant: qualification receiver 2',\n   [{'a': [['t', 1240, 1720, 'icu'], ['s', 60, 540, 'rn'], ['u', 2720, 3320, 'rn']],\n     'b': [['w', 1300, 1780, 'rn'], ['v', 0, 600, 'icu'], ['x', 2480, 3080, 'icu']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'x'], 600, 1440],\n   ['qual', 'a']),\n  ('partial repair guard 3',\n   [{'a': [['s', 0, 480, 'rn']],\n     'b': [['v', 2500, 2980, 'rn'], ['t', 0, 600, 'icu'], ['u', 1300, 1900, 'rn']]},\n    {'a': ['rn'], 'b': ['rn']}, ['a', 'b', 's', 't'], 600, 1440],\n   ['qual', 'a']),\n  ('boundary control 4',\n   [{'a': [['s', 0, 480, 'rn']], 'b': [['u', 1080, 1560, 'rn']]}, {'a': ['rn'], 'b': ['rn']},\n    ['a', 'b', 's', None], 600, 960],\n   ['ok', None]),\n  ('normal control 5',\n   [{'a': [['t', 840, 1080, 'rn'], ['s', 0, 240, 'icu']],\n     'b': [['v', 1360, 1840, 'rn'], ['u', 60, 660, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 's', None], 600, 960],\n   ['overlap', 'b']),\n  ('normal control 6',\n   [{'a': [['t', 600, 1080, 'rn'], ['s', 60, 300, 'rn']], 'b': [['u', 60, 540, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'u'], 600, 1200],\n   ['overlap', 'a']),\n  ('normal control 7',\n   [{'a': [['s', 60, 660, 'rn'], ['t', 960, 1440, 'rn']],\n     'b': [['v', 1260, 1860, 'rn'], ['u', 60, 660, 'rn']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', None], 600, 1200],\n   ['overlap', 'b']),\n  ('normal control 8',\n   [{'a': [['s', 0, 480, 'rn'], ['t', 1180, 1660, 'rn']],\n     'b': [['v', 1240, 1840, 'icu'], ['w', 2439, 2919, 'icu'], ['u', 60, 540, 'icu']]},\n    {'a': ['rn'], 'b': ['rn']}, ['a', 'b', 't', 'u'], 600, 1200],\n   ['qual', 'a'])],\n [('regression: qualification receiver 1',\n   [{'a': [['s', 60, 540, 'rn'], ['u', 1919, 2519, 'rn'], ['t', 1139, 1619, 'icu']],\n     'b': [['x', 2218, 2818, 'rn'], ['v', 60, 540, 'icu'], ['w', 1139, 1619, 'rn']]},\n    {'a': ['rn'], 'b': ['rn']}, ['a', 'b', 't', None], 600, 960],\n   ['qual', 'b']),\n  ('regression variant: qualification receiver 2',\n   [{'a': [['s', 60, 660, 'rn']],\n     'b': [['t', 0, 240, 'icu'], ['u', 840, 1440, 'icu'], ['v', 2440, 2680, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 's', 't'], 600, 1200],\n   ['rest', 'b']),\n  ('partial repair guard 3',\n   [{'a': [['s', 60, 660, 'icu'], ['t', 1260, 1740, 'rn']],\n     'b': [['w', 2019, 2499, 'rn'], ['u', 0, 240, 'rn'], ['v', 940, 1420, 'icu']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'v'], 600, 1200],\n   ['qual', 'a']),\n  ('boundary control 4',\n   [{'a': [['s', 0, 720, 'rn'], ['t', 1400, 1880, 'rn']], 'b': [['u', 3000, 3240, 'rn']]},\n    {'a': ['rn'], 'b': ['rn']}, ['a', 'b', 's', 'u'], 600, 720],\n   ['ok', None]),\n  ('normal control 5',\n   [{'a': [['s', 60, 660, 'icu']], 'b': [['t', 60, 540, 'rn'], ['u', 1240, 1480, 'rn']]},\n    {'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 's', None], 600, 1440],\n   ['overlap', 'b']),\n  ('normal control 6',\n   [{'a': [['s', 0, 240, 'rn']], 'b': [['u', 1140, 1740, 'icu'], ['t', 60, 540, 'icu']]},\n    {'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 's', 't'], 600, 1200],\n   ['ok', None]),\n  ('normal control 7',\n   [{'a': [['u', 2200, 2440, 'rn'], ['s', 60, 660, 'rn'], ['t', 1360, 1600, 'rn']],\n     'b': [['v', 0, 240, 'rn'], ['w', 839, 1079, 'rn']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 'u', 'v'], 600, 960],\n   ['overlap', 'a']),\n  ('normal control 8',\n   [{'a': [['u', 2200, 2680, 'rn'], ['s', 60, 300, 'rn'], ['t', 900, 1500, 'rn']],\n     'b': [['x', 2680, 3160, 'icu'], ['v', 0, 600, 'icu'], ['w', 1600, 2080, 'icu']]},\n    {'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'v'], 600, 1440],\n   ['overlap', 'a'])],\n [('regression: qualification receiver 1',\n   [{'a': [['s', 0, 480, 'icu'], ['t', 1180, 1660, 'rn'], ['u', 2259, 2499, 'rn']],\n     'b': [['v', 0, 480, 'rn'], ['x', 1919, 2399, 'icu'], ['w', 1079, 1319, 'rn']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'w'], 600, 960],\n   ['overlap', 'a']),\n  ('regression variant: qualification receiver 2',\n   [{'a': [['u', 2560, 3040, 'icu'], ['t', 1260, 1860, 'icu'], ['s', 60, 660, 'rn']],\n     'b': [['v', 60, 300, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 'u', 'v'], 600, 1440],\n   ['qual', 'b']),\n  ('partial repair guard 3',\n   [{'a': [['t', 1240, 1720, 'rn'], ['s', 60, 540, 'rn']], 'b': [['u', 0, 240, 'icu']]},\n    {'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', 'u'], 600, 960],\n   ['qual', 'a']),\n  ('boundary control 4',\n   [{'a': [['s', 0, 480, 'icu']], 'b': [['u', 2000, 2480, 'rn']]}, {'a': ['rn', 'icu'], 'b': ['rn']},\n    ['a', 'b', 's', 'u'], 600, 960],\n   ['qual', 'b']),\n  ('normal control 5',\n   [{'a': [['s', 0, 480, 'icu'], ['t', 1480, 1720, 'rn']],\n     'b': [['u', 60, 300, 'rn'], ['v', 1000, 1480, 'icu'], ['w', 1780, 2260, 'rn']]},\n    {'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 's', 'u'], 600, 1440],\n   ['rest', 'b']),\n  ('normal control 6',\n   [{'a': [['s', 60, 540, 'rn']],\n     'b': [['t', 0, 600, 'icu'], ['u', 1600, 2200, 'rn'], ['v', 3200, 3440, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'v'], 600, 1440],\n   ['overlap', 'b']),\n  ('normal control 7',\n   [{'a': [['s', 60, 300, 'rn'], ['t', 899, 1499, 'icu']],\n     'b': [['u', 60, 660, 'icu'], ['v', 960, 1440, 'rn']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'v'], 600, 960],\n   ['rest', 'b']),\n  ('normal control 8',\n   [{'a': [['s', 0, 480, 'rn'], ['t', 1180, 1420, 'rn']], 'b': [['u', 0, 600, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', None], 600, 1440],\n   ['rest', 'b'])],\n [('regression: qualification receiver 1',\n   [{'a': [['t', 1240, 1720, 'icu'], ['s', 0, 240, 'rn']],\n     'b': [['u', 60, 300, 'rn'], ['v', 1300, 1780, 'icu']]},\n    {'a': ['rn'], 'b': ['rn']}, ['a', 'b', 't', 'u'], 600, 1200],\n   ['qual', 'b']),\n  ('regression variant: qualification receiver 2',\n   [{'a': [['t', 1360, 1600, 'rn'], ['s', 60, 660, 'icu']],\n     'b': [['u', 0, 480, 'rn'], ['v', 1079, 1559, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 's', 'v'], 600, 1200],\n   ['qual', 'b']),\n  ('partial repair guard 3',\n   [{'a': [['s', 0, 600, 'rn'], ['t', 1600, 1840, 'rn']],\n     'b': [['v', 780, 1020, 'icu'], ['u', 0, 480, 'icu']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'u'], 600, 1440],\n   ['qual', 'a']),\n  ('boundary control 4',\n   [{'a': [['t', 1200, 1680, 'rn'], ['s', 0, 700, 'icu']], 'b': [['u', 3000, 3700, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 's', 'u'], 600, 1180],\n   ['ok', None]),\n  ('normal control 5',\n   [{'a': [['s', 0, 240, 'icu']], 'b': [['t', 0, 480, 'icu'], ['u', 1180, 1780, 'icu']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'u'], 600, 960],\n   ['qual', 'a']),\n  ('normal control 6',\n   [{'a': [['u', 1839, 2439, 'icu'], ['t', 1000, 1240, 'rn'], ['s', 60, 300, 'rn']],\n     'b': [['w', 1240, 1480, 'icu'], ['v', 0, 240, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 'u', 'v'], 600, 960],\n   ['overlap', 'a']),\n  ('normal control 7',\n   [{'a': [['t', 600, 1080, 'rn'], ['s', 60, 300, 'icu']],\n     'b': [['v', 1360, 1840, 'icu'], ['u', 60, 660, 'rn'], ['w', 2140, 2740, 'icu']]},\n    {'a': ['rn', 'icu'], 'b': ['icu', 'rn']}, ['a', 'b', 't', 'u'], 600, 1440],\n   ['overlap', 'a']),\n  ('normal control 8',\n   [{'a': [['s', 0, 480, 'rn']], 'b': [['t', 60, 300, 'rn']]}, {'a': ['rn'], 'b': ['rn']},\n    ['a', 'b', 's', None], 600, 1200],\n   ['overlap', 'b'])],\n [('regression: qualification receiver 1',\n   [{'a': [['t', 1300, 1780, 'rn'], ['s', 0, 600, 'rn']], 'b': [['u', 60, 660, 'icu']]},\n    {'a': ['rn', 'icu'], 'b': ['rn']}, ['a', 'b', 't', 'u'], 600, 960],\n   ['overlap', 'a']),\n  ('regression variant: qualification receiver 2',\n   [{'a': [['t', 1240, 1720, 'rn'], ['s', 60, 540, 'rn']], 'b': [['u', 0, 240, 'icu']]},\n    {'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', 'u'], 600, 960],\n   ['qual', 'a']),\n  ('partial repair guard 3',\n   [{'a': [['s', 60, 540, 'rn'], ['u', 2420, 3020, 'rn'], ['t', 1240, 1720, 'rn']],\n     'b': [['v', 60, 660, 'icu']]},\n    {'a': ['rn'], 'b': ['icu', 'rn']}, ['a', 'b', 's', 'v'], 600, 1440],\n   ['qual', 'a']),\n  ('boundary control 4',\n   [{'a': [['s', 0, 600, 'rn'], ['t', 1200, 1680, 'rn']], 'b': [['u', 3000, 3480, 'rn']]},\n    {'a': ['rn'], 'b': ['rn']}, ['a', 'b', 's', 'u'], 600, 960],\n   ['ok', None]),\n  ('normal control 5',\n   [{'a': [['t', 1079, 1679, 'rn'], ['u', 2679, 2919, 'rn'], ['s', 0, 480, 'rn']],\n     'b': [['v', 0, 240, 'rn'], ['w', 1240, 1480, 'rn']]},\n    {'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', 'w'], 600, 1440],\n   ['ok', None]),\n  ('normal control 6',\n   [{'a': [['s', 60, 540, 'rn'], ['t', 1540, 2140, 'rn'], ['u', 2739, 2979, 'icu']],\n     'b': [['w', 1180, 1660, 'rn'], ['v', 0, 480, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 's', None], 600, 1200],\n   ['rest', 'a']),\n  ('normal control 7',\n   [{'a': [['t', 1240, 1480, 'rn'], ['s', 0, 240, 'icu']],\n     'b': [['u', 0, 600, 'rn'], ['v', 1200, 1800, 'rn']]},\n    {'a': ['rn'], 'b': ['rn', 'icu']}, ['a', 'b', 't', None], 600, 1200],\n   ['overlap', 'b']),\n  ('normal control 8',\n   [{'a': [['t', 960, 1440, 'rn'], ['s', 60, 660, 'rn']],\n     'b': [['v', 1140, 1620, 'icu'], ['u', 60, 540, 'rn']]},\n    {'a': ['rn', 'icu'], 'b': ['rn', 'icu']}, ['a', 'b', 's', 'u'], 600, 1440],\n   ['rest', 'a'])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"Stipulated toy labor rule for a bounded roster model; it is not legal advice and does not claim conformance with any jurisdiction, award, or collective agreement. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-shift-rostering-labor-rules-shift-swap-approval-qualification-receiver","generated_at":"2026-09-29T14:52:01.304572+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Self-service shift swaps must be revalidated against labor rules for both parties after the exchange.","repair":"Validate each receiver against the shift they receive.","root_cause":"Each worker is validated against their outgoing shift instead of the incoming one.","sha256":"0e74c1dca093b283f979ac07196c8b0d002338bd2b69acc178fd6eb2569002d4","title":"Swap qualification checked against the shift each worker gives away · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":44.359,"exit_code":1,"observations":[{"actual":["qual","b"],"check":"regression: qualification receiver 1","expected":["qual","b"],"passed":true},{"actual":["overlap","a"],"check":"regression variant: qualification receiver 2","expected":["qual","a"],"passed":false},{"actual":["cap","b"],"check":"partial repair guard 3","expected":["qual","a"],"passed":false},{"actual":["ok",null],"check":"boundary control 4","expected":["ok",null],"passed":true},{"actual":["overlap","b"],"check":"normal control 5","expected":["overlap","b"],"passed":true},{"actual":["overlap","a"],"check":"normal control 6","expected":["overlap","a"],"passed":true},{"actual":["overlap","b"],"check":"normal control 7","expected":["overlap","b"],"passed":true},{"actual":["overlap","a"],"check":"normal control 8","expected":["qual","a"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: qualification receiver 1\", \"actual\": [\"qual\", \"b\"], \"expected\": [\"qual\", \"b\"], \"passed\": true}, {\"check\": \"regression variant: qualification receiver 2\", \"actual\": [\"overlap\", \"a\"], \"expected\": [\"qual\", \"a\"], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [\"cap\", \"b\"], \"expected\": [\"qual\", \"a\"], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [\"ok\", null], \"expected\": [\"ok\", null], \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": [\"overlap\", \"b\"], \"expected\": [\"overlap\", \"b\"], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [\"overlap\", \"a\"], \"expected\": [\"overlap\", \"a\"], \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": [\"overlap\", \"b\"], \"expected\": [\"overlap\", \"b\"], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [\"overlap\", \"a\"], \"expected\": [\"qual\", \"a\"], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.978,"exit_code":1,"observations":[{"actual":["ok",null],"check":"regression: qualification receiver 1","expected":["qual","b"],"passed":false},{"actual":["overlap","a"],"check":"regression variant: qualification receiver 2","expected":["qual","a"],"passed":false},{"actual":["qual","b"],"check":"partial repair guard 3","expected":["qual","a"],"passed":false},{"actual":["ok",null],"check":"boundary control 4","expected":["ok",null],"passed":true},{"actual":["overlap","b"],"check":"normal control 5","expected":["overlap","b"],"passed":true},{"actual":["overlap","a"],"check":"normal control 6","expected":["overlap","a"],"passed":true},{"actual":["overlap","b"],"check":"normal control 7","expected":["overlap","b"],"passed":true},{"actual":["qual","b"],"check":"normal control 8","expected":["qual","a"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: qualification receiver 1\", \"actual\": [\"ok\", null], \"expected\": [\"qual\", \"b\"], \"passed\": false}, {\"check\": \"regression variant: qualification receiver 2\", \"actual\": [\"overlap\", \"a\"], \"expected\": [\"qual\", \"a\"], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [\"qual\", \"b\"], \"expected\": [\"qual\", \"a\"], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [\"ok\", null], \"expected\": [\"ok\", null], \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": [\"overlap\", \"b\"], \"expected\": [\"overlap\", \"b\"], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [\"overlap\", \"a\"], \"expected\": [\"overlap\", \"a\"], \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": [\"overlap\", \"b\"], \"expected\": [\"overlap\", \"b\"], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [\"qual\", \"b\"], \"expected\": [\"qual\", \"a\"], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.87,"exit_code":0,"observations":[{"actual":["qual","b"],"check":"regression: qualification receiver 1","expected":["qual","b"],"passed":true},{"actual":["qual","a"],"check":"regression variant: qualification receiver 2","expected":["qual","a"],"passed":true},{"actual":["qual","a"],"check":"partial repair guard 3","expected":["qual","a"],"passed":true},{"actual":["ok",null],"check":"boundary control 4","expected":["ok",null],"passed":true},{"actual":["overlap","b"],"check":"normal control 5","expected":["overlap","b"],"passed":true},{"actual":["overlap","a"],"check":"normal control 6","expected":["overlap","a"],"passed":true},{"actual":["overlap","b"],"check":"normal control 7","expected":["overlap","b"],"passed":true},{"actual":["qual","a"],"check":"normal control 8","expected":["qual","a"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: qualification receiver 1\", \"actual\": [\"qual\", \"b\"], \"expected\": [\"qual\", \"b\"], \"passed\": true}, {\"check\": \"regression variant: qualification receiver 2\", \"actual\": [\"qual\", \"a\"], \"expected\": [\"qual\", \"a\"], \"passed\": true}, {\"check\": \"partial repair guard 3\", \"actual\": [\"qual\", \"a\"], \"expected\": [\"qual\", \"a\"], \"passed\": true}, {\"check\": \"boundary control 4\", \"actual\": [\"ok\", null], \"expected\": [\"ok\", null], \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": [\"overlap\", \"b\"], \"expected\": [\"overlap\", \"b\"], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [\"overlap\", \"a\"], \"expected\": [\"overlap\", \"a\"], \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": [\"overlap\", \"b\"], \"expected\": [\"overlap\", \"b\"], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [\"qual\", \"a\"], \"expected\": [\"qual\", \"a\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}