{"abstract":"Workers on approved sick leave the day before a holiday lose holiday pay.","category":"Shift rostering labor rules","checks":8,"contract":"A day-status string (W worked, A unexcused absence, X excused absence, O not scheduled) and holiday indices. A holiday is paid if the nearest scheduled day before it and the nearest after it (skipping O days and other holidays) are both W or X; if either does not exist in the roster, it is not paid. Return [holiday, eligible] in holiday order.","evaluation_group":"w2-shift-rostering-labor-rules-holiday-pay-eligibility","failed_approach":"Letting a missing neighbour qualify pays holidays at the roster edge.","family":"w2-shift-rostering-labor-rules-holiday-pay-eligibility-excused-absence-qualifies","id":"FA-94201","implementations":{"attempt":{"sha256":"8f535e835b45de8b9b99f87808ce87c7a7d957ac71c989e8f6464ddab97772c6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(days, holidays):\n    hs = set(holidays)\n    ok = ('W', 'X', None)\n    def near(i, step):\n        j = i + step\n        while 0 <= j < len(days) and (days[j] == 'O' or j in hs):\n            j += step\n        return days[j] if 0 <= j < len(days) else None\n    return [[h, near(h, -1) in ok and near(h, 1) in ok] for h in sorted(holidays)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: excused absence qualifies 1', ['WXOWX', [2]], [[2, True]]),\n  ('regression variant: excused absence qualifies 2', ['WWWXWOOWO', [4, 6, 8]],\n   [[4, True], [6, True], [8, False]]),\n  ('partial repair guard 3', ['WAWWWWWWOO', [8]], [[8, False]]),\n  ('boundary control 4', ['OWOOW', [2]], [[2, True]]), ('boundary control 5', ['WAOWW', [2]], [[2, False]]),\n  ('normal control 6', ['WOWWWOWWOOOW', [1, 6]], [[1, True], [6, True]]),\n  ('normal control 7', ['AOWWWAWWOWO', [10, 1]], [[1, False], [10, False]]),\n  ('normal control 8', ['WWWXOOOWWOW', [7, 6]], [[6, True], [7, True]])],\n [('regression: excused absence qualifies 1', ['WWOWXXXWO', [3]], [[3, True]]),\n  ('regression variant: excused absence qualifies 2', ['OWOWXXWXW', [0, 3, 2]],\n   [[0, False], [2, True], [3, True]]),\n  ('partial repair guard 3', ['XAOOXO', [5, 2]], [[2, False], [5, False]]),\n  ('boundary control 4', ['WWOWA', [2]], [[2, True]]),\n  ('boundary control 5', ['WOOOW', [1, 2]], [[1, True], [2, True]]),\n  ('normal control 6', ['WOWAWWWXXW', [6, 2]], [[2, False], [6, True]]),\n  ('normal control 7', ['XWOWOOAW', [2, 3]], [[2, False], [3, False]]),\n  ('normal control 8', ['AWXWOXWXOW', [8]], [[8, True]])],\n [('regression: excused absence qualifies 1', ['XOWOAWW', [3, 1, 6]], [[1, True], [3, False], [6, False]]),\n  ('regression variant: excused absence qualifies 2', ['WWWXOOOXX', [2, 6]], [[2, True], [6, True]]),\n  ('partial repair guard 3', ['OWWWWWOAWXWW', [11, 0, 5]], [[0, False], [5, False], [11, False]]),\n  ('boundary control 4', ['WXOWX', [2]], [[2, True]]), ('boundary control 5', ['WOOWW', [2]], [[2, True]]),\n  ('normal control 6', ['OOXWWWWXWWO', [6]], [[6, True]]),\n  ('normal control 7', ['OWWWWOOWOA', [5]], [[5, True]]),\n  ('normal control 8', ['WOWWOXWAAAW', [6]], [[6, False]])],\n [('regression: excused absence qualifies 1', ['WOXOWW', [4, 3]], [[3, True], [4, True]]),\n  ('regression variant: excused absence qualifies 2', ['WWWWWXWWWAO', [2, 6]], [[2, True], [6, True]]),\n  ('partial repair guard 3', ['AOWOWOO', [5, 1]], [[1, False], [5, False]]),\n  ('boundary control 4', ['OOWWW', [0]], [[0, False]]), ('boundary control 5', ['OWOOW', [2]], [[2, True]]),\n  ('normal control 6', ['XWOXWWXWOAXO', [2]], [[2, True]]),\n  ('normal control 7', ['WAXWAXWWWXOO', [11]], [[11, False]]),\n  ('normal control 8', ['WOAOXWWWWWXW', [1, 3, 6]], [[1, False], [3, False], [6, True]])],\n [('regression: excused absence qualifies 1', ['WOWWAWAXXOWW', [0, 9, 10]],\n   [[0, False], [9, True], [10, True]]),\n  ('regression variant: excused absence qualifies 2', ['WOWWAWOWXOOW', [9, 6, 7]],\n   [[6, True], [7, True], [9, True]]),\n  ('partial repair guard 3', ['OWAAWWWWOOW', [9, 0, 8]], [[0, False], [8, True], [9, True]]),\n  ('boundary control 4', ['WAOWW', [2]], [[2, False]]), ('boundary control 5', ['WWOWA', [2]], [[2, True]]),\n  ('normal control 6', ['AWXOWOA', [5, 1, 3]], [[1, False], [3, True], [5, False]]),\n  ('normal control 7', ['OWAAOOA', [5, 0, 4]], [[0, False], [4, False], [5, False]]),\n  ('normal control 8', ['AWAOWWAWW', [3]], [[3, False]])]]\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":"84de4a9012c4e750c811464b7ef3284dd0505832c33d153257c22c62e3aa550d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(days, holidays):\n    hs = set(holidays)\n    ok = ('W',)\n    def near(i, step):\n        j = i + step\n        while 0 <= j < len(days) and (days[j] == 'O' or j in hs):\n            j += step\n        return days[j] if 0 <= j < len(days) else None\n    return [[h, near(h, -1) in ok and near(h, 1) in ok] for h in sorted(holidays)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: excused absence qualifies 1', ['WXOWX', [2]], [[2, True]]),\n  ('regression variant: excused absence qualifies 2', ['WWWXWOOWO', [4, 6, 8]],\n   [[4, True], [6, True], [8, False]]),\n  ('partial repair guard 3', ['WAWWWWWWOO', [8]], [[8, False]]),\n  ('boundary control 4', ['OWOOW', [2]], [[2, True]]), ('boundary control 5', ['WAOWW', [2]], [[2, False]]),\n  ('normal control 6', ['WOWWWOWWOOOW', [1, 6]], [[1, True], [6, True]]),\n  ('normal control 7', ['AOWWWAWWOWO', [10, 1]], [[1, False], [10, False]]),\n  ('normal control 8', ['WWWXOOOWWOW', [7, 6]], [[6, True], [7, True]])],\n [('regression: excused absence qualifies 1', ['WWOWXXXWO', [3]], [[3, True]]),\n  ('regression variant: excused absence qualifies 2', ['OWOWXXWXW', [0, 3, 2]],\n   [[0, False], [2, True], [3, True]]),\n  ('partial repair guard 3', ['XAOOXO', [5, 2]], [[2, False], [5, False]]),\n  ('boundary control 4', ['WWOWA', [2]], [[2, True]]),\n  ('boundary control 5', ['WOOOW', [1, 2]], [[1, True], [2, True]]),\n  ('normal control 6', ['WOWAWWWXXW', [6, 2]], [[2, False], [6, True]]),\n  ('normal control 7', ['XWOWOOAW', [2, 3]], [[2, False], [3, False]]),\n  ('normal control 8', ['AWXWOXWXOW', [8]], [[8, True]])],\n [('regression: excused absence qualifies 1', ['XOWOAWW', [3, 1, 6]], [[1, True], [3, False], [6, False]]),\n  ('regression variant: excused absence qualifies 2', ['WWWXOOOXX', [2, 6]], [[2, True], [6, True]]),\n  ('partial repair guard 3', ['OWWWWWOAWXWW', [11, 0, 5]], [[0, False], [5, False], [11, False]]),\n  ('boundary control 4', ['WXOWX', [2]], [[2, True]]), ('boundary control 5', ['WOOWW', [2]], [[2, True]]),\n  ('normal control 6', ['OOXWWWWXWWO', [6]], [[6, True]]),\n  ('normal control 7', ['OWWWWOOWOA', [5]], [[5, True]]),\n  ('normal control 8', ['WOWWOXWAAAW', [6]], [[6, False]])],\n [('regression: excused absence qualifies 1', ['WOXOWW', [4, 3]], [[3, True], [4, True]]),\n  ('regression variant: excused absence qualifies 2', ['WWWWWXWWWAO', [2, 6]], [[2, True], [6, True]]),\n  ('partial repair guard 3', ['AOWOWOO', [5, 1]], [[1, False], [5, False]]),\n  ('boundary control 4', ['OOWWW', [0]], [[0, False]]), ('boundary control 5', ['OWOOW', [2]], [[2, True]]),\n  ('normal control 6', ['XWOXWWXWOAXO', [2]], [[2, True]]),\n  ('normal control 7', ['WAXWAXWWWXOO', [11]], [[11, False]]),\n  ('normal control 8', ['WOAOXWWWWWXW', [1, 3, 6]], [[1, False], [3, False], [6, True]])],\n [('regression: excused absence qualifies 1', ['WOWWAWAXXOWW', [0, 9, 10]],\n   [[0, False], [9, True], [10, True]]),\n  ('regression variant: excused absence qualifies 2', ['WOWWAWOWXOOW', [9, 6, 7]],\n   [[6, True], [7, True], [9, True]]),\n  ('partial repair guard 3', ['OWAAWWWWOOW', [9, 0, 8]], [[0, False], [8, True], [9, True]]),\n  ('boundary control 4', ['WAOWW', [2]], [[2, False]]), ('boundary control 5', ['WWOWA', [2]], [[2, True]]),\n  ('normal control 6', ['AWXOWOA', [5, 1, 3]], [[1, False], [3, True], [5, False]]),\n  ('normal control 7', ['OWAAOOA', [5, 0, 4]], [[0, False], [4, False], [5, False]]),\n  ('normal control 8', ['AWAOWWAWW', [3]], [[3, False]])]]\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":"1192a4a2b348a1e87ead1c157b152a92ec8e6871b0215d30976d8e035f2040c5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(days, holidays):\n    hs = set(holidays)\n    ok = ('W', 'X')\n    def near(i, step):\n        j = i + step\n        while 0 <= j < len(days) and (days[j] == 'O' or j in hs):\n            j += step\n        return days[j] if 0 <= j < len(days) else None\n    return [[h, near(h, -1) in ok and near(h, 1) in ok] for h in sorted(holidays)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: excused absence qualifies 1', ['WXOWX', [2]], [[2, True]]),\n  ('regression variant: excused absence qualifies 2', ['WWWXWOOWO', [4, 6, 8]],\n   [[4, True], [6, True], [8, False]]),\n  ('partial repair guard 3', ['WAWWWWWWOO', [8]], [[8, False]]),\n  ('boundary control 4', ['OWOOW', [2]], [[2, True]]), ('boundary control 5', ['WAOWW', [2]], [[2, False]]),\n  ('normal control 6', ['WOWWWOWWOOOW', [1, 6]], [[1, True], [6, True]]),\n  ('normal control 7', ['AOWWWAWWOWO', [10, 1]], [[1, False], [10, False]]),\n  ('normal control 8', ['WWWXOOOWWOW', [7, 6]], [[6, True], [7, True]])],\n [('regression: excused absence qualifies 1', ['WWOWXXXWO', [3]], [[3, True]]),\n  ('regression variant: excused absence qualifies 2', ['OWOWXXWXW', [0, 3, 2]],\n   [[0, False], [2, True], [3, True]]),\n  ('partial repair guard 3', ['XAOOXO', [5, 2]], [[2, False], [5, False]]),\n  ('boundary control 4', ['WWOWA', [2]], [[2, True]]),\n  ('boundary control 5', ['WOOOW', [1, 2]], [[1, True], [2, True]]),\n  ('normal control 6', ['WOWAWWWXXW', [6, 2]], [[2, False], [6, True]]),\n  ('normal control 7', ['XWOWOOAW', [2, 3]], [[2, False], [3, False]]),\n  ('normal control 8', ['AWXWOXWXOW', [8]], [[8, True]])],\n [('regression: excused absence qualifies 1', ['XOWOAWW', [3, 1, 6]], [[1, True], [3, False], [6, False]]),\n  ('regression variant: excused absence qualifies 2', ['WWWXOOOXX', [2, 6]], [[2, True], [6, True]]),\n  ('partial repair guard 3', ['OWWWWWOAWXWW', [11, 0, 5]], [[0, False], [5, False], [11, False]]),\n  ('boundary control 4', ['WXOWX', [2]], [[2, True]]), ('boundary control 5', ['WOOWW', [2]], [[2, True]]),\n  ('normal control 6', ['OOXWWWWXWWO', [6]], [[6, True]]),\n  ('normal control 7', ['OWWWWOOWOA', [5]], [[5, True]]),\n  ('normal control 8', ['WOWWOXWAAAW', [6]], [[6, False]])],\n [('regression: excused absence qualifies 1', ['WOXOWW', [4, 3]], [[3, True], [4, True]]),\n  ('regression variant: excused absence qualifies 2', ['WWWWWXWWWAO', [2, 6]], [[2, True], [6, True]]),\n  ('partial repair guard 3', ['AOWOWOO', [5, 1]], [[1, False], [5, False]]),\n  ('boundary control 4', ['OOWWW', [0]], [[0, False]]), ('boundary control 5', ['OWOOW', [2]], [[2, True]]),\n  ('normal control 6', ['XWOXWWXWOAXO', [2]], [[2, True]]),\n  ('normal control 7', ['WAXWAXWWWXOO', [11]], [[11, False]]),\n  ('normal control 8', ['WOAOXWWWWWXW', [1, 3, 6]], [[1, False], [3, False], [6, True]])],\n [('regression: excused absence qualifies 1', ['WOWWAWAXXOWW', [0, 9, 10]],\n   [[0, False], [9, True], [10, True]]),\n  ('regression variant: excused absence qualifies 2', ['WOWWAWOWXOOW', [9, 6, 7]],\n   [[6, True], [7, True], [9, True]]),\n  ('partial repair guard 3', ['OWAAWWWWOOW', [9, 0, 8]], [[0, False], [8, True], [9, True]]),\n  ('boundary control 4', ['WAOWW', [2]], [[2, False]]), ('boundary control 5', ['WWOWA', [2]], [[2, True]]),\n  ('normal control 6', ['AWXOWOA', [5, 1, 3]], [[1, False], [3, True], [5, False]]),\n  ('normal control 7', ['OWAAOOA', [5, 0, 4]], [[0, False], [4, False], [5, False]]),\n  ('normal control 8', ['AWAOWWAWW', [3]], [[3, False]])]]\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-holiday-pay-eligibility-excused-absence-qualifies","generated_at":"2026-09-29T14:52:02.094616+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Last-and-first-shift holiday pay rules are frequently misapplied around days off and adjacent holidays.","repair":"Treat worked and excused-absence days as qualifying.","root_cause":"Only worked days qualify as surrounding days.","sha256":"ead9566ed2f4e802254d51ae9155ddab881d4b6d7bf5e379ddcd3f88e5933c18","title":"Excused absence disqualifies holiday pay · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.568,"exit_code":1,"observations":[{"actual":[[2,true]],"check":"regression: excused absence qualifies 1","expected":[[2,true]],"passed":true},{"actual":[[4,true],[6,true],[8,true]],"check":"regression variant: excused absence qualifies 2","expected":[[4,true],[6,true],[8,false]],"passed":false},{"actual":[[8,true]],"check":"partial repair guard 3","expected":[[8,false]],"passed":false},{"actual":[[2,true]],"check":"boundary control 4","expected":[[2,true]],"passed":true},{"actual":[[2,false]],"check":"boundary control 5","expected":[[2,false]],"passed":true},{"actual":[[1,true],[6,true]],"check":"normal control 6","expected":[[1,true],[6,true]],"passed":true},{"actual":[[1,false],[10,true]],"check":"normal control 7","expected":[[1,false],[10,false]],"passed":false},{"actual":[[6,true],[7,true]],"check":"normal control 8","expected":[[6,true],[7,true]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: excused absence qualifies 1\", \"actual\": [[2, true]], \"expected\": [[2, true]], \"passed\": true}, {\"check\": \"regression variant: excused absence qualifies 2\", \"actual\": [[4, true], [6, true], [8, true]], \"expected\": [[4, true], [6, true], [8, false]], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [[8, true]], \"expected\": [[8, false]], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [[2, true]], \"expected\": [[2, true]], \"passed\": true}, {\"check\": \"boundary control 5\", \"actual\": [[2, false]], \"expected\": [[2, false]], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [[1, true], [6, true]], \"expected\": [[1, true], [6, true]], \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": [[1, false], [10, true]], \"expected\": [[1, false], [10, false]], \"passed\": false}, {\"check\": \"normal control 8\", \"actual\": [[6, true], [7, true]], \"expected\": [[6, true], [7, true]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.356,"exit_code":1,"observations":[{"actual":[[2,false]],"check":"regression: excused absence qualifies 1","expected":[[2,true]],"passed":false},{"actual":[[4,false],[6,false],[8,false]],"check":"regression variant: excused absence qualifies 2","expected":[[4,true],[6,true],[8,false]],"passed":false},{"actual":[[8,false]],"check":"partial repair guard 3","expected":[[8,false]],"passed":true},{"actual":[[2,true]],"check":"boundary control 4","expected":[[2,true]],"passed":true},{"actual":[[2,false]],"check":"boundary control 5","expected":[[2,false]],"passed":true},{"actual":[[1,true],[6,true]],"check":"normal control 6","expected":[[1,true],[6,true]],"passed":true},{"actual":[[1,false],[10,false]],"check":"normal control 7","expected":[[1,false],[10,false]],"passed":true},{"actual":[[6,false],[7,false]],"check":"normal control 8","expected":[[6,true],[7,true]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: excused absence qualifies 1\", \"actual\": [[2, false]], \"expected\": [[2, true]], \"passed\": false}, {\"check\": \"regression variant: excused absence qualifies 2\", \"actual\": [[4, false], [6, false], [8, false]], \"expected\": [[4, true], [6, true], [8, false]], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [[8, false]], \"expected\": [[8, false]], \"passed\": true}, {\"check\": \"boundary control 4\", \"actual\": [[2, true]], \"expected\": [[2, true]], \"passed\": true}, {\"check\": \"boundary control 5\", \"actual\": [[2, false]], \"expected\": [[2, false]], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [[1, true], [6, true]], \"expected\": [[1, true], [6, true]], \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": [[1, false], [10, false]], \"expected\": [[1, false], [10, false]], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [[6, false], [7, false]], \"expected\": [[6, true], [7, true]], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.467,"exit_code":0,"observations":[{"actual":[[2,true]],"check":"regression: excused absence qualifies 1","expected":[[2,true]],"passed":true},{"actual":[[4,true],[6,true],[8,false]],"check":"regression variant: excused absence qualifies 2","expected":[[4,true],[6,true],[8,false]],"passed":true},{"actual":[[8,false]],"check":"partial repair guard 3","expected":[[8,false]],"passed":true},{"actual":[[2,true]],"check":"boundary control 4","expected":[[2,true]],"passed":true},{"actual":[[2,false]],"check":"boundary control 5","expected":[[2,false]],"passed":true},{"actual":[[1,true],[6,true]],"check":"normal control 6","expected":[[1,true],[6,true]],"passed":true},{"actual":[[1,false],[10,false]],"check":"normal control 7","expected":[[1,false],[10,false]],"passed":true},{"actual":[[6,true],[7,true]],"check":"normal control 8","expected":[[6,true],[7,true]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: excused absence qualifies 1\", \"actual\": [[2, true]], \"expected\": [[2, true]], \"passed\": true}, {\"check\": \"regression variant: excused absence qualifies 2\", \"actual\": [[4, true], [6, true], [8, false]], \"expected\": [[4, true], [6, true], [8, false]], \"passed\": true}, {\"check\": \"partial repair guard 3\", \"actual\": [[8, false]], \"expected\": [[8, false]], \"passed\": true}, {\"check\": \"boundary control 4\", \"actual\": [[2, true]], \"expected\": [[2, true]], \"passed\": true}, {\"check\": \"boundary control 5\", \"actual\": [[2, false]], \"expected\": [[2, false]], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [[1, true], [6, true]], \"expected\": [[1, true], [6, true]], \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": [[1, false], [10, false]], \"expected\": [[1, false], [10, false]], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [[6, true], [7, true]], \"expected\": [[6, true], [7, true]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}