{"abstract":"Punches exactly seven minutes past a quarter move forward, shifting paid time.","category":"Shift rostering labor rules","checks":8,"contract":"Scheduled [start, end] and raw punches in minutes. A punch in at most 7 minutes before the scheduled start is treated as the start; a punch out at most 7 minutes after the scheduled end is treated as the end. Then each time is rounded to the quarter hour: remainder 0-7 down, 8-14 up. Return [in, out, max(out - in, 0)].","evaluation_group":"w2-shift-rostering-labor-rules-punch-rounding-grace","failed_approach":"Rounding up without subtracting the remainder overshoots the next quarter.","family":"w2-shift-rostering-labor-rules-punch-rounding-grace-quarter-hour-midpoint","id":"FA-94151","implementations":{"attempt":{"sha256":"671c50882f1f4b061c552c55630918297130ece7cb17e37ac24ad095b779ecf2","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(sched, punch_in, punch_out):\n    start, end = sched\n    def q(t):\n        r = t % 15\n        return t - r if r <= 7 else t + 15\n    i = start if 0 < start - punch_in <= 7 else punch_in\n    o = end if 0 < punch_out - end <= 7 else punch_out\n    i, o = q(i), q(o)\n    return [i, o, max(o - i, 0)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: quarter hour midpoint 1', [[480, 960], 472, 968], [465, 975, 510]),\n  ('regression variant: quarter hour midpoint 2', [[487, 997], 494, 998], [495, 990, 495]),\n  ('partial repair guard 3', [[540, 1020], 548, 1025], [555, 1020, 465]),\n  ('boundary control 4', [[480, 960], 488, 952], [495, 945, 450]),\n  ('boundary control 5', [[480, 960], 487, 953], [480, 960, 480]),\n  ('normal control 6', [[600, 840], 607, 840], [600, 840, 240]),\n  ('normal control 7', [[480, 720], 488, 486], [495, 480, 0]),\n  ('normal control 8', [[487, 727], 495, 734], [495, 720, 225])],\n [('regression: quarter hour midpoint 1', [[480, 960], 487, 953], [480, 960, 480]),\n  ('regression variant: quarter hour midpoint 2', [[487, 727], 495, 732], [495, 720, 225]),\n  ('partial repair guard 3', [[540, 1050], 554, 1072], [555, 1065, 510]),\n  ('boundary control 4', [[480, 960], 473, 967], [480, 960, 480]),\n  ('boundary control 5', [[480, 960], 500, 490], [495, 495, 0]),\n  ('normal control 6', [[540, 1050], 539, 1049], [540, 1050, 510]),\n  ('normal control 7', [[480, 720], 475, 719], [480, 720, 240]),\n  ('normal control 8', [[480, 990], 488, 989], [495, 990, 495])],\n [('regression: quarter hour midpoint 1', [[480, 960], 488, 952], [495, 945, 450]),\n  ('regression variant: quarter hour midpoint 2', [[540, 1020], 532, 1032], [525, 1035, 510]),\n  ('partial repair guard 3', [[480, 720], 494, 742], [495, 735, 240]),\n  ('boundary control 4', [[480, 960], 487, 953], [480, 960, 480]),\n  ('normal control 5', [[420, 660], 427, 661], [420, 660, 240]),\n  ('normal control 6', [[540, 780], 554, 789], [555, 795, 240]),\n  ('normal control 7', [[540, 1050], 532, 1072], [525, 1065, 540]),\n  ('normal control 8', [[420, 930], 410, 939], [405, 945, 540])],\n [('regression: quarter hour midpoint 1', [[487, 967], 485, 970], [480, 960, 480]),\n  ('regression variant: quarter hour midpoint 2', [[487, 727], 496, 732], [495, 720, 225]),\n  ('partial repair guard 3', [[487, 997], 490, 1006], [495, 1005, 510]),\n  ('boundary control 4', [[480, 960], 473, 967], [480, 960, 480]),\n  ('boundary control 5', [[480, 960], 500, 490], [495, 495, 0]),\n  ('normal control 6', [[600, 1110], 603, 1118], [600, 1125, 525]),\n  ('normal control 7', [[480, 990], 472, 998], [465, 1005, 540]),\n  ('normal control 8', [[480, 990], 487, 991], [480, 990, 510])],\n [('regression: quarter hour midpoint 1', [[487, 967], 480, 979], [480, 975, 495]),\n  ('regression variant: quarter hour midpoint 2', [[420, 930], 412, 939], [405, 945, 540]),\n  ('partial repair guard 3', [[540, 1020], 532, 1029], [525, 1035, 510]),\n  ('boundary control 4', [[480, 960], 488, 952], [495, 945, 450]),\n  ('boundary control 5', [[480, 960], 487, 953], [480, 960, 480]),\n  ('normal control 6', [[600, 1080], 592, 1081], [585, 1080, 495]),\n  ('normal control 7', [[480, 720], 488, 486], [495, 480, 0]),\n  ('normal control 8', [[420, 930], 427, 935], [420, 930, 510])]]\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":"a97ea564763033c277eadf536dd83ec7c56dccf50e2eb2b046d2efe7c81ca295","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(sched, punch_in, punch_out):\n    start, end = sched\n    def q(t):\n        r = t % 15\n        return t - r if r < 7 else t + 15 - r\n    i = start if 0 < start - punch_in <= 7 else punch_in\n    o = end if 0 < punch_out - end <= 7 else punch_out\n    i, o = q(i), q(o)\n    return [i, o, max(o - i, 0)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: quarter hour midpoint 1', [[480, 960], 472, 968], [465, 975, 510]),\n  ('regression variant: quarter hour midpoint 2', [[487, 997], 494, 998], [495, 990, 495]),\n  ('partial repair guard 3', [[540, 1020], 548, 1025], [555, 1020, 465]),\n  ('boundary control 4', [[480, 960], 488, 952], [495, 945, 450]),\n  ('boundary control 5', [[480, 960], 487, 953], [480, 960, 480]),\n  ('normal control 6', [[600, 840], 607, 840], [600, 840, 240]),\n  ('normal control 7', [[480, 720], 488, 486], [495, 480, 0]),\n  ('normal control 8', [[487, 727], 495, 734], [495, 720, 225])],\n [('regression: quarter hour midpoint 1', [[480, 960], 487, 953], [480, 960, 480]),\n  ('regression variant: quarter hour midpoint 2', [[487, 727], 495, 732], [495, 720, 225]),\n  ('partial repair guard 3', [[540, 1050], 554, 1072], [555, 1065, 510]),\n  ('boundary control 4', [[480, 960], 473, 967], [480, 960, 480]),\n  ('boundary control 5', [[480, 960], 500, 490], [495, 495, 0]),\n  ('normal control 6', [[540, 1050], 539, 1049], [540, 1050, 510]),\n  ('normal control 7', [[480, 720], 475, 719], [480, 720, 240]),\n  ('normal control 8', [[480, 990], 488, 989], [495, 990, 495])],\n [('regression: quarter hour midpoint 1', [[480, 960], 488, 952], [495, 945, 450]),\n  ('regression variant: quarter hour midpoint 2', [[540, 1020], 532, 1032], [525, 1035, 510]),\n  ('partial repair guard 3', [[480, 720], 494, 742], [495, 735, 240]),\n  ('boundary control 4', [[480, 960], 487, 953], [480, 960, 480]),\n  ('normal control 5', [[420, 660], 427, 661], [420, 660, 240]),\n  ('normal control 6', [[540, 780], 554, 789], [555, 795, 240]),\n  ('normal control 7', [[540, 1050], 532, 1072], [525, 1065, 540]),\n  ('normal control 8', [[420, 930], 410, 939], [405, 945, 540])],\n [('regression: quarter hour midpoint 1', [[487, 967], 485, 970], [480, 960, 480]),\n  ('regression variant: quarter hour midpoint 2', [[487, 727], 496, 732], [495, 720, 225]),\n  ('partial repair guard 3', [[487, 997], 490, 1006], [495, 1005, 510]),\n  ('boundary control 4', [[480, 960], 473, 967], [480, 960, 480]),\n  ('boundary control 5', [[480, 960], 500, 490], [495, 495, 0]),\n  ('normal control 6', [[600, 1110], 603, 1118], [600, 1125, 525]),\n  ('normal control 7', [[480, 990], 472, 998], [465, 1005, 540]),\n  ('normal control 8', [[480, 990], 487, 991], [480, 990, 510])],\n [('regression: quarter hour midpoint 1', [[487, 967], 480, 979], [480, 975, 495]),\n  ('regression variant: quarter hour midpoint 2', [[420, 930], 412, 939], [405, 945, 540]),\n  ('partial repair guard 3', [[540, 1020], 532, 1029], [525, 1035, 510]),\n  ('boundary control 4', [[480, 960], 488, 952], [495, 945, 450]),\n  ('boundary control 5', [[480, 960], 487, 953], [480, 960, 480]),\n  ('normal control 6', [[600, 1080], 592, 1081], [585, 1080, 495]),\n  ('normal control 7', [[480, 720], 488, 486], [495, 480, 0]),\n  ('normal control 8', [[420, 930], 427, 935], [420, 930, 510])]]\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":"0bb0767840e288139d55d82f2e5a7378d94ce21e43125e0890cddfe273db5853","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(sched, punch_in, punch_out):\n    start, end = sched\n    def q(t):\n        r = t % 15\n        return t - r if r <= 7 else t + 15 - r\n    i = start if 0 < start - punch_in <= 7 else punch_in\n    o = end if 0 < punch_out - end <= 7 else punch_out\n    i, o = q(i), q(o)\n    return [i, o, max(o - i, 0)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: quarter hour midpoint 1', [[480, 960], 472, 968], [465, 975, 510]),\n  ('regression variant: quarter hour midpoint 2', [[487, 997], 494, 998], [495, 990, 495]),\n  ('partial repair guard 3', [[540, 1020], 548, 1025], [555, 1020, 465]),\n  ('boundary control 4', [[480, 960], 488, 952], [495, 945, 450]),\n  ('boundary control 5', [[480, 960], 487, 953], [480, 960, 480]),\n  ('normal control 6', [[600, 840], 607, 840], [600, 840, 240]),\n  ('normal control 7', [[480, 720], 488, 486], [495, 480, 0]),\n  ('normal control 8', [[487, 727], 495, 734], [495, 720, 225])],\n [('regression: quarter hour midpoint 1', [[480, 960], 487, 953], [480, 960, 480]),\n  ('regression variant: quarter hour midpoint 2', [[487, 727], 495, 732], [495, 720, 225]),\n  ('partial repair guard 3', [[540, 1050], 554, 1072], [555, 1065, 510]),\n  ('boundary control 4', [[480, 960], 473, 967], [480, 960, 480]),\n  ('boundary control 5', [[480, 960], 500, 490], [495, 495, 0]),\n  ('normal control 6', [[540, 1050], 539, 1049], [540, 1050, 510]),\n  ('normal control 7', [[480, 720], 475, 719], [480, 720, 240]),\n  ('normal control 8', [[480, 990], 488, 989], [495, 990, 495])],\n [('regression: quarter hour midpoint 1', [[480, 960], 488, 952], [495, 945, 450]),\n  ('regression variant: quarter hour midpoint 2', [[540, 1020], 532, 1032], [525, 1035, 510]),\n  ('partial repair guard 3', [[480, 720], 494, 742], [495, 735, 240]),\n  ('boundary control 4', [[480, 960], 487, 953], [480, 960, 480]),\n  ('normal control 5', [[420, 660], 427, 661], [420, 660, 240]),\n  ('normal control 6', [[540, 780], 554, 789], [555, 795, 240]),\n  ('normal control 7', [[540, 1050], 532, 1072], [525, 1065, 540]),\n  ('normal control 8', [[420, 930], 410, 939], [405, 945, 540])],\n [('regression: quarter hour midpoint 1', [[487, 967], 485, 970], [480, 960, 480]),\n  ('regression variant: quarter hour midpoint 2', [[487, 727], 496, 732], [495, 720, 225]),\n  ('partial repair guard 3', [[487, 997], 490, 1006], [495, 1005, 510]),\n  ('boundary control 4', [[480, 960], 473, 967], [480, 960, 480]),\n  ('boundary control 5', [[480, 960], 500, 490], [495, 495, 0]),\n  ('normal control 6', [[600, 1110], 603, 1118], [600, 1125, 525]),\n  ('normal control 7', [[480, 990], 472, 998], [465, 1005, 540]),\n  ('normal control 8', [[480, 990], 487, 991], [480, 990, 510])],\n [('regression: quarter hour midpoint 1', [[487, 967], 480, 979], [480, 975, 495]),\n  ('regression variant: quarter hour midpoint 2', [[420, 930], 412, 939], [405, 945, 540]),\n  ('partial repair guard 3', [[540, 1020], 532, 1029], [525, 1035, 510]),\n  ('boundary control 4', [[480, 960], 488, 952], [495, 945, 450]),\n  ('boundary control 5', [[480, 960], 487, 953], [480, 960, 480]),\n  ('normal control 6', [[600, 1080], 592, 1081], [585, 1080, 495]),\n  ('normal control 7', [[480, 720], 488, 486], [495, 480, 0]),\n  ('normal control 8', [[420, 930], 427, 935], [420, 930, 510])]]\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-punch-rounding-grace-quarter-hour-midpoint","generated_at":"2026-09-29T14:52:01.672792+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Punch rounding and grace periods must be neutral; asymmetric boundaries systematically underpay.","repair":"Round down for remainders 0-7 and up for 8-14.","root_cause":"The round-down branch is strict at seven minutes.","sha256":"48aa0e4b97341e3fe60aa619afc091fc03609a622f320f9c67d57e4fcf323d09","title":"Seven-minute remainder rounds up to the next quarter hour · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.056,"exit_code":1,"observations":[{"actual":[465,983,518],"check":"regression: quarter hour midpoint 1","expected":[465,975,510],"passed":false},{"actual":[509,990,481],"check":"regression variant: quarter hour midpoint 2","expected":[495,990,495],"passed":false},{"actual":[563,1020,457],"check":"partial repair guard 3","expected":[555,1020,465],"passed":false},{"actual":[503,945,442],"check":"boundary control 4","expected":[495,945,450],"passed":false},{"actual":[480,968,488],"check":"boundary control 5","expected":[480,960,480],"passed":false},{"actual":[600,840,240],"check":"normal control 6","expected":[600,840,240],"passed":true},{"actual":[503,480,0],"check":"normal control 7","expected":[495,480,0],"passed":false},{"actual":[495,720,225],"check":"normal control 8","expected":[495,720,225],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: quarter hour midpoint 1\", \"actual\": [465, 983, 518], \"expected\": [465, 975, 510], \"passed\": false}, {\"check\": \"regression variant: quarter hour midpoint 2\", \"actual\": [509, 990, 481], \"expected\": [495, 990, 495], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [563, 1020, 457], \"expected\": [555, 1020, 465], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [503, 945, 442], \"expected\": [495, 945, 450], \"passed\": false}, {\"check\": \"boundary control 5\", \"actual\": [480, 968, 488], \"expected\": [480, 960, 480], \"passed\": false}, {\"check\": \"normal control 6\", \"actual\": [600, 840, 240], \"expected\": [600, 840, 240], \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": [503, 480, 0], \"expected\": [495, 480, 0], \"passed\": false}, {\"check\": \"normal control 8\", \"actual\": [495, 720, 225], \"expected\": [495, 720, 225], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.673,"exit_code":1,"observations":[{"actual":[480,975,495],"check":"regression: quarter hour midpoint 1","expected":[465,975,510],"passed":false},{"actual":[495,1005,510],"check":"regression variant: quarter hour midpoint 2","expected":[495,990,495],"passed":false},{"actual":[555,1020,465],"check":"partial repair guard 3","expected":[555,1020,465],"passed":true},{"actual":[495,960,465],"check":"boundary control 4","expected":[495,945,450],"passed":false},{"actual":[495,960,465],"check":"boundary control 5","expected":[480,960,480],"passed":false},{"actual":[615,840,225],"check":"normal control 6","expected":[600,840,240],"passed":false},{"actual":[495,480,0],"check":"normal control 7","expected":[495,480,0],"passed":true},{"actual":[495,735,240],"check":"normal control 8","expected":[495,720,225],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: quarter hour midpoint 1\", \"actual\": [480, 975, 495], \"expected\": [465, 975, 510], \"passed\": false}, {\"check\": \"regression variant: quarter hour midpoint 2\", \"actual\": [495, 1005, 510], \"expected\": [495, 990, 495], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [555, 1020, 465], \"expected\": [555, 1020, 465], \"passed\": true}, {\"check\": \"boundary control 4\", \"actual\": [495, 960, 465], \"expected\": [495, 945, 450], \"passed\": false}, {\"check\": \"boundary control 5\", \"actual\": [495, 960, 465], \"expected\": [480, 960, 480], \"passed\": false}, {\"check\": \"normal control 6\", \"actual\": [615, 840, 225], \"expected\": [600, 840, 240], \"passed\": false}, {\"check\": \"normal control 7\", \"actual\": [495, 480, 0], \"expected\": [495, 480, 0], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [495, 735, 240], \"expected\": [495, 720, 225], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.317,"exit_code":0,"observations":[{"actual":[465,975,510],"check":"regression: quarter hour midpoint 1","expected":[465,975,510],"passed":true},{"actual":[495,990,495],"check":"regression variant: quarter hour midpoint 2","expected":[495,990,495],"passed":true},{"actual":[555,1020,465],"check":"partial repair guard 3","expected":[555,1020,465],"passed":true},{"actual":[495,945,450],"check":"boundary control 4","expected":[495,945,450],"passed":true},{"actual":[480,960,480],"check":"boundary control 5","expected":[480,960,480],"passed":true},{"actual":[600,840,240],"check":"normal control 6","expected":[600,840,240],"passed":true},{"actual":[495,480,0],"check":"normal control 7","expected":[495,480,0],"passed":true},{"actual":[495,720,225],"check":"normal control 8","expected":[495,720,225],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: quarter hour midpoint 1\", \"actual\": [465, 975, 510], \"expected\": [465, 975, 510], \"passed\": true}, {\"check\": \"regression variant: quarter hour midpoint 2\", \"actual\": [495, 990, 495], \"expected\": [495, 990, 495], \"passed\": true}, {\"check\": \"partial repair guard 3\", \"actual\": [555, 1020, 465], \"expected\": [555, 1020, 465], \"passed\": true}, {\"check\": \"boundary control 4\", \"actual\": [495, 945, 450], \"expected\": [495, 945, 450], \"passed\": true}, {\"check\": \"boundary control 5\", \"actual\": [480, 960, 480], \"expected\": [480, 960, 480], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [600, 840, 240], \"expected\": [600, 840, 240], \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": [495, 480, 0], \"expected\": [495, 480, 0], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [495, 720, 225], \"expected\": [495, 720, 225], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}