{"abstract":"A venue with fewer long-exam rooms than the ratio gets no relief invigilator.","category":"Exam timetabling constraints","checks":8,"contract":"rooms [room, venue, period, exam duration, candidates]. Rooms with candidates running exams longer than 120 minutes need relief cover; each venue-period needs ceil(qualifying rooms / per_relief) relief invigilators. Return [venue, period, qualifying rooms, relief invigilators] sorted by venue, period.","contract_signature":"rooms, per_relief","evaluation_group":"w2-exam-timetabling-constraints-relief-invigilator-cover","failed_approach":"Adding one only above the ratio still leaves small venues uncovered.","family":"w2-exam-timetabling-constraints-relief-invigilator-cover-relief-ceiling","id":"FA-94826","implementations":{"attempt":{"sha256":"6c0b0a1b31f8ab8263b8762317ef1aa3ff97cc273f1c5297258a26e7ae954a74","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(rooms, per_relief):\n    groups = {}\n    for room, venue, p, dur, n in rooms:\n        if dur > 120 and n > 0:\n            groups[(venue, p)] = groups.get((venue, p), 0) + 1\n    return [[v, p, c, c // per_relief + (c > per_relief)] for (v, p), c in sorted(groups.items())]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: relief ceiling 1', [[['R1', 'main', 0, 121, 10]], 3], [['main', 0, 1, 1]]),\n  ('regression variant: relief ceiling 2',\n   [[['R0', 'annex', 1, 180, 0], ['R1', 'main', 1, 121, 30], ['R2', 'annex', 1, 60, 0],\n     ['R3', 'main', 1, 121, 0], ['R4', 'annex', 1, 121, 12], ['R5', 'annex', 0, 180, 12],\n     ['R6', 'annex', 0, 120, 12], ['R7', 'annex', 0, 120, 0]],\n    3],\n   [['annex', 0, 1, 1], ['annex', 1, 1, 1], ['main', 1, 1, 1]]),\n  ('partial repair guard 3',\n   [[['R0', 'annex', 0, 150, 0], ['R1', 'annex', 0, 121, 30], ['R2', 'main', 0, 150, 0],\n     ['R3', 'main', 0, 90, 12]],\n    2],\n   [['annex', 0, 1, 1]]),\n  ('boundary control 4', [[['R1', 'main', 0, 180, 10], ['R2', 'annex', 0, 180, 10]], 3],\n   [['annex', 0, 1, 1], ['main', 0, 1, 1]]),\n  ('normal control 5',\n   [[['R0', 'main', 0, 120, 0], ['R1', 'main', 0, 121, 12], ['R2', 'main', 0, 60, 0],\n     ['R3', 'main', 0, 180, 30], ['R4', 'annex', 1, 150, 30], ['R5', 'annex', 1, 90, 0]],\n    2],\n   [['annex', 1, 1, 1], ['main', 0, 2, 1]]),\n  ('normal control 6', [[['R0', 'annex', 0, 121, 12]], 3], [['annex', 0, 1, 1]]),\n  ('normal control 7',\n   [[['R0', 'main', 1, 120, 0], ['R1', 'main', 0, 90, 0], ['R2', 'annex', 1, 60, 30],\n     ['R3', 'annex', 1, 180, 30], ['R4', 'annex', 0, 150, 0], ['R5', 'annex', 1, 121, 12],\n     ['R6', 'annex', 1, 180, 30]],\n    2],\n   [['annex', 1, 3, 2]]),\n  ('normal control 8',\n   [[['R0', 'annex', 1, 120, 0], ['R1', 'annex', 0, 60, 12], ['R2', 'main', 1, 60, 30]], 2], [])],\n [('regression: relief ceiling 1',\n   [[['R1', 'main', 0, 180, 10], ['R2', 'main', 0, 180, 10], ['R3', 'main', 0, 180, 10],\n     ['R4', 'main', 0, 180, 5]],\n    3],\n   [['main', 0, 4, 2]]),\n  ('regression variant: relief ceiling 2',\n   [[['R0', 'annex', 0, 150, 0], ['R1', 'annex', 0, 60, 30], ['R2', 'main', 0, 120, 0],\n     ['R3', 'main', 0, 90, 0], ['R4', 'annex', 1, 150, 12], ['R5', 'main', 1, 60, 30]],\n    3],\n   [['annex', 1, 1, 1]]),\n  ('partial repair guard 3', [[['R0', 'main', 1, 150, 30]], 3], [['main', 1, 1, 1]]),\n  ('boundary control 4', [[['R1', 'main', 0, 121, 10]], 3], [['main', 0, 1, 1]]),\n  ('normal control 5',\n   [[['R0', 'annex', 1, 120, 0], ['R1', 'annex', 0, 60, 0], ['R2', 'annex', 1, 180, 12],\n     ['R3', 'annex', 0, 180, 12], ['R4', 'annex', 0, 150, 12]],\n    2],\n   [['annex', 0, 2, 1], ['annex', 1, 1, 1]]),\n  ('normal control 6',\n   [[['R0', 'main', 1, 150, 0], ['R1', 'main', 0, 120, 30], ['R2', 'main', 1, 121, 12],\n     ['R3', 'annex', 0, 180, 0], ['R4', 'main', 0, 121, 12], ['R5', 'annex', 0, 150, 0]],\n    3],\n   [['main', 0, 1, 1], ['main', 1, 1, 1]]),\n  ('normal control 7',\n   [[['R0', 'main', 0, 120, 30], ['R1', 'annex', 0, 60, 30], ['R2', 'annex', 1, 90, 0],\n     ['R3', 'annex', 0, 90, 0], ['R4', 'annex', 0, 180, 0], ['R5', 'annex', 0, 180, 0],\n     ['R6', 'annex', 0, 60, 12], ['R7', 'annex', 0, 121, 0]],\n    2],\n   []),\n  ('normal control 8',\n   [[['R0', 'annex', 0, 121, 0], ['R1', 'annex', 1, 150, 0], ['R2', 'annex', 1, 60, 30],\n     ['R3', 'annex', 1, 121, 30], ['R4', 'main', 0, 150, 30], ['R5', 'main', 1, 150, 30],\n     ['R6', 'main', 0, 150, 30], ['R7', 'main', 1, 150, 0]],\n    3],\n   [['annex', 1, 1, 1], ['main', 0, 2, 1], ['main', 1, 1, 1]])],\n [('regression: relief ceiling 1', [[['R1', 'main', 0, 180, 10], ['R2', 'annex', 0, 180, 10]], 3],\n   [['annex', 0, 1, 1], ['main', 0, 1, 1]]),\n  ('regression variant: relief ceiling 2',\n   [[['R0', 'main', 1, 121, 30], ['R1', 'annex', 0, 90, 30], ['R2', 'annex', 1, 120, 30],\n     ['R3', 'annex', 0, 90, 0], ['R4', 'main', 1, 121, 12], ['R5', 'annex', 1, 60, 30]],\n    3],\n   [['main', 1, 2, 1]]),\n  ('partial repair guard 3',\n   [[['R0', 'annex', 0, 150, 0], ['R1', 'annex', 0, 60, 30], ['R2', 'main', 0, 120, 0],\n     ['R3', 'main', 0, 90, 0], ['R4', 'annex', 1, 150, 12], ['R5', 'main', 1, 60, 30]],\n    3],\n   [['annex', 1, 1, 1]]),\n  ('boundary control 4', [[['R1', 'main', 0, 180, 0]], 2], []),\n  ('normal control 5',\n   [[['R0', 'main', 1, 121, 12], ['R1', 'annex', 1, 120, 0], ['R2', 'annex', 1, 121, 30],\n     ['R3', 'main', 1, 150, 12], ['R4', 'annex', 1, 90, 12], ['R5', 'main', 1, 90, 12],\n     ['R6', 'main', 0, 121, 30], ['R7', 'annex', 0, 60, 30]],\n    3],\n   [['annex', 1, 1, 1], ['main', 0, 1, 1], ['main', 1, 2, 1]]),\n  ('normal control 6',\n   [[['R0', 'annex', 1, 121, 0], ['R1', 'main', 1, 121, 30], ['R2', 'annex', 0, 180, 30],\n     ['R3', 'main', 1, 90, 12], ['R4', 'main', 1, 180, 30], ['R5', 'annex', 0, 60, 0]],\n    3],\n   [['annex', 0, 1, 1], ['main', 1, 2, 1]]),\n  ('normal control 7',\n   [[['R0', 'annex', 1, 90, 0], ['R1', 'main', 1, 90, 12], ['R2', 'main', 0, 90, 0],\n     ['R3', 'annex', 1, 120, 30], ['R4', 'main', 0, 121, 12], ['R5', 'annex', 1, 60, 30],\n     ['R6', 'annex', 1, 90, 0], ['R7', 'main', 1, 120, 12]],\n    3],\n   [['main', 0, 1, 1]]),\n  ('normal control 8',\n   [[['R0', 'annex', 0, 90, 12], ['R1', 'main', 0, 120, 12], ['R2', 'annex', 1, 90, 0],\n     ['R3', 'annex', 0, 60, 12], ['R4', 'main', 1, 60, 30], ['R5', 'annex', 0, 120, 12],\n     ['R6', 'annex', 1, 90, 12]],\n    2],\n   [])],\n [('regression: relief ceiling 1',\n   [[['R0', 'annex', 0, 60, 0], ['R1', 'annex', 0, 121, 12], ['R2', 'main', 0, 120, 30],\n     ['R3', 'annex', 1, 180, 30]],\n    3],\n   [['annex', 0, 1, 1], ['annex', 1, 1, 1]]),\n  ('regression variant: relief ceiling 2',\n   [[['R0', 'main', 1, 121, 12], ['R1', 'annex', 1, 180, 0], ['R2', 'annex', 1, 121, 12],\n     ['R3', 'main', 0, 120, 0]],\n    2],\n   [['annex', 1, 1, 1], ['main', 1, 1, 1]]),\n  ('partial repair guard 3',\n   [[['R0', 'annex', 1, 120, 12], ['R1', 'annex', 0, 150, 30], ['R2', 'main', 0, 150, 12],\n     ['R3', 'annex', 1, 121, 12], ['R4', 'annex', 1, 120, 0], ['R5', 'main', 1, 121, 12]],\n    2],\n   [['annex', 0, 1, 1], ['annex', 1, 1, 1], ['main', 0, 1, 1], ['main', 1, 1, 1]]),\n  ('boundary control 4',\n   [[['R1', 'main', 0, 180, 10], ['R2', 'main', 0, 180, 10], ['R3', 'main', 0, 180, 10],\n     ['R4', 'main', 0, 180, 5]],\n    3],\n   [['main', 0, 4, 2]]),\n  ('normal control 5',\n   [[['R0', 'main', 1, 120, 0], ['R1', 'annex', 1, 121, 30], ['R2', 'main', 1, 150, 30],\n     ['R3', 'main', 1, 60, 12], ['R4', 'annex', 0, 121, 12], ['R5', 'main', 1, 121, 12],\n     ['R6', 'annex', 0, 90, 12], ['R7', 'annex', 0, 90, 30]],\n    2],\n   [['annex', 0, 1, 1], ['annex', 1, 1, 1], ['main', 1, 2, 1]]),\n  ('normal control 6', [[['R0', 'annex', 0, 150, 12], ['R1', 'main', 0, 180, 0]], 2], [['annex', 0, 1, 1]]),\n  ('normal control 7',\n   [[['R0', 'main', 0, 150, 12], ['R1', 'main', 1, 150, 0], ['R2', 'annex', 0, 60, 12],\n     ['R3', 'annex', 1, 120, 12]],\n    3],\n   [['main', 0, 1, 1]]),\n  ('normal control 8',\n   [[['R0', 'main', 0, 90, 0], ['R1', 'annex', 0, 121, 12], ['R2', 'annex', 1, 90, 12],\n     ['R3', 'main', 0, 60, 0], ['R4', 'main', 0, 60, 30], ['R5', 'main', 1, 120, 0]],\n    2],\n   [['annex', 0, 1, 1]])],\n [('regression: relief ceiling 1',\n   [[['R0', 'main', 1, 150, 30], ['R1', 'annex', 0, 150, 30], ['R2', 'annex', 0, 90, 30],\n     ['R3', 'main', 0, 90, 30], ['R4', 'main', 0, 150, 0]],\n    3],\n   [['annex', 0, 1, 1], ['main', 1, 1, 1]]),\n  ('regression variant: relief ceiling 2',\n   [[['R0', 'main', 1, 150, 12], ['R1', 'main', 1, 150, 30], ['R2', 'main', 0, 90, 30],\n     ['R3', 'annex', 0, 90, 0], ['R4', 'annex', 0, 121, 30], ['R5', 'main', 1, 121, 12]],\n    2],\n   [['annex', 0, 1, 1], ['main', 1, 3, 2]]),\n  ('partial repair guard 3',\n   [[['R0', 'main', 0, 180, 12], ['R1', 'annex', 0, 150, 0], ['R2', 'annex', 0, 150, 12],\n     ['R3', 'main', 0, 180, 0], ['R4', 'annex', 1, 180, 30], ['R5', 'annex', 1, 120, 30],\n     ['R6', 'annex', 1, 180, 0], ['R7', 'main', 1, 150, 12]],\n    2],\n   [['annex', 0, 1, 1], ['annex', 1, 1, 1], ['main', 0, 1, 1], ['main', 1, 1, 1]]),\n  ('boundary control 4', [[['R1', 'main', 0, 120, 10]], 3], []),\n  ('normal control 5', [[['R0', 'main', 1, 150, 30], ['R1', 'annex', 0, 121, 12]], 2],\n   [['annex', 0, 1, 1], ['main', 1, 1, 1]]),\n  ('normal control 6', [[['R0', 'annex', 0, 60, 30]], 3], []),\n  ('normal control 7', [[['R0', 'annex', 1, 121, 0]], 3], []),\n  ('normal control 8',\n   [[['R0', 'main', 1, 150, 12], ['R1', 'annex', 1, 60, 0], ['R2', 'annex', 0, 90, 30],\n     ['R3', 'annex', 0, 60, 0], ['R4', 'main', 1, 180, 0]],\n    2],\n   [['main', 1, 1, 1]])]]\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":"b7c463db4e3e4baa2ad9b4386764e40d8d514edd5e5ddef5390bb7cb41eca79f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(rooms, per_relief):\n    groups = {}\n    for room, venue, p, dur, n in rooms:\n        if dur > 120 and n > 0:\n            groups[(venue, p)] = groups.get((venue, p), 0) + 1\n    return [[v, p, c, c // per_relief] for (v, p), c in sorted(groups.items())]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: relief ceiling 1', [[['R1', 'main', 0, 121, 10]], 3], [['main', 0, 1, 1]]),\n  ('regression variant: relief ceiling 2',\n   [[['R0', 'annex', 1, 180, 0], ['R1', 'main', 1, 121, 30], ['R2', 'annex', 1, 60, 0],\n     ['R3', 'main', 1, 121, 0], ['R4', 'annex', 1, 121, 12], ['R5', 'annex', 0, 180, 12],\n     ['R6', 'annex', 0, 120, 12], ['R7', 'annex', 0, 120, 0]],\n    3],\n   [['annex', 0, 1, 1], ['annex', 1, 1, 1], ['main', 1, 1, 1]]),\n  ('partial repair guard 3',\n   [[['R0', 'annex', 0, 150, 0], ['R1', 'annex', 0, 121, 30], ['R2', 'main', 0, 150, 0],\n     ['R3', 'main', 0, 90, 12]],\n    2],\n   [['annex', 0, 1, 1]]),\n  ('boundary control 4', [[['R1', 'main', 0, 180, 10], ['R2', 'annex', 0, 180, 10]], 3],\n   [['annex', 0, 1, 1], ['main', 0, 1, 1]]),\n  ('normal control 5',\n   [[['R0', 'main', 0, 120, 0], ['R1', 'main', 0, 121, 12], ['R2', 'main', 0, 60, 0],\n     ['R3', 'main', 0, 180, 30], ['R4', 'annex', 1, 150, 30], ['R5', 'annex', 1, 90, 0]],\n    2],\n   [['annex', 1, 1, 1], ['main', 0, 2, 1]]),\n  ('normal control 6', [[['R0', 'annex', 0, 121, 12]], 3], [['annex', 0, 1, 1]]),\n  ('normal control 7',\n   [[['R0', 'main', 1, 120, 0], ['R1', 'main', 0, 90, 0], ['R2', 'annex', 1, 60, 30],\n     ['R3', 'annex', 1, 180, 30], ['R4', 'annex', 0, 150, 0], ['R5', 'annex', 1, 121, 12],\n     ['R6', 'annex', 1, 180, 30]],\n    2],\n   [['annex', 1, 3, 2]]),\n  ('normal control 8',\n   [[['R0', 'annex', 1, 120, 0], ['R1', 'annex', 0, 60, 12], ['R2', 'main', 1, 60, 30]], 2], [])],\n [('regression: relief ceiling 1',\n   [[['R1', 'main', 0, 180, 10], ['R2', 'main', 0, 180, 10], ['R3', 'main', 0, 180, 10],\n     ['R4', 'main', 0, 180, 5]],\n    3],\n   [['main', 0, 4, 2]]),\n  ('regression variant: relief ceiling 2',\n   [[['R0', 'annex', 0, 150, 0], ['R1', 'annex', 0, 60, 30], ['R2', 'main', 0, 120, 0],\n     ['R3', 'main', 0, 90, 0], ['R4', 'annex', 1, 150, 12], ['R5', 'main', 1, 60, 30]],\n    3],\n   [['annex', 1, 1, 1]]),\n  ('partial repair guard 3', [[['R0', 'main', 1, 150, 30]], 3], [['main', 1, 1, 1]]),\n  ('boundary control 4', [[['R1', 'main', 0, 121, 10]], 3], [['main', 0, 1, 1]]),\n  ('normal control 5',\n   [[['R0', 'annex', 1, 120, 0], ['R1', 'annex', 0, 60, 0], ['R2', 'annex', 1, 180, 12],\n     ['R3', 'annex', 0, 180, 12], ['R4', 'annex', 0, 150, 12]],\n    2],\n   [['annex', 0, 2, 1], ['annex', 1, 1, 1]]),\n  ('normal control 6',\n   [[['R0', 'main', 1, 150, 0], ['R1', 'main', 0, 120, 30], ['R2', 'main', 1, 121, 12],\n     ['R3', 'annex', 0, 180, 0], ['R4', 'main', 0, 121, 12], ['R5', 'annex', 0, 150, 0]],\n    3],\n   [['main', 0, 1, 1], ['main', 1, 1, 1]]),\n  ('normal control 7',\n   [[['R0', 'main', 0, 120, 30], ['R1', 'annex', 0, 60, 30], ['R2', 'annex', 1, 90, 0],\n     ['R3', 'annex', 0, 90, 0], ['R4', 'annex', 0, 180, 0], ['R5', 'annex', 0, 180, 0],\n     ['R6', 'annex', 0, 60, 12], ['R7', 'annex', 0, 121, 0]],\n    2],\n   []),\n  ('normal control 8',\n   [[['R0', 'annex', 0, 121, 0], ['R1', 'annex', 1, 150, 0], ['R2', 'annex', 1, 60, 30],\n     ['R3', 'annex', 1, 121, 30], ['R4', 'main', 0, 150, 30], ['R5', 'main', 1, 150, 30],\n     ['R6', 'main', 0, 150, 30], ['R7', 'main', 1, 150, 0]],\n    3],\n   [['annex', 1, 1, 1], ['main', 0, 2, 1], ['main', 1, 1, 1]])],\n [('regression: relief ceiling 1', [[['R1', 'main', 0, 180, 10], ['R2', 'annex', 0, 180, 10]], 3],\n   [['annex', 0, 1, 1], ['main', 0, 1, 1]]),\n  ('regression variant: relief ceiling 2',\n   [[['R0', 'main', 1, 121, 30], ['R1', 'annex', 0, 90, 30], ['R2', 'annex', 1, 120, 30],\n     ['R3', 'annex', 0, 90, 0], ['R4', 'main', 1, 121, 12], ['R5', 'annex', 1, 60, 30]],\n    3],\n   [['main', 1, 2, 1]]),\n  ('partial repair guard 3',\n   [[['R0', 'annex', 0, 150, 0], ['R1', 'annex', 0, 60, 30], ['R2', 'main', 0, 120, 0],\n     ['R3', 'main', 0, 90, 0], ['R4', 'annex', 1, 150, 12], ['R5', 'main', 1, 60, 30]],\n    3],\n   [['annex', 1, 1, 1]]),\n  ('boundary control 4', [[['R1', 'main', 0, 180, 0]], 2], []),\n  ('normal control 5',\n   [[['R0', 'main', 1, 121, 12], ['R1', 'annex', 1, 120, 0], ['R2', 'annex', 1, 121, 30],\n     ['R3', 'main', 1, 150, 12], ['R4', 'annex', 1, 90, 12], ['R5', 'main', 1, 90, 12],\n     ['R6', 'main', 0, 121, 30], ['R7', 'annex', 0, 60, 30]],\n    3],\n   [['annex', 1, 1, 1], ['main', 0, 1, 1], ['main', 1, 2, 1]]),\n  ('normal control 6',\n   [[['R0', 'annex', 1, 121, 0], ['R1', 'main', 1, 121, 30], ['R2', 'annex', 0, 180, 30],\n     ['R3', 'main', 1, 90, 12], ['R4', 'main', 1, 180, 30], ['R5', 'annex', 0, 60, 0]],\n    3],\n   [['annex', 0, 1, 1], ['main', 1, 2, 1]]),\n  ('normal control 7',\n   [[['R0', 'annex', 1, 90, 0], ['R1', 'main', 1, 90, 12], ['R2', 'main', 0, 90, 0],\n     ['R3', 'annex', 1, 120, 30], ['R4', 'main', 0, 121, 12], ['R5', 'annex', 1, 60, 30],\n     ['R6', 'annex', 1, 90, 0], ['R7', 'main', 1, 120, 12]],\n    3],\n   [['main', 0, 1, 1]]),\n  ('normal control 8',\n   [[['R0', 'annex', 0, 90, 12], ['R1', 'main', 0, 120, 12], ['R2', 'annex', 1, 90, 0],\n     ['R3', 'annex', 0, 60, 12], ['R4', 'main', 1, 60, 30], ['R5', 'annex', 0, 120, 12],\n     ['R6', 'annex', 1, 90, 12]],\n    2],\n   [])],\n [('regression: relief ceiling 1',\n   [[['R0', 'annex', 0, 60, 0], ['R1', 'annex', 0, 121, 12], ['R2', 'main', 0, 120, 30],\n     ['R3', 'annex', 1, 180, 30]],\n    3],\n   [['annex', 0, 1, 1], ['annex', 1, 1, 1]]),\n  ('regression variant: relief ceiling 2',\n   [[['R0', 'main', 1, 121, 12], ['R1', 'annex', 1, 180, 0], ['R2', 'annex', 1, 121, 12],\n     ['R3', 'main', 0, 120, 0]],\n    2],\n   [['annex', 1, 1, 1], ['main', 1, 1, 1]]),\n  ('partial repair guard 3',\n   [[['R0', 'annex', 1, 120, 12], ['R1', 'annex', 0, 150, 30], ['R2', 'main', 0, 150, 12],\n     ['R3', 'annex', 1, 121, 12], ['R4', 'annex', 1, 120, 0], ['R5', 'main', 1, 121, 12]],\n    2],\n   [['annex', 0, 1, 1], ['annex', 1, 1, 1], ['main', 0, 1, 1], ['main', 1, 1, 1]]),\n  ('boundary control 4',\n   [[['R1', 'main', 0, 180, 10], ['R2', 'main', 0, 180, 10], ['R3', 'main', 0, 180, 10],\n     ['R4', 'main', 0, 180, 5]],\n    3],\n   [['main', 0, 4, 2]]),\n  ('normal control 5',\n   [[['R0', 'main', 1, 120, 0], ['R1', 'annex', 1, 121, 30], ['R2', 'main', 1, 150, 30],\n     ['R3', 'main', 1, 60, 12], ['R4', 'annex', 0, 121, 12], ['R5', 'main', 1, 121, 12],\n     ['R6', 'annex', 0, 90, 12], ['R7', 'annex', 0, 90, 30]],\n    2],\n   [['annex', 0, 1, 1], ['annex', 1, 1, 1], ['main', 1, 2, 1]]),\n  ('normal control 6', [[['R0', 'annex', 0, 150, 12], ['R1', 'main', 0, 180, 0]], 2], [['annex', 0, 1, 1]]),\n  ('normal control 7',\n   [[['R0', 'main', 0, 150, 12], ['R1', 'main', 1, 150, 0], ['R2', 'annex', 0, 60, 12],\n     ['R3', 'annex', 1, 120, 12]],\n    3],\n   [['main', 0, 1, 1]]),\n  ('normal control 8',\n   [[['R0', 'main', 0, 90, 0], ['R1', 'annex', 0, 121, 12], ['R2', 'annex', 1, 90, 12],\n     ['R3', 'main', 0, 60, 0], ['R4', 'main', 0, 60, 30], ['R5', 'main', 1, 120, 0]],\n    2],\n   [['annex', 0, 1, 1]])],\n [('regression: relief ceiling 1',\n   [[['R0', 'main', 1, 150, 30], ['R1', 'annex', 0, 150, 30], ['R2', 'annex', 0, 90, 30],\n     ['R3', 'main', 0, 90, 30], ['R4', 'main', 0, 150, 0]],\n    3],\n   [['annex', 0, 1, 1], ['main', 1, 1, 1]]),\n  ('regression variant: relief ceiling 2',\n   [[['R0', 'main', 1, 150, 12], ['R1', 'main', 1, 150, 30], ['R2', 'main', 0, 90, 30],\n     ['R3', 'annex', 0, 90, 0], ['R4', 'annex', 0, 121, 30], ['R5', 'main', 1, 121, 12]],\n    2],\n   [['annex', 0, 1, 1], ['main', 1, 3, 2]]),\n  ('partial repair guard 3',\n   [[['R0', 'main', 0, 180, 12], ['R1', 'annex', 0, 150, 0], ['R2', 'annex', 0, 150, 12],\n     ['R3', 'main', 0, 180, 0], ['R4', 'annex', 1, 180, 30], ['R5', 'annex', 1, 120, 30],\n     ['R6', 'annex', 1, 180, 0], ['R7', 'main', 1, 150, 12]],\n    2],\n   [['annex', 0, 1, 1], ['annex', 1, 1, 1], ['main', 0, 1, 1], ['main', 1, 1, 1]]),\n  ('boundary control 4', [[['R1', 'main', 0, 120, 10]], 3], []),\n  ('normal control 5', [[['R0', 'main', 1, 150, 30], ['R1', 'annex', 0, 121, 12]], 2],\n   [['annex', 0, 1, 1], ['main', 1, 1, 1]]),\n  ('normal control 6', [[['R0', 'annex', 0, 60, 30]], 3], []),\n  ('normal control 7', [[['R0', 'annex', 1, 121, 0]], 3], []),\n  ('normal control 8',\n   [[['R0', 'main', 1, 150, 12], ['R1', 'annex', 1, 60, 0], ['R2', 'annex', 0, 90, 30],\n     ['R3', 'annex', 0, 60, 0], ['R4', 'main', 1, 180, 0]],\n    2],\n   [['main', 1, 1, 1]])]]\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 exam-timetabling rule set for a bounded model; it does not claim conformance with any institution's regulations or a benchmark specification, and it performs no search or optimisation. 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-exam-timetabling-constraints-relief-invigilator-cover-relief-ceiling","generated_at":"2026-09-29T14:52:07.969315+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Long exams need relief invigilators so room staff can take breaks; cover is pooled per venue and period.","root_cause":"Relief invigilators are computed with floor division.","sha256":"d81b235882c60d9c4599c3b68703e2e0fe83c0119f16d46ebd69c3246ee127ac","title":"Relief cover floors the room ratio · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":43.056,"exit_code":1,"observations":[{"actual":[["main",0,1,0]],"check":"regression: relief ceiling 1","expected":[["main",0,1,1]],"passed":false},{"actual":[["annex",0,1,0],["annex",1,1,0],["main",1,1,0]],"check":"regression variant: relief ceiling 2","expected":[["annex",0,1,1],["annex",1,1,1],["main",1,1,1]],"passed":false},{"actual":[["annex",0,1,0]],"check":"partial repair guard 3","expected":[["annex",0,1,1]],"passed":false},{"actual":[["annex",0,1,0],["main",0,1,0]],"check":"boundary control 4","expected":[["annex",0,1,1],["main",0,1,1]],"passed":false},{"actual":[["annex",1,1,0],["main",0,2,1]],"check":"normal control 5","expected":[["annex",1,1,1],["main",0,2,1]],"passed":false},{"actual":[["annex",0,1,0]],"check":"normal control 6","expected":[["annex",0,1,1]],"passed":false},{"actual":[["annex",1,3,2]],"check":"normal control 7","expected":[["annex",1,3,2]],"passed":true},{"actual":[],"check":"normal control 8","expected":[],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: relief ceiling 1\", \"actual\": [[\"main\", 0, 1, 0]], \"expected\": [[\"main\", 0, 1, 1]], \"passed\": false}, {\"check\": \"regression variant: relief ceiling 2\", \"actual\": [[\"annex\", 0, 1, 0], [\"annex\", 1, 1, 0], [\"main\", 1, 1, 0]], \"expected\": [[\"annex\", 0, 1, 1], [\"annex\", 1, 1, 1], [\"main\", 1, 1, 1]], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [[\"annex\", 0, 1, 0]], \"expected\": [[\"annex\", 0, 1, 1]], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [[\"annex\", 0, 1, 0], [\"main\", 0, 1, 0]], \"expected\": [[\"annex\", 0, 1, 1], [\"main\", 0, 1, 1]], \"passed\": false}, {\"check\": \"normal control 5\", \"actual\": [[\"annex\", 1, 1, 0], [\"main\", 0, 2, 1]], \"expected\": [[\"annex\", 1, 1, 1], [\"main\", 0, 2, 1]], \"passed\": false}, {\"check\": \"normal control 6\", \"actual\": [[\"annex\", 0, 1, 0]], \"expected\": [[\"annex\", 0, 1, 1]], \"passed\": false}, {\"check\": \"normal control 7\", \"actual\": [[\"annex\", 1, 3, 2]], \"expected\": [[\"annex\", 1, 3, 2]], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [], \"expected\": [], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.298,"exit_code":1,"observations":[{"actual":[["main",0,1,0]],"check":"regression: relief ceiling 1","expected":[["main",0,1,1]],"passed":false},{"actual":[["annex",0,1,0],["annex",1,1,0],["main",1,1,0]],"check":"regression variant: relief ceiling 2","expected":[["annex",0,1,1],["annex",1,1,1],["main",1,1,1]],"passed":false},{"actual":[["annex",0,1,0]],"check":"partial repair guard 3","expected":[["annex",0,1,1]],"passed":false},{"actual":[["annex",0,1,0],["main",0,1,0]],"check":"boundary control 4","expected":[["annex",0,1,1],["main",0,1,1]],"passed":false},{"actual":[["annex",1,1,0],["main",0,2,1]],"check":"normal control 5","expected":[["annex",1,1,1],["main",0,2,1]],"passed":false},{"actual":[["annex",0,1,0]],"check":"normal control 6","expected":[["annex",0,1,1]],"passed":false},{"actual":[["annex",1,3,1]],"check":"normal control 7","expected":[["annex",1,3,2]],"passed":false},{"actual":[],"check":"normal control 8","expected":[],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: relief ceiling 1\", \"actual\": [[\"main\", 0, 1, 0]], \"expected\": [[\"main\", 0, 1, 1]], \"passed\": false}, {\"check\": \"regression variant: relief ceiling 2\", \"actual\": [[\"annex\", 0, 1, 0], [\"annex\", 1, 1, 0], [\"main\", 1, 1, 0]], \"expected\": [[\"annex\", 0, 1, 1], [\"annex\", 1, 1, 1], [\"main\", 1, 1, 1]], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [[\"annex\", 0, 1, 0]], \"expected\": [[\"annex\", 0, 1, 1]], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [[\"annex\", 0, 1, 0], [\"main\", 0, 1, 0]], \"expected\": [[\"annex\", 0, 1, 1], [\"main\", 0, 1, 1]], \"passed\": false}, {\"check\": \"normal control 5\", \"actual\": [[\"annex\", 1, 1, 0], [\"main\", 0, 2, 1]], \"expected\": [[\"annex\", 1, 1, 1], [\"main\", 0, 2, 1]], \"passed\": false}, {\"check\": \"normal control 6\", \"actual\": [[\"annex\", 0, 1, 0]], \"expected\": [[\"annex\", 0, 1, 1]], \"passed\": false}, {\"check\": \"normal control 7\", \"actual\": [[\"annex\", 1, 3, 1]], \"expected\": [[\"annex\", 1, 3, 2]], \"passed\": false}, {\"check\": \"normal control 8\", \"actual\": [], \"expected\": [], \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}