{"abstract":"Exams split across rooms in one period are listed as conflicts.","category":"Exam timetabling constraints","checks":8,"contract":"exams = required exam ids; assign [exam, room, period]. Return missing (required but unassigned), unknown (assigned but not required) and conflict (assigned to more than one distinct period; a split across rooms in one period is fine), each sorted.","contract_signature":"exams, assign","evaluation_group":"w2-exam-timetabling-constraints-timetable-completeness","failed_approach":"Requiring three periods misses two-period conflicts.","family":"w2-exam-timetabling-constraints-timetable-completeness-split-conflict","id":"FA-94821","implementations":{"attempt":{"sha256":"76235baf01969e0355cc1f7dc331dbe042d0cfb2f185e93bf8e2b2fb090cb932","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(exams, assign):\n    req = set(exams)\n    per = {}\n    for ex, r, p in assign:\n        per.setdefault(ex, set()).add(p)\n    return {'missing': sorted(req - set(per)), 'unknown': sorted(set(per) - req),\n            'conflict': sorted(ex for ex in per if len(per[ex]) > 2)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: split conflict 1', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],\n   {'missing': ['B'], 'unknown': [], 'conflict': []}),\n  ('regression variant: split conflict 2',\n   [['ECON150', 'PHYS110', 'MATH101H', 'MATH101', 'CHEM120'],\n    [['ECON150', 'R2', 2], ['BIO130', 'R1', 1], ['MATH101', 'R2', 2], ['MATH101', 'R2', 1],\n     ['CHEM120', 'R2', 0], ['HIST140', 'R1', 2], ['HIST140', 'R2', 2]]],\n   {'missing': ['MATH101H', 'PHYS110'], 'unknown': ['BIO130', 'HIST140'], 'conflict': ['MATH101']}),\n  ('partial repair guard 3',\n   [['CHEM120', 'HIST140', 'ECON150', 'BIO130', 'MATH101H', 'MATH101'],\n    [['BIO130', 'R2', 2], ['MATH101H', 'R1', 1], ['MATH101', 'R1', 1], ['HIST140', 'R1', 0],\n     ['HIST140', 'R1', 2]]],\n   {'missing': ['CHEM120', 'ECON150'], 'unknown': [], 'conflict': ['HIST140']}),\n  ('boundary control 4', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],\n   {'missing': [], 'unknown': ['C'], 'conflict': ['A']}),\n  ('normal control 5',\n   [['PHYS110', 'BIO130', 'MATH101', 'ECON150', 'CHEM120'],\n    [['MATH101', 'R1', 2], ['PHYS110', 'R2', 2], ['CHEM120', 'R2', 1], ['BIO130', 'R2', 1],\n     ['CHEM120', 'R2', 2], ['MATH101H', 'R1', 2], ['CHEM120', 'R2', 2]]],\n   {'missing': ['ECON150'], 'unknown': ['MATH101H'], 'conflict': ['CHEM120']}),\n  ('normal control 6',\n   [['MATH101', 'ECON150', 'PHYS110', 'MATH101H'], [['ECON150', 'R1', 0], ['MATH101', 'R1', 0]]],\n   {'missing': ['MATH101H', 'PHYS110'], 'unknown': [], 'conflict': []}),\n  ('normal control 7',\n   [['CHEM120', 'PHYS110', 'MATH101H', 'MATH101', 'HIST140', 'BIO130'],\n    [['BIO130', 'R2', 2], ['HIST140', 'R1', 0], ['ECON150', 'R2', 2], ['PHYS110', 'R1', 2],\n     ['PHYS110', 'R2', 1], ['HIST140', 'R2', 1]]],\n   {'missing': ['CHEM120', 'MATH101', 'MATH101H'],\n    'unknown': ['ECON150'],\n    'conflict': ['HIST140', 'PHYS110']}),\n  ('normal control 8',\n   [['HIST140', 'ECON150', 'MATH101', 'MATH101H'],\n    [['HIST140', 'R2', 0], ['MATH101H', 'R2', 2], ['PHYS110', 'R1', 1]]],\n   {'missing': ['ECON150', 'MATH101'], 'unknown': ['PHYS110'], 'conflict': []})],\n [('regression: split conflict 1',\n   [['MATH101H', 'MATH101', 'ECON150', 'HIST140'],\n    [['HIST140', 'R1', 1], ['BIO130', 'R1', 1], ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 0],\n     ['MATH101H', 'R1', 0], ['HIST140', 'R2', 1]]],\n   {'missing': ['ECON150', 'MATH101'], 'unknown': ['BIO130', 'CHEM120'], 'conflict': ['CHEM120']}),\n  ('regression variant: split conflict 2',\n   [['BIO130', 'MATH101', 'ECON150', 'MATH101H'],\n    [['MATH101', 'R1', 2], ['MATH101', 'R1', 2], ['CHEM120', 'R1', 2]]],\n   {'missing': ['BIO130', 'ECON150', 'MATH101H'], 'unknown': ['CHEM120'], 'conflict': []}),\n  ('partial repair guard 3',\n   [['ECON150', 'HIST140', 'PHYS110', 'MATH101'],\n    [['CHEM120', 'R2', 0], ['CHEM120', 'R1', 2], ['HIST140', 'R1', 0]]],\n   {'missing': ['ECON150', 'MATH101', 'PHYS110'], 'unknown': ['CHEM120'], 'conflict': ['CHEM120']}),\n  ('boundary control 4', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],\n   {'missing': ['B'], 'unknown': [], 'conflict': []}),\n  ('boundary control 5', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],\n   {'missing': [], 'unknown': ['C'], 'conflict': ['A']}),\n  ('normal control 6',\n   [['HIST140', 'ECON150'],\n    [['HIST140', 'R2', 0], ['ECON150', 'R1', 1], ['MATH101H', 'R2', 2], ['BIO130', 'R2', 0],\n     ['MATH101H', 'R2', 2]]],\n   {'missing': [], 'unknown': ['BIO130', 'MATH101H'], 'conflict': []}),\n  ('normal control 7',\n   [['MATH101H', 'PHYS110', 'HIST140'],\n    [['PHYS110', 'R2', 1], ['MATH101H', 'R2', 2], ['HIST140', 'R1', 0], ['MATH101H', 'R1', 0],\n     ['CHEM120', 'R2', 0], ['PHYS110', 'R1', 0]]],\n   {'missing': [], 'unknown': ['CHEM120'], 'conflict': ['MATH101H', 'PHYS110']}),\n  ('normal control 8',\n   [['CHEM120', 'MATH101', 'ECON150', 'MATH101H', 'BIO130', 'PHYS110'],\n    [['HIST140', 'R2', 2], ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 0]]],\n   {'missing': ['BIO130', 'ECON150', 'MATH101', 'MATH101H', 'PHYS110'],\n    'unknown': ['HIST140'],\n    'conflict': ['CHEM120']})],\n [('regression: split conflict 1',\n   [['MATH101', 'MATH101H'],\n    [['ECON150', 'R1', 1], ['MATH101H', 'R2', 0], ['MATH101', 'R1', 0], ['PHYS110', 'R1', 1],\n     ['ECON150', 'R1', 1], ['PHYS110', 'R1', 2]]],\n   {'missing': [], 'unknown': ['ECON150', 'PHYS110'], 'conflict': ['PHYS110']}),\n  ('regression variant: split conflict 2',\n   [['ECON150', 'HIST140', 'CHEM120'],\n    [['MATH101H', 'R1', 0], ['MATH101', 'R1', 0], ['PHYS110', 'R2', 1], ['BIO130', 'R2', 2],\n     ['ECON150', 'R2', 2], ['MATH101', 'R1', 0]]],\n   {'missing': ['CHEM120', 'HIST140'],\n    'unknown': ['BIO130', 'MATH101', 'MATH101H', 'PHYS110'],\n    'conflict': []}),\n  ('partial repair guard 3',\n   [['MATH101H', 'ECON150'],\n    [['HIST140', 'R2', 2], ['MATH101H', 'R2', 0], ['MATH101', 'R2', 1], ['MATH101H', 'R1', 1],\n     ['MATH101H', 'R1', 0], ['MATH101', 'R1', 1]]],\n   {'missing': ['ECON150'], 'unknown': ['HIST140', 'MATH101'], 'conflict': ['MATH101H']}),\n  ('boundary control 4', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],\n   {'missing': [], 'unknown': ['C'], 'conflict': ['A']}),\n  ('boundary control 5', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],\n   {'missing': ['B'], 'unknown': [], 'conflict': []}),\n  ('normal control 6',\n   [['PHYS110', 'MATH101H'],\n    [['PHYS110', 'R2', 1], ['PHYS110', 'R2', 1], ['ECON150', 'R2', 1], ['CHEM120', 'R1', 2]]],\n   {'missing': ['MATH101H'], 'unknown': ['CHEM120', 'ECON150'], 'conflict': []}),\n  ('normal control 7',\n   [['HIST140', 'ECON150'],\n    [['HIST140', 'R2', 0], ['ECON150', 'R1', 1], ['MATH101H', 'R2', 2], ['BIO130', 'R2', 0],\n     ['MATH101H', 'R2', 2]]],\n   {'missing': [], 'unknown': ['BIO130', 'MATH101H'], 'conflict': []}),\n  ('normal control 8',\n   [['ECON150', 'PHYS110', 'BIO130'], [['CHEM120', 'R1', 1], ['PHYS110', 'R1', 0], ['MATH101H', 'R2', 2]]],\n   {'missing': ['BIO130', 'ECON150'], 'unknown': ['CHEM120', 'MATH101H'], 'conflict': []})],\n [('regression: split conflict 1',\n   [['PHYS110', 'MATH101H', 'HIST140', 'CHEM120'],\n    [['PHYS110', 'R2', 1], ['BIO130', 'R2', 0], ['PHYS110', 'R2', 1], ['MATH101H', 'R1', 0],\n     ['MATH101', 'R1', 2], ['ECON150', 'R2', 1], ['HIST140', 'R1', 0]]],\n   {'missing': ['CHEM120'], 'unknown': ['BIO130', 'ECON150', 'MATH101'], 'conflict': []}),\n  ('regression variant: split conflict 2',\n   [['HIST140', 'CHEM120', 'MATH101H', 'BIO130', 'MATH101'],\n    [['PHYS110', 'R1', 1], ['MATH101H', 'R2', 1], ['PHYS110', 'R2', 1], ['MATH101', 'R1', 0],\n     ['HIST140', 'R1', 2], ['ECON150', 'R2', 1], ['BIO130', 'R2', 1]]],\n   {'missing': ['CHEM120'], 'unknown': ['ECON150', 'PHYS110'], 'conflict': []}),\n  ('partial repair guard 3',\n   [['HIST140', 'PHYS110', 'MATH101H', 'MATH101', 'BIO130', 'CHEM120'],\n    [['BIO130', 'R2', 1], ['MATH101H', 'R1', 2], ['MATH101H', 'R2', 0]]],\n   {'missing': ['CHEM120', 'HIST140', 'MATH101', 'PHYS110'], 'unknown': [], 'conflict': ['MATH101H']}),\n  ('boundary control 4', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],\n   {'missing': ['B'], 'unknown': [], 'conflict': []}),\n  ('boundary control 5', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],\n   {'missing': [], 'unknown': ['C'], 'conflict': ['A']}),\n  ('normal control 6',\n   [['CHEM120', 'PHYS110', 'HIST140', 'BIO130'],\n    [['BIO130', 'R2', 0], ['MATH101', 'R2', 1], ['CHEM120', 'R2', 1], ['BIO130', 'R2', 1],\n     ['MATH101H', 'R2', 1], ['ECON150', 'R1', 2], ['CHEM120', 'R2', 0]]],\n   {'missing': ['HIST140', 'PHYS110'],\n    'unknown': ['ECON150', 'MATH101', 'MATH101H'],\n    'conflict': ['BIO130', 'CHEM120']}),\n  ('normal control 7',\n   [['CHEM120', 'MATH101', 'BIO130'],\n    [['CHEM120', 'R1', 2], ['MATH101', 'R2', 1], ['CHEM120', 'R1', 1], ['ECON150', 'R1', 0],\n     ['ECON150', 'R1', 1]]],\n   {'missing': ['BIO130'], 'unknown': ['ECON150'], 'conflict': ['CHEM120', 'ECON150']}),\n  ('normal control 8',\n   [['MATH101', 'HIST140', 'PHYS110', 'BIO130', 'CHEM120', 'MATH101H'],\n    [['CHEM120', 'R1', 1], ['MATH101', 'R1', 0], ['CHEM120', 'R2', 1], ['MATH101H', 'R2', 2],\n     ['PHYS110', 'R1', 0], ['HIST140', 'R1', 2]]],\n   {'missing': ['BIO130'], 'unknown': [], 'conflict': []})],\n [('regression: split conflict 1',\n   [['BIO130', 'CHEM120', 'MATH101', 'HIST140'],\n    [['PHYS110', 'R1', 1], ['MATH101', 'R2', 0], ['PHYS110', 'R1', 1], ['ECON150', 'R2', 1],\n     ['MATH101', 'R2', 0]]],\n   {'missing': ['BIO130', 'CHEM120', 'HIST140'], 'unknown': ['ECON150', 'PHYS110'], 'conflict': []}),\n  ('regression variant: split conflict 2',\n   [['CHEM120', 'PHYS110', 'ECON150', 'HIST140', 'MATH101H'],\n    [['PHYS110', 'R2', 2], ['HIST140', 'R2', 1], ['ECON150', 'R1', 1], ['MATH101', 'R1', 0],\n     ['HIST140', 'R2', 1]]],\n   {'missing': ['CHEM120', 'MATH101H'], 'unknown': ['MATH101'], 'conflict': []}),\n  ('partial repair guard 3',\n   [['HIST140', 'PHYS110', 'MATH101', 'BIO130', 'MATH101H', 'ECON150'],\n    [['MATH101', 'R2', 2], ['BIO130', 'R2', 1], ['MATH101', 'R2', 0], ['HIST140', 'R1', 0],\n     ['BIO130', 'R2', 2]]],\n   {'missing': ['ECON150', 'MATH101H', 'PHYS110'], 'unknown': [], 'conflict': ['BIO130', 'MATH101']}),\n  ('boundary control 4', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],\n   {'missing': [], 'unknown': ['C'], 'conflict': ['A']}),\n  ('boundary control 5', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],\n   {'missing': ['B'], 'unknown': [], 'conflict': []}),\n  ('normal control 6',\n   [['PHYS110', 'HIST140'], [['CHEM120', 'R1', 2], ['PHYS110', 'R1', 2], ['MATH101', 'R2', 0]]],\n   {'missing': ['HIST140'], 'unknown': ['CHEM120', 'MATH101'], 'conflict': []}),\n  ('normal control 7',\n   [['ECON150', 'MATH101', 'MATH101H'], [['PHYS110', 'R1', 1], ['CHEM120', 'R2', 1], ['BIO130', 'R1', 0]]],\n   {'missing': ['ECON150', 'MATH101', 'MATH101H'],\n    'unknown': ['BIO130', 'CHEM120', 'PHYS110'],\n    'conflict': []}),\n  ('normal control 8',\n   [['HIST140', 'ECON150'], [['HIST140', 'R1', 1], ['PHYS110', 'R2', 0], ['MATH101', 'R2', 1]]],\n   {'missing': ['ECON150'], 'unknown': ['MATH101', 'PHYS110'], 'conflict': []})]]\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":"cff1f32270d97ffa90eb32d092350489d987b514dbd3905a9e7a560ba49a7b9b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(exams, assign):\n    req = set(exams)\n    per = {}\n    for ex, r, p in assign:\n        per.setdefault(ex, []).append(p)\n    return {'missing': sorted(req - set(per)), 'unknown': sorted(set(per) - req),\n            'conflict': sorted(ex for ex in per if len(per[ex]) > 1)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: split conflict 1', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],\n   {'missing': ['B'], 'unknown': [], 'conflict': []}),\n  ('regression variant: split conflict 2',\n   [['ECON150', 'PHYS110', 'MATH101H', 'MATH101', 'CHEM120'],\n    [['ECON150', 'R2', 2], ['BIO130', 'R1', 1], ['MATH101', 'R2', 2], ['MATH101', 'R2', 1],\n     ['CHEM120', 'R2', 0], ['HIST140', 'R1', 2], ['HIST140', 'R2', 2]]],\n   {'missing': ['MATH101H', 'PHYS110'], 'unknown': ['BIO130', 'HIST140'], 'conflict': ['MATH101']}),\n  ('partial repair guard 3',\n   [['CHEM120', 'HIST140', 'ECON150', 'BIO130', 'MATH101H', 'MATH101'],\n    [['BIO130', 'R2', 2], ['MATH101H', 'R1', 1], ['MATH101', 'R1', 1], ['HIST140', 'R1', 0],\n     ['HIST140', 'R1', 2]]],\n   {'missing': ['CHEM120', 'ECON150'], 'unknown': [], 'conflict': ['HIST140']}),\n  ('boundary control 4', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],\n   {'missing': [], 'unknown': ['C'], 'conflict': ['A']}),\n  ('normal control 5',\n   [['PHYS110', 'BIO130', 'MATH101', 'ECON150', 'CHEM120'],\n    [['MATH101', 'R1', 2], ['PHYS110', 'R2', 2], ['CHEM120', 'R2', 1], ['BIO130', 'R2', 1],\n     ['CHEM120', 'R2', 2], ['MATH101H', 'R1', 2], ['CHEM120', 'R2', 2]]],\n   {'missing': ['ECON150'], 'unknown': ['MATH101H'], 'conflict': ['CHEM120']}),\n  ('normal control 6',\n   [['MATH101', 'ECON150', 'PHYS110', 'MATH101H'], [['ECON150', 'R1', 0], ['MATH101', 'R1', 0]]],\n   {'missing': ['MATH101H', 'PHYS110'], 'unknown': [], 'conflict': []}),\n  ('normal control 7',\n   [['CHEM120', 'PHYS110', 'MATH101H', 'MATH101', 'HIST140', 'BIO130'],\n    [['BIO130', 'R2', 2], ['HIST140', 'R1', 0], ['ECON150', 'R2', 2], ['PHYS110', 'R1', 2],\n     ['PHYS110', 'R2', 1], ['HIST140', 'R2', 1]]],\n   {'missing': ['CHEM120', 'MATH101', 'MATH101H'],\n    'unknown': ['ECON150'],\n    'conflict': ['HIST140', 'PHYS110']}),\n  ('normal control 8',\n   [['HIST140', 'ECON150', 'MATH101', 'MATH101H'],\n    [['HIST140', 'R2', 0], ['MATH101H', 'R2', 2], ['PHYS110', 'R1', 1]]],\n   {'missing': ['ECON150', 'MATH101'], 'unknown': ['PHYS110'], 'conflict': []})],\n [('regression: split conflict 1',\n   [['MATH101H', 'MATH101', 'ECON150', 'HIST140'],\n    [['HIST140', 'R1', 1], ['BIO130', 'R1', 1], ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 0],\n     ['MATH101H', 'R1', 0], ['HIST140', 'R2', 1]]],\n   {'missing': ['ECON150', 'MATH101'], 'unknown': ['BIO130', 'CHEM120'], 'conflict': ['CHEM120']}),\n  ('regression variant: split conflict 2',\n   [['BIO130', 'MATH101', 'ECON150', 'MATH101H'],\n    [['MATH101', 'R1', 2], ['MATH101', 'R1', 2], ['CHEM120', 'R1', 2]]],\n   {'missing': ['BIO130', 'ECON150', 'MATH101H'], 'unknown': ['CHEM120'], 'conflict': []}),\n  ('partial repair guard 3',\n   [['ECON150', 'HIST140', 'PHYS110', 'MATH101'],\n    [['CHEM120', 'R2', 0], ['CHEM120', 'R1', 2], ['HIST140', 'R1', 0]]],\n   {'missing': ['ECON150', 'MATH101', 'PHYS110'], 'unknown': ['CHEM120'], 'conflict': ['CHEM120']}),\n  ('boundary control 4', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],\n   {'missing': ['B'], 'unknown': [], 'conflict': []}),\n  ('boundary control 5', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],\n   {'missing': [], 'unknown': ['C'], 'conflict': ['A']}),\n  ('normal control 6',\n   [['HIST140', 'ECON150'],\n    [['HIST140', 'R2', 0], ['ECON150', 'R1', 1], ['MATH101H', 'R2', 2], ['BIO130', 'R2', 0],\n     ['MATH101H', 'R2', 2]]],\n   {'missing': [], 'unknown': ['BIO130', 'MATH101H'], 'conflict': []}),\n  ('normal control 7',\n   [['MATH101H', 'PHYS110', 'HIST140'],\n    [['PHYS110', 'R2', 1], ['MATH101H', 'R2', 2], ['HIST140', 'R1', 0], ['MATH101H', 'R1', 0],\n     ['CHEM120', 'R2', 0], ['PHYS110', 'R1', 0]]],\n   {'missing': [], 'unknown': ['CHEM120'], 'conflict': ['MATH101H', 'PHYS110']}),\n  ('normal control 8',\n   [['CHEM120', 'MATH101', 'ECON150', 'MATH101H', 'BIO130', 'PHYS110'],\n    [['HIST140', 'R2', 2], ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 0]]],\n   {'missing': ['BIO130', 'ECON150', 'MATH101', 'MATH101H', 'PHYS110'],\n    'unknown': ['HIST140'],\n    'conflict': ['CHEM120']})],\n [('regression: split conflict 1',\n   [['MATH101', 'MATH101H'],\n    [['ECON150', 'R1', 1], ['MATH101H', 'R2', 0], ['MATH101', 'R1', 0], ['PHYS110', 'R1', 1],\n     ['ECON150', 'R1', 1], ['PHYS110', 'R1', 2]]],\n   {'missing': [], 'unknown': ['ECON150', 'PHYS110'], 'conflict': ['PHYS110']}),\n  ('regression variant: split conflict 2',\n   [['ECON150', 'HIST140', 'CHEM120'],\n    [['MATH101H', 'R1', 0], ['MATH101', 'R1', 0], ['PHYS110', 'R2', 1], ['BIO130', 'R2', 2],\n     ['ECON150', 'R2', 2], ['MATH101', 'R1', 0]]],\n   {'missing': ['CHEM120', 'HIST140'],\n    'unknown': ['BIO130', 'MATH101', 'MATH101H', 'PHYS110'],\n    'conflict': []}),\n  ('partial repair guard 3',\n   [['MATH101H', 'ECON150'],\n    [['HIST140', 'R2', 2], ['MATH101H', 'R2', 0], ['MATH101', 'R2', 1], ['MATH101H', 'R1', 1],\n     ['MATH101H', 'R1', 0], ['MATH101', 'R1', 1]]],\n   {'missing': ['ECON150'], 'unknown': ['HIST140', 'MATH101'], 'conflict': ['MATH101H']}),\n  ('boundary control 4', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],\n   {'missing': [], 'unknown': ['C'], 'conflict': ['A']}),\n  ('boundary control 5', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],\n   {'missing': ['B'], 'unknown': [], 'conflict': []}),\n  ('normal control 6',\n   [['PHYS110', 'MATH101H'],\n    [['PHYS110', 'R2', 1], ['PHYS110', 'R2', 1], ['ECON150', 'R2', 1], ['CHEM120', 'R1', 2]]],\n   {'missing': ['MATH101H'], 'unknown': ['CHEM120', 'ECON150'], 'conflict': []}),\n  ('normal control 7',\n   [['HIST140', 'ECON150'],\n    [['HIST140', 'R2', 0], ['ECON150', 'R1', 1], ['MATH101H', 'R2', 2], ['BIO130', 'R2', 0],\n     ['MATH101H', 'R2', 2]]],\n   {'missing': [], 'unknown': ['BIO130', 'MATH101H'], 'conflict': []}),\n  ('normal control 8',\n   [['ECON150', 'PHYS110', 'BIO130'], [['CHEM120', 'R1', 1], ['PHYS110', 'R1', 0], ['MATH101H', 'R2', 2]]],\n   {'missing': ['BIO130', 'ECON150'], 'unknown': ['CHEM120', 'MATH101H'], 'conflict': []})],\n [('regression: split conflict 1',\n   [['PHYS110', 'MATH101H', 'HIST140', 'CHEM120'],\n    [['PHYS110', 'R2', 1], ['BIO130', 'R2', 0], ['PHYS110', 'R2', 1], ['MATH101H', 'R1', 0],\n     ['MATH101', 'R1', 2], ['ECON150', 'R2', 1], ['HIST140', 'R1', 0]]],\n   {'missing': ['CHEM120'], 'unknown': ['BIO130', 'ECON150', 'MATH101'], 'conflict': []}),\n  ('regression variant: split conflict 2',\n   [['HIST140', 'CHEM120', 'MATH101H', 'BIO130', 'MATH101'],\n    [['PHYS110', 'R1', 1], ['MATH101H', 'R2', 1], ['PHYS110', 'R2', 1], ['MATH101', 'R1', 0],\n     ['HIST140', 'R1', 2], ['ECON150', 'R2', 1], ['BIO130', 'R2', 1]]],\n   {'missing': ['CHEM120'], 'unknown': ['ECON150', 'PHYS110'], 'conflict': []}),\n  ('partial repair guard 3',\n   [['HIST140', 'PHYS110', 'MATH101H', 'MATH101', 'BIO130', 'CHEM120'],\n    [['BIO130', 'R2', 1], ['MATH101H', 'R1', 2], ['MATH101H', 'R2', 0]]],\n   {'missing': ['CHEM120', 'HIST140', 'MATH101', 'PHYS110'], 'unknown': [], 'conflict': ['MATH101H']}),\n  ('boundary control 4', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],\n   {'missing': ['B'], 'unknown': [], 'conflict': []}),\n  ('boundary control 5', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],\n   {'missing': [], 'unknown': ['C'], 'conflict': ['A']}),\n  ('normal control 6',\n   [['CHEM120', 'PHYS110', 'HIST140', 'BIO130'],\n    [['BIO130', 'R2', 0], ['MATH101', 'R2', 1], ['CHEM120', 'R2', 1], ['BIO130', 'R2', 1],\n     ['MATH101H', 'R2', 1], ['ECON150', 'R1', 2], ['CHEM120', 'R2', 0]]],\n   {'missing': ['HIST140', 'PHYS110'],\n    'unknown': ['ECON150', 'MATH101', 'MATH101H'],\n    'conflict': ['BIO130', 'CHEM120']}),\n  ('normal control 7',\n   [['CHEM120', 'MATH101', 'BIO130'],\n    [['CHEM120', 'R1', 2], ['MATH101', 'R2', 1], ['CHEM120', 'R1', 1], ['ECON150', 'R1', 0],\n     ['ECON150', 'R1', 1]]],\n   {'missing': ['BIO130'], 'unknown': ['ECON150'], 'conflict': ['CHEM120', 'ECON150']}),\n  ('normal control 8',\n   [['MATH101', 'HIST140', 'PHYS110', 'BIO130', 'CHEM120', 'MATH101H'],\n    [['CHEM120', 'R1', 1], ['MATH101', 'R1', 0], ['CHEM120', 'R2', 1], ['MATH101H', 'R2', 2],\n     ['PHYS110', 'R1', 0], ['HIST140', 'R1', 2]]],\n   {'missing': ['BIO130'], 'unknown': [], 'conflict': []})],\n [('regression: split conflict 1',\n   [['BIO130', 'CHEM120', 'MATH101', 'HIST140'],\n    [['PHYS110', 'R1', 1], ['MATH101', 'R2', 0], ['PHYS110', 'R1', 1], ['ECON150', 'R2', 1],\n     ['MATH101', 'R2', 0]]],\n   {'missing': ['BIO130', 'CHEM120', 'HIST140'], 'unknown': ['ECON150', 'PHYS110'], 'conflict': []}),\n  ('regression variant: split conflict 2',\n   [['CHEM120', 'PHYS110', 'ECON150', 'HIST140', 'MATH101H'],\n    [['PHYS110', 'R2', 2], ['HIST140', 'R2', 1], ['ECON150', 'R1', 1], ['MATH101', 'R1', 0],\n     ['HIST140', 'R2', 1]]],\n   {'missing': ['CHEM120', 'MATH101H'], 'unknown': ['MATH101'], 'conflict': []}),\n  ('partial repair guard 3',\n   [['HIST140', 'PHYS110', 'MATH101', 'BIO130', 'MATH101H', 'ECON150'],\n    [['MATH101', 'R2', 2], ['BIO130', 'R2', 1], ['MATH101', 'R2', 0], ['HIST140', 'R1', 0],\n     ['BIO130', 'R2', 2]]],\n   {'missing': ['ECON150', 'MATH101H', 'PHYS110'], 'unknown': [], 'conflict': ['BIO130', 'MATH101']}),\n  ('boundary control 4', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],\n   {'missing': [], 'unknown': ['C'], 'conflict': ['A']}),\n  ('boundary control 5', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],\n   {'missing': ['B'], 'unknown': [], 'conflict': []}),\n  ('normal control 6',\n   [['PHYS110', 'HIST140'], [['CHEM120', 'R1', 2], ['PHYS110', 'R1', 2], ['MATH101', 'R2', 0]]],\n   {'missing': ['HIST140'], 'unknown': ['CHEM120', 'MATH101'], 'conflict': []}),\n  ('normal control 7',\n   [['ECON150', 'MATH101', 'MATH101H'], [['PHYS110', 'R1', 1], ['CHEM120', 'R2', 1], ['BIO130', 'R1', 0]]],\n   {'missing': ['ECON150', 'MATH101', 'MATH101H'],\n    'unknown': ['BIO130', 'CHEM120', 'PHYS110'],\n    'conflict': []}),\n  ('normal control 8',\n   [['HIST140', 'ECON150'], [['HIST140', 'R1', 1], ['PHYS110', 'R2', 0], ['MATH101', 'R2', 1]]],\n   {'missing': ['ECON150'], 'unknown': ['MATH101', 'PHYS110'], 'conflict': []})]]\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-timetable-completeness-split-conflict","generated_at":"2026-09-29T14:52:07.924117+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Completeness checks catch exams dropped or duplicated when merging timetable drafts.","root_cause":"Periods are collected per row instead of distinct.","sha256":"90fe485323e55bb0c840765dba204501d02d5485884ef090daf7f131bd223f29","title":"Room split reported as a period conflict · 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":42.887,"exit_code":1,"observations":[{"actual":{"conflict":[],"missing":["B"],"unknown":[]},"check":"regression: split conflict 1","expected":{"conflict":[],"missing":["B"],"unknown":[]},"passed":true},{"actual":{"conflict":[],"missing":["MATH101H","PHYS110"],"unknown":["BIO130","HIST140"]},"check":"regression variant: split conflict 2","expected":{"conflict":["MATH101"],"missing":["MATH101H","PHYS110"],"unknown":["BIO130","HIST140"]},"passed":false},{"actual":{"conflict":[],"missing":["CHEM120","ECON150"],"unknown":[]},"check":"partial repair guard 3","expected":{"conflict":["HIST140"],"missing":["CHEM120","ECON150"],"unknown":[]},"passed":false},{"actual":{"conflict":[],"missing":[],"unknown":["C"]},"check":"boundary control 4","expected":{"conflict":["A"],"missing":[],"unknown":["C"]},"passed":false},{"actual":{"conflict":[],"missing":["ECON150"],"unknown":["MATH101H"]},"check":"normal control 5","expected":{"conflict":["CHEM120"],"missing":["ECON150"],"unknown":["MATH101H"]},"passed":false},{"actual":{"conflict":[],"missing":["MATH101H","PHYS110"],"unknown":[]},"check":"normal control 6","expected":{"conflict":[],"missing":["MATH101H","PHYS110"],"unknown":[]},"passed":true},{"actual":{"conflict":[],"missing":["CHEM120","MATH101","MATH101H"],"unknown":["ECON150"]},"check":"normal control 7","expected":{"conflict":["HIST140","PHYS110"],"missing":["CHEM120","MATH101","MATH101H"],"unknown":["ECON150"]},"passed":false},{"actual":{"conflict":[],"missing":["ECON150","MATH101"],"unknown":["PHYS110"]},"check":"normal control 8","expected":{"conflict":[],"missing":["ECON150","MATH101"],"unknown":["PHYS110"]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: split conflict 1\", \"actual\": {\"missing\": [\"B\"], \"unknown\": [], \"conflict\": []}, \"expected\": {\"missing\": [\"B\"], \"unknown\": [], \"conflict\": []}, \"passed\": true}, {\"check\": \"regression variant: split conflict 2\", \"actual\": {\"missing\": [\"MATH101H\", \"PHYS110\"], \"unknown\": [\"BIO130\", \"HIST140\"], \"conflict\": []}, \"expected\": {\"missing\": [\"MATH101H\", \"PHYS110\"], \"unknown\": [\"BIO130\", \"HIST140\"], \"conflict\": [\"MATH101\"]}, \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": {\"missing\": [\"CHEM120\", \"ECON150\"], \"unknown\": [], \"conflict\": []}, \"expected\": {\"missing\": [\"CHEM120\", \"ECON150\"], \"unknown\": [], \"conflict\": [\"HIST140\"]}, \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": {\"missing\": [], \"unknown\": [\"C\"], \"conflict\": []}, \"expected\": {\"missing\": [], \"unknown\": [\"C\"], \"conflict\": [\"A\"]}, \"passed\": false}, {\"check\": \"normal control 5\", \"actual\": {\"missing\": [\"ECON150\"], \"unknown\": [\"MATH101H\"], \"conflict\": []}, \"expected\": {\"missing\": [\"ECON150\"], \"unknown\": [\"MATH101H\"], \"conflict\": [\"CHEM120\"]}, \"passed\": false}, {\"check\": \"normal control 6\", \"actual\": {\"missing\": [\"MATH101H\", \"PHYS110\"], \"unknown\": [], \"conflict\": []}, \"expected\": {\"missing\": [\"MATH101H\", \"PHYS110\"], \"unknown\": [], \"conflict\": []}, \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": {\"missing\": [\"CHEM120\", \"MATH101\", \"MATH101H\"], \"unknown\": [\"ECON150\"], \"conflict\": []}, \"expected\": {\"missing\": [\"CHEM120\", \"MATH101\", \"MATH101H\"], \"unknown\": [\"ECON150\"], \"conflict\": [\"HIST140\", \"PHYS110\"]}, \"passed\": false}, {\"check\": \"normal control 8\", \"actual\": {\"missing\": [\"ECON150\", \"MATH101\"], \"unknown\": [\"PHYS110\"], \"conflict\": []}, \"expected\": {\"missing\": [\"ECON150\", \"MATH101\"], \"unknown\": [\"PHYS110\"], \"conflict\": []}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.259,"exit_code":1,"observations":[{"actual":{"conflict":["A"],"missing":["B"],"unknown":[]},"check":"regression: split conflict 1","expected":{"conflict":[],"missing":["B"],"unknown":[]},"passed":false},{"actual":{"conflict":["HIST140","MATH101"],"missing":["MATH101H","PHYS110"],"unknown":["BIO130","HIST140"]},"check":"regression variant: split conflict 2","expected":{"conflict":["MATH101"],"missing":["MATH101H","PHYS110"],"unknown":["BIO130","HIST140"]},"passed":false},{"actual":{"conflict":["HIST140"],"missing":["CHEM120","ECON150"],"unknown":[]},"check":"partial repair guard 3","expected":{"conflict":["HIST140"],"missing":["CHEM120","ECON150"],"unknown":[]},"passed":true},{"actual":{"conflict":["A"],"missing":[],"unknown":["C"]},"check":"boundary control 4","expected":{"conflict":["A"],"missing":[],"unknown":["C"]},"passed":true},{"actual":{"conflict":["CHEM120"],"missing":["ECON150"],"unknown":["MATH101H"]},"check":"normal control 5","expected":{"conflict":["CHEM120"],"missing":["ECON150"],"unknown":["MATH101H"]},"passed":true},{"actual":{"conflict":[],"missing":["MATH101H","PHYS110"],"unknown":[]},"check":"normal control 6","expected":{"conflict":[],"missing":["MATH101H","PHYS110"],"unknown":[]},"passed":true},{"actual":{"conflict":["HIST140","PHYS110"],"missing":["CHEM120","MATH101","MATH101H"],"unknown":["ECON150"]},"check":"normal control 7","expected":{"conflict":["HIST140","PHYS110"],"missing":["CHEM120","MATH101","MATH101H"],"unknown":["ECON150"]},"passed":true},{"actual":{"conflict":[],"missing":["ECON150","MATH101"],"unknown":["PHYS110"]},"check":"normal control 8","expected":{"conflict":[],"missing":["ECON150","MATH101"],"unknown":["PHYS110"]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: split conflict 1\", \"actual\": {\"missing\": [\"B\"], \"unknown\": [], \"conflict\": [\"A\"]}, \"expected\": {\"missing\": [\"B\"], \"unknown\": [], \"conflict\": []}, \"passed\": false}, {\"check\": \"regression variant: split conflict 2\", \"actual\": {\"missing\": [\"MATH101H\", \"PHYS110\"], \"unknown\": [\"BIO130\", \"HIST140\"], \"conflict\": [\"HIST140\", \"MATH101\"]}, \"expected\": {\"missing\": [\"MATH101H\", \"PHYS110\"], \"unknown\": [\"BIO130\", \"HIST140\"], \"conflict\": [\"MATH101\"]}, \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": {\"missing\": [\"CHEM120\", \"ECON150\"], \"unknown\": [], \"conflict\": [\"HIST140\"]}, \"expected\": {\"missing\": [\"CHEM120\", \"ECON150\"], \"unknown\": [], \"conflict\": [\"HIST140\"]}, \"passed\": true}, {\"check\": \"boundary control 4\", \"actual\": {\"missing\": [], \"unknown\": [\"C\"], \"conflict\": [\"A\"]}, \"expected\": {\"missing\": [], \"unknown\": [\"C\"], \"conflict\": [\"A\"]}, \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": {\"missing\": [\"ECON150\"], \"unknown\": [\"MATH101H\"], \"conflict\": [\"CHEM120\"]}, \"expected\": {\"missing\": [\"ECON150\"], \"unknown\": [\"MATH101H\"], \"conflict\": [\"CHEM120\"]}, \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": {\"missing\": [\"MATH101H\", \"PHYS110\"], \"unknown\": [], \"conflict\": []}, \"expected\": {\"missing\": [\"MATH101H\", \"PHYS110\"], \"unknown\": [], \"conflict\": []}, \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": {\"missing\": [\"CHEM120\", \"MATH101\", \"MATH101H\"], \"unknown\": [\"ECON150\"], \"conflict\": [\"HIST140\", \"PHYS110\"]}, \"expected\": {\"missing\": [\"CHEM120\", \"MATH101\", \"MATH101H\"], \"unknown\": [\"ECON150\"], \"conflict\": [\"HIST140\", \"PHYS110\"]}, \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": {\"missing\": [\"ECON150\", \"MATH101\"], \"unknown\": [\"PHYS110\"], \"conflict\": []}, \"expected\": {\"missing\": [\"ECON150\", \"MATH101\"], \"unknown\": [\"PHYS110\"], \"conflict\": []}, \"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."}}