{"abstract":"Bookings that exactly meet after buffers are rejected.","category":"Exam timetabling constraints","checks":8,"contract":"bookings [room, exam, start, end, setup minutes]; each booking occupies [start - setup, end + cleanup). Two bookings in the same room conflict if their occupied intervals overlap (touching is fine). Return sorted [room, exam, exam] rows with the exam pair sorted.","contract_signature":"bookings, cleanup","evaluation_group":"w2-exam-timetabling-constraints-room-booking-buffers","failed_approach":"Making one side strict still rejects touching bookings in one order.","family":"w2-exam-timetabling-constraints-room-booking-buffers-touching-intervals","id":"FA-94636","implementations":{"attempt":{"sha256":"f8fb59886bfbe86c959ff2d9acf57d0cdce66a2f3266c3bd2422822cd02ed062","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(bookings, cleanup):\n    by = {}\n    for r, ex, s, e, setup in bookings:\n        by.setdefault(r, []).append((s - setup, e + cleanup, ex))\n    out = []\n    for r in sorted(by):\n        bs = by[r]\n        for i in range(len(bs)):\n            for j in range(i + 1, len(bs)):\n                a, b = bs[i], bs[j]\n                if a[0] <= b[1] and b[0] < a[1]:\n                    out.append([r] + sorted([a[2], b[2]]))\n    return sorted(out)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: touching intervals 1', [[['R1', 'A', 540, 600, 30], ['R1', 'B', 645, 700, 30]], 15], []),\n  ('regression variant: touching intervals 2',\n   [[['R2', 'ENG', 660, 750, 0], ['R2', 'LAW', 780, 840, 0], ['R1', 'CS', 540, 660, 0],\n     ['R2', 'GEO', 540, 600, 0]],\n    30],\n   []),\n  ('partial repair guard 3',\n   [[['R1', 'ENG', 780, 870, 45], ['R2', 'MED', 720, 810, 0], ['R2', 'GEO', 540, 660, 15],\n     ['R1', 'LAW', 660, 720, 0]],\n    15],\n   []),\n  ('boundary control 4', [[['R1', 'B', 540, 600, 15], ['R2', 'A', 540, 600, 15]], 15], []),\n  ('boundary control 5', [[['R1', 'B', 540, 700, 15], ['R1', 'A', 600, 620, 15]], 15], [['R1', 'A', 'B']]),\n  ('normal control 6',\n   [[['R1', 'GEO', 720, 810, 15], ['R2', 'MED', 600, 690, 15], ['R2', 'PHYS', 840, 900, 30],\n     ['R2', 'ART', 600, 720, 0]],\n    15],\n   [['R2', 'ART', 'MED']]),\n  ('normal control 7',\n   [[['R1', 'PHYS', 840, 900, 15], ['R2', 'ART', 720, 810, 0], ['R2', 'CS', 540, 630, 0]], 30], []),\n  ('normal control 8',\n   [[['R1', 'ENG', 540, 660, 45], ['R2', 'ART', 780, 900, 0], ['R1', 'PHYS', 600, 660, 45],\n     ['R2', 'LAW', 720, 810, 45], ['R2', 'CS', 840, 930, 45]],\n    30],\n   [['R1', 'ENG', 'PHYS'], ['R2', 'ART', 'CS'], ['R2', 'ART', 'LAW'], ['R2', 'CS', 'LAW']])],\n [('regression: touching intervals 1',\n   [[['R1', 'ENG', 540, 660, 0], ['R2', 'GEO', 720, 810, 15], ['R1', 'ART', 780, 870, 30],\n     ['R2', 'LAW', 840, 930, 0], ['R1', 'CS', 540, 600, 0]],\n    30],\n   [['R1', 'CS', 'ENG']]),\n  ('regression variant: touching intervals 2',\n   [[['R1', 'LAW', 660, 720, 30], ['R1', 'PHYS', 660, 720, 15], ['R2', 'ENG', 720, 810, 15],\n     ['R2', 'CS', 600, 690, 45], ['R2', 'ART', 780, 900, 45]],\n    15],\n   [['R1', 'LAW', 'PHYS'], ['R2', 'ART', 'ENG']]),\n  ('partial repair guard 3',\n   [[['R2', 'ART', 660, 720, 45], ['R1', 'MED', 780, 870, 45], ['R1', 'GEO', 780, 840, 15],\n     ['R1', 'LAW', 660, 750, 45], ['R2', 'CS', 720, 840, 30]],\n    15],\n   [['R1', 'GEO', 'MED'], ['R1', 'LAW', 'MED'], ['R2', 'ART', 'CS']]),\n  ('boundary control 4', [[['R1', 'A', 540, 600, 30], ['R1', 'B', 645, 700, 30]], 15], []),\n  ('boundary control 5', [[['R1', 'B', 540, 600, 45], ['R1', 'A', 610, 700, 0]], 15], [['R1', 'A', 'B']]),\n  ('normal control 6',\n   [[['R2', 'ENG', 660, 720, 45], ['R2', 'MED', 600, 720, 0], ['R1', 'ART', 780, 900, 0],\n     ['R1', 'GEO', 720, 780, 45]],\n    15],\n   [['R1', 'ART', 'GEO'], ['R2', 'ENG', 'MED']]),\n  ('normal control 7',\n   [[['R1', 'ART', 540, 630, 15], ['R1', 'PHYS', 660, 750, 45], ['R1', 'LAW', 600, 690, 15],\n     ['R1', 'CS', 780, 840, 45], ['R2', 'GEO', 720, 840, 0]],\n    30],\n   [['R1', 'ART', 'LAW'], ['R1', 'ART', 'PHYS'], ['R1', 'CS', 'PHYS'], ['R1', 'LAW', 'PHYS']]),\n  ('normal control 8',\n   [[['R1', 'PHYS', 780, 900, 45], ['R2', 'GEO', 840, 900, 0], ['R2', 'LAW', 780, 900, 30],\n     ['R1', 'MED', 540, 660, 15], ['R2', 'ART', 540, 660, 45]],\n    30],\n   [['R2', 'GEO', 'LAW']])],\n [('regression: touching intervals 1',\n   [[['R1', 'MED', 660, 750, 30], ['R2', 'CS', 780, 870, 15], ['R1', 'ENG', 540, 660, 0],\n     ['R1', 'GEO', 720, 810, 45]],\n    15],\n   [['R1', 'ENG', 'MED'], ['R1', 'GEO', 'MED']]),\n  ('regression variant: touching intervals 2',\n   [[['R1', 'LAW', 600, 660, 0], ['R2', 'GEO', 720, 780, 45], ['R1', 'MED', 540, 630, 45],\n     ['R1', 'ART', 720, 780, 45], ['R2', 'PHYS', 660, 720, 45]],\n    15],\n   [['R1', 'LAW', 'MED'], ['R2', 'GEO', 'PHYS']]),\n  ('partial repair guard 3',\n   [[['R2', 'GEO', 540, 600, 45], ['R2', 'ENG', 660, 780, 15], ['R1', 'PHYS', 780, 870, 0],\n     ['R2', 'CS', 600, 660, 0], ['R1', 'ART', 660, 750, 30]],\n    30],\n   [['R2', 'CS', 'ENG'], ['R2', 'CS', 'GEO']]),\n  ('boundary control 4', [[['R1', 'B', 540, 600, 15], ['R2', 'A', 540, 600, 15]], 15], []),\n  ('boundary control 5', [[['R1', 'B', 540, 700, 15], ['R1', 'A', 600, 620, 15]], 15], [['R1', 'A', 'B']]),\n  ('normal control 6', [[['R1', 'GEO', 660, 750, 30], ['R1', 'MED', 720, 840, 15]], 10],\n   [['R1', 'GEO', 'MED']]),\n  ('normal control 7',\n   [[['R1', 'LAW', 840, 960, 15], ['R2', 'ENG', 600, 690, 0], ['R2', 'CS', 540, 630, 0],\n     ['R2', 'MED', 660, 750, 15]],\n    15],\n   [['R2', 'CS', 'ENG'], ['R2', 'ENG', 'MED']]),\n  ('normal control 8', [[['R1', 'LAW', 660, 780, 0], ['R1', 'PHYS', 780, 870, 30]], 15],\n   [['R1', 'LAW', 'PHYS']])],\n [('regression: touching intervals 1',\n   [[['R1', 'PHYS', 660, 720, 30], ['R1', 'GEO', 780, 870, 30], ['R1', 'ART', 540, 630, 45],\n     ['R2', 'LAW', 840, 960, 0], ['R2', 'MED', 540, 660, 30]],\n    30],\n   [['R1', 'ART', 'PHYS']]),\n  ('regression variant: touching intervals 2',\n   [[['R2', 'CS', 840, 930, 30], ['R2', 'ENG', 600, 660, 0], ['R2', 'PHYS', 780, 870, 30],\n     ['R2', 'GEO', 720, 840, 30], ['R1', 'MED', 600, 720, 15]],\n    30],\n   [['R2', 'CS', 'GEO'], ['R2', 'CS', 'PHYS'], ['R2', 'GEO', 'PHYS']]),\n  ('partial repair guard 3',\n   [[['R2', 'GEO', 540, 660, 15], ['R2', 'MED', 720, 840, 30], ['R1', 'CS', 720, 840, 45],\n     ['R1', 'ART', 540, 660, 45], ['R1', 'PHYS', 660, 720, 15]],\n    15],\n   [['R1', 'ART', 'PHYS'], ['R1', 'CS', 'PHYS']]),\n  ('boundary control 4', [[['R1', 'A', 540, 600, 30], ['R1', 'B', 645, 700, 30]], 15], []),\n  ('boundary control 5', [[['R1', 'B', 540, 600, 45], ['R1', 'A', 610, 700, 0]], 15], [['R1', 'A', 'B']]),\n  ('normal control 6',\n   [[['R2', 'GEO', 540, 660, 15], ['R2', 'LAW', 720, 810, 0], ['R2', 'ENG', 720, 780, 45]], 15],\n   [['R2', 'ENG', 'LAW']]),\n  ('normal control 7',\n   [[['R1', 'GEO', 600, 720, 15], ['R2', 'MED', 540, 600, 45], ['R1', 'PHYS', 600, 660, 45],\n     ['R1', 'CS', 840, 930, 15], ['R2', 'ART', 600, 660, 0]],\n    15],\n   [['R1', 'GEO', 'PHYS'], ['R2', 'ART', 'MED']]),\n  ('normal control 8', [[['R1', 'MED', 780, 840, 15], ['R1', 'ENG', 660, 720, 45]], 15], [])],\n [('regression: touching intervals 1',\n   [[['R2', 'GEO', 540, 600, 45], ['R2', 'ENG', 660, 780, 15], ['R1', 'PHYS', 780, 870, 0],\n     ['R2', 'CS', 600, 660, 0], ['R1', 'ART', 660, 750, 30]],\n    30],\n   [['R2', 'CS', 'ENG'], ['R2', 'CS', 'GEO']]),\n  ('regression variant: touching intervals 2',\n   [[['R1', 'MED', 540, 660, 0], ['R1', 'ENG', 720, 780, 30]], 30], []),\n  ('partial repair guard 3',\n   [[['R2', 'GEO', 600, 720, 30], ['R2', 'ART', 840, 930, 45], ['R2', 'MED', 720, 780, 45],\n     ['R2', 'PHYS', 660, 750, 0]],\n    15],\n   [['R2', 'GEO', 'MED'], ['R2', 'GEO', 'PHYS'], ['R2', 'MED', 'PHYS']]),\n  ('boundary control 4', [[['R1', 'B', 540, 600, 15], ['R2', 'A', 540, 600, 15]], 15], []),\n  ('boundary control 5', [[['R1', 'B', 540, 700, 15], ['R1', 'A', 600, 620, 15]], 15], [['R1', 'A', 'B']]),\n  ('normal control 6',\n   [[['R1', 'LAW', 840, 960, 15], ['R2', 'ENG', 600, 690, 0], ['R2', 'CS', 540, 630, 0],\n     ['R2', 'MED', 660, 750, 15]],\n    15],\n   [['R2', 'CS', 'ENG'], ['R2', 'ENG', 'MED']]),\n  ('normal control 7',\n   [[['R2', 'PHYS', 840, 960, 45], ['R1', 'ENG', 660, 780, 30], ['R2', 'MED', 540, 660, 30],\n     ['R2', 'GEO', 600, 720, 15], ['R2', 'ART', 540, 600, 30]],\n    10],\n   [['R2', 'ART', 'GEO'], ['R2', 'ART', 'MED'], ['R2', 'GEO', 'MED']]),\n  ('normal control 8', [[['R1', 'ENG', 540, 660, 45], ['R1', 'ART', 720, 810, 0]], 10], [])]]\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":"492b61edcfce821d1cfb23e9dd42aee0b6a8a26142f7a811fa19a75e7ac430bb","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(bookings, cleanup):\n    by = {}\n    for r, ex, s, e, setup in bookings:\n        by.setdefault(r, []).append((s - setup, e + cleanup, ex))\n    out = []\n    for r in sorted(by):\n        bs = by[r]\n        for i in range(len(bs)):\n            for j in range(i + 1, len(bs)):\n                a, b = bs[i], bs[j]\n                if a[0] <= b[1] and b[0] <= a[1]:\n                    out.append([r] + sorted([a[2], b[2]]))\n    return sorted(out)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: touching intervals 1', [[['R1', 'A', 540, 600, 30], ['R1', 'B', 645, 700, 30]], 15], []),\n  ('regression variant: touching intervals 2',\n   [[['R2', 'ENG', 660, 750, 0], ['R2', 'LAW', 780, 840, 0], ['R1', 'CS', 540, 660, 0],\n     ['R2', 'GEO', 540, 600, 0]],\n    30],\n   []),\n  ('partial repair guard 3',\n   [[['R1', 'ENG', 780, 870, 45], ['R2', 'MED', 720, 810, 0], ['R2', 'GEO', 540, 660, 15],\n     ['R1', 'LAW', 660, 720, 0]],\n    15],\n   []),\n  ('boundary control 4', [[['R1', 'B', 540, 600, 15], ['R2', 'A', 540, 600, 15]], 15], []),\n  ('boundary control 5', [[['R1', 'B', 540, 700, 15], ['R1', 'A', 600, 620, 15]], 15], [['R1', 'A', 'B']]),\n  ('normal control 6',\n   [[['R1', 'GEO', 720, 810, 15], ['R2', 'MED', 600, 690, 15], ['R2', 'PHYS', 840, 900, 30],\n     ['R2', 'ART', 600, 720, 0]],\n    15],\n   [['R2', 'ART', 'MED']]),\n  ('normal control 7',\n   [[['R1', 'PHYS', 840, 900, 15], ['R2', 'ART', 720, 810, 0], ['R2', 'CS', 540, 630, 0]], 30], []),\n  ('normal control 8',\n   [[['R1', 'ENG', 540, 660, 45], ['R2', 'ART', 780, 900, 0], ['R1', 'PHYS', 600, 660, 45],\n     ['R2', 'LAW', 720, 810, 45], ['R2', 'CS', 840, 930, 45]],\n    30],\n   [['R1', 'ENG', 'PHYS'], ['R2', 'ART', 'CS'], ['R2', 'ART', 'LAW'], ['R2', 'CS', 'LAW']])],\n [('regression: touching intervals 1',\n   [[['R1', 'ENG', 540, 660, 0], ['R2', 'GEO', 720, 810, 15], ['R1', 'ART', 780, 870, 30],\n     ['R2', 'LAW', 840, 930, 0], ['R1', 'CS', 540, 600, 0]],\n    30],\n   [['R1', 'CS', 'ENG']]),\n  ('regression variant: touching intervals 2',\n   [[['R1', 'LAW', 660, 720, 30], ['R1', 'PHYS', 660, 720, 15], ['R2', 'ENG', 720, 810, 15],\n     ['R2', 'CS', 600, 690, 45], ['R2', 'ART', 780, 900, 45]],\n    15],\n   [['R1', 'LAW', 'PHYS'], ['R2', 'ART', 'ENG']]),\n  ('partial repair guard 3',\n   [[['R2', 'ART', 660, 720, 45], ['R1', 'MED', 780, 870, 45], ['R1', 'GEO', 780, 840, 15],\n     ['R1', 'LAW', 660, 750, 45], ['R2', 'CS', 720, 840, 30]],\n    15],\n   [['R1', 'GEO', 'MED'], ['R1', 'LAW', 'MED'], ['R2', 'ART', 'CS']]),\n  ('boundary control 4', [[['R1', 'A', 540, 600, 30], ['R1', 'B', 645, 700, 30]], 15], []),\n  ('boundary control 5', [[['R1', 'B', 540, 600, 45], ['R1', 'A', 610, 700, 0]], 15], [['R1', 'A', 'B']]),\n  ('normal control 6',\n   [[['R2', 'ENG', 660, 720, 45], ['R2', 'MED', 600, 720, 0], ['R1', 'ART', 780, 900, 0],\n     ['R1', 'GEO', 720, 780, 45]],\n    15],\n   [['R1', 'ART', 'GEO'], ['R2', 'ENG', 'MED']]),\n  ('normal control 7',\n   [[['R1', 'ART', 540, 630, 15], ['R1', 'PHYS', 660, 750, 45], ['R1', 'LAW', 600, 690, 15],\n     ['R1', 'CS', 780, 840, 45], ['R2', 'GEO', 720, 840, 0]],\n    30],\n   [['R1', 'ART', 'LAW'], ['R1', 'ART', 'PHYS'], ['R1', 'CS', 'PHYS'], ['R1', 'LAW', 'PHYS']]),\n  ('normal control 8',\n   [[['R1', 'PHYS', 780, 900, 45], ['R2', 'GEO', 840, 900, 0], ['R2', 'LAW', 780, 900, 30],\n     ['R1', 'MED', 540, 660, 15], ['R2', 'ART', 540, 660, 45]],\n    30],\n   [['R2', 'GEO', 'LAW']])],\n [('regression: touching intervals 1',\n   [[['R1', 'MED', 660, 750, 30], ['R2', 'CS', 780, 870, 15], ['R1', 'ENG', 540, 660, 0],\n     ['R1', 'GEO', 720, 810, 45]],\n    15],\n   [['R1', 'ENG', 'MED'], ['R1', 'GEO', 'MED']]),\n  ('regression variant: touching intervals 2',\n   [[['R1', 'LAW', 600, 660, 0], ['R2', 'GEO', 720, 780, 45], ['R1', 'MED', 540, 630, 45],\n     ['R1', 'ART', 720, 780, 45], ['R2', 'PHYS', 660, 720, 45]],\n    15],\n   [['R1', 'LAW', 'MED'], ['R2', 'GEO', 'PHYS']]),\n  ('partial repair guard 3',\n   [[['R2', 'GEO', 540, 600, 45], ['R2', 'ENG', 660, 780, 15], ['R1', 'PHYS', 780, 870, 0],\n     ['R2', 'CS', 600, 660, 0], ['R1', 'ART', 660, 750, 30]],\n    30],\n   [['R2', 'CS', 'ENG'], ['R2', 'CS', 'GEO']]),\n  ('boundary control 4', [[['R1', 'B', 540, 600, 15], ['R2', 'A', 540, 600, 15]], 15], []),\n  ('boundary control 5', [[['R1', 'B', 540, 700, 15], ['R1', 'A', 600, 620, 15]], 15], [['R1', 'A', 'B']]),\n  ('normal control 6', [[['R1', 'GEO', 660, 750, 30], ['R1', 'MED', 720, 840, 15]], 10],\n   [['R1', 'GEO', 'MED']]),\n  ('normal control 7',\n   [[['R1', 'LAW', 840, 960, 15], ['R2', 'ENG', 600, 690, 0], ['R2', 'CS', 540, 630, 0],\n     ['R2', 'MED', 660, 750, 15]],\n    15],\n   [['R2', 'CS', 'ENG'], ['R2', 'ENG', 'MED']]),\n  ('normal control 8', [[['R1', 'LAW', 660, 780, 0], ['R1', 'PHYS', 780, 870, 30]], 15],\n   [['R1', 'LAW', 'PHYS']])],\n [('regression: touching intervals 1',\n   [[['R1', 'PHYS', 660, 720, 30], ['R1', 'GEO', 780, 870, 30], ['R1', 'ART', 540, 630, 45],\n     ['R2', 'LAW', 840, 960, 0], ['R2', 'MED', 540, 660, 30]],\n    30],\n   [['R1', 'ART', 'PHYS']]),\n  ('regression variant: touching intervals 2',\n   [[['R2', 'CS', 840, 930, 30], ['R2', 'ENG', 600, 660, 0], ['R2', 'PHYS', 780, 870, 30],\n     ['R2', 'GEO', 720, 840, 30], ['R1', 'MED', 600, 720, 15]],\n    30],\n   [['R2', 'CS', 'GEO'], ['R2', 'CS', 'PHYS'], ['R2', 'GEO', 'PHYS']]),\n  ('partial repair guard 3',\n   [[['R2', 'GEO', 540, 660, 15], ['R2', 'MED', 720, 840, 30], ['R1', 'CS', 720, 840, 45],\n     ['R1', 'ART', 540, 660, 45], ['R1', 'PHYS', 660, 720, 15]],\n    15],\n   [['R1', 'ART', 'PHYS'], ['R1', 'CS', 'PHYS']]),\n  ('boundary control 4', [[['R1', 'A', 540, 600, 30], ['R1', 'B', 645, 700, 30]], 15], []),\n  ('boundary control 5', [[['R1', 'B', 540, 600, 45], ['R1', 'A', 610, 700, 0]], 15], [['R1', 'A', 'B']]),\n  ('normal control 6',\n   [[['R2', 'GEO', 540, 660, 15], ['R2', 'LAW', 720, 810, 0], ['R2', 'ENG', 720, 780, 45]], 15],\n   [['R2', 'ENG', 'LAW']]),\n  ('normal control 7',\n   [[['R1', 'GEO', 600, 720, 15], ['R2', 'MED', 540, 600, 45], ['R1', 'PHYS', 600, 660, 45],\n     ['R1', 'CS', 840, 930, 15], ['R2', 'ART', 600, 660, 0]],\n    15],\n   [['R1', 'GEO', 'PHYS'], ['R2', 'ART', 'MED']]),\n  ('normal control 8', [[['R1', 'MED', 780, 840, 15], ['R1', 'ENG', 660, 720, 45]], 15], [])],\n [('regression: touching intervals 1',\n   [[['R2', 'GEO', 540, 600, 45], ['R2', 'ENG', 660, 780, 15], ['R1', 'PHYS', 780, 870, 0],\n     ['R2', 'CS', 600, 660, 0], ['R1', 'ART', 660, 750, 30]],\n    30],\n   [['R2', 'CS', 'ENG'], ['R2', 'CS', 'GEO']]),\n  ('regression variant: touching intervals 2',\n   [[['R1', 'MED', 540, 660, 0], ['R1', 'ENG', 720, 780, 30]], 30], []),\n  ('partial repair guard 3',\n   [[['R2', 'GEO', 600, 720, 30], ['R2', 'ART', 840, 930, 45], ['R2', 'MED', 720, 780, 45],\n     ['R2', 'PHYS', 660, 750, 0]],\n    15],\n   [['R2', 'GEO', 'MED'], ['R2', 'GEO', 'PHYS'], ['R2', 'MED', 'PHYS']]),\n  ('boundary control 4', [[['R1', 'B', 540, 600, 15], ['R2', 'A', 540, 600, 15]], 15], []),\n  ('boundary control 5', [[['R1', 'B', 540, 700, 15], ['R1', 'A', 600, 620, 15]], 15], [['R1', 'A', 'B']]),\n  ('normal control 6',\n   [[['R1', 'LAW', 840, 960, 15], ['R2', 'ENG', 600, 690, 0], ['R2', 'CS', 540, 630, 0],\n     ['R2', 'MED', 660, 750, 15]],\n    15],\n   [['R2', 'CS', 'ENG'], ['R2', 'ENG', 'MED']]),\n  ('normal control 7',\n   [[['R2', 'PHYS', 840, 960, 45], ['R1', 'ENG', 660, 780, 30], ['R2', 'MED', 540, 660, 30],\n     ['R2', 'GEO', 600, 720, 15], ['R2', 'ART', 540, 600, 30]],\n    10],\n   [['R2', 'ART', 'GEO'], ['R2', 'ART', 'MED'], ['R2', 'GEO', 'MED']]),\n  ('normal control 8', [[['R1', 'ENG', 540, 660, 45], ['R1', 'ART', 720, 810, 0]], 10], [])]]\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-room-booking-buffers-touching-intervals","generated_at":"2026-09-29T14:52:06.175506+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Exam rooms need setup and clearance time; conflicts must account for both buffers.","root_cause":"The overlap test is inclusive at both ends.","sha256":"b2a4be4fa5b3a510a829ac84b1a18a15b8e4a2e0a577b3dcda5127d34f2f07c4","title":"Touching room bookings reported as conflicts · 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.585,"exit_code":1,"observations":[{"actual":[],"check":"regression: touching intervals 1","expected":[],"passed":true},{"actual":[],"check":"regression variant: touching intervals 2","expected":[],"passed":true},{"actual":[["R1","ENG","LAW"]],"check":"partial repair guard 3","expected":[],"passed":false},{"actual":[],"check":"boundary control 4","expected":[],"passed":true},{"actual":[["R1","A","B"]],"check":"boundary control 5","expected":[["R1","A","B"]],"passed":true},{"actual":[["R2","ART","MED"]],"check":"normal control 6","expected":[["R2","ART","MED"]],"passed":true},{"actual":[],"check":"normal control 7","expected":[],"passed":true},{"actual":[["R1","ENG","PHYS"],["R2","ART","CS"],["R2","ART","LAW"],["R2","CS","LAW"]],"check":"normal control 8","expected":[["R1","ENG","PHYS"],["R2","ART","CS"],["R2","ART","LAW"],["R2","CS","LAW"]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: touching intervals 1\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"regression variant: touching intervals 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"partial repair guard 3\", \"actual\": [[\"R1\", \"ENG\", \"LAW\"]], \"expected\": [], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"boundary control 5\", \"actual\": [[\"R1\", \"A\", \"B\"]], \"expected\": [[\"R1\", \"A\", \"B\"]], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [[\"R2\", \"ART\", \"MED\"]], \"expected\": [[\"R2\", \"ART\", \"MED\"]], \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [[\"R1\", \"ENG\", \"PHYS\"], [\"R2\", \"ART\", \"CS\"], [\"R2\", \"ART\", \"LAW\"], [\"R2\", \"CS\", \"LAW\"]], \"expected\": [[\"R1\", \"ENG\", \"PHYS\"], [\"R2\", \"ART\", \"CS\"], [\"R2\", \"ART\", \"LAW\"], [\"R2\", \"CS\", \"LAW\"]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.543,"exit_code":1,"observations":[{"actual":[["R1","A","B"]],"check":"regression: touching intervals 1","expected":[],"passed":false},{"actual":[["R2","ENG","LAW"]],"check":"regression variant: touching intervals 2","expected":[],"passed":false},{"actual":[["R1","ENG","LAW"]],"check":"partial repair guard 3","expected":[],"passed":false},{"actual":[],"check":"boundary control 4","expected":[],"passed":true},{"actual":[["R1","A","B"]],"check":"boundary control 5","expected":[["R1","A","B"]],"passed":true},{"actual":[["R2","ART","MED"]],"check":"normal control 6","expected":[["R2","ART","MED"]],"passed":true},{"actual":[],"check":"normal control 7","expected":[],"passed":true},{"actual":[["R1","ENG","PHYS"],["R2","ART","CS"],["R2","ART","LAW"],["R2","CS","LAW"]],"check":"normal control 8","expected":[["R1","ENG","PHYS"],["R2","ART","CS"],["R2","ART","LAW"],["R2","CS","LAW"]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: touching intervals 1\", \"actual\": [[\"R1\", \"A\", \"B\"]], \"expected\": [], \"passed\": false}, {\"check\": \"regression variant: touching intervals 2\", \"actual\": [[\"R2\", \"ENG\", \"LAW\"]], \"expected\": [], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [[\"R1\", \"ENG\", \"LAW\"]], \"expected\": [], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"boundary control 5\", \"actual\": [[\"R1\", \"A\", \"B\"]], \"expected\": [[\"R1\", \"A\", \"B\"]], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [[\"R2\", \"ART\", \"MED\"]], \"expected\": [[\"R2\", \"ART\", \"MED\"]], \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [[\"R1\", \"ENG\", \"PHYS\"], [\"R2\", \"ART\", \"CS\"], [\"R2\", \"ART\", \"LAW\"], [\"R2\", \"CS\", \"LAW\"]], \"expected\": [[\"R1\", \"ENG\", \"PHYS\"], [\"R2\", \"ART\", \"CS\"], [\"R2\", \"ART\", \"LAW\"], [\"R2\", \"CS\", \"LAW\"]], \"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."}}