{"abstract":"An annual period ending after 29 February of a leap end year uses 365 days.","category":"Bond day-count conventions","checks":8,"contract":"Inputs start, end ([y,m,d]) and coupon frequency. Days are actual days. For annual frequency the denominator is 366 if any 29 February lies in (start, end], else 365. For other frequencies the denominator is 366 if the end date year is a leap year, else 365. Return days/denominator rounded to 9 decimals.","evaluation_group":"w2-bond_day_count_conventions-act-365-leap","failed_approach":"Starting the search one year later misses leap days in the start year.","family":"w2-bond_day_count_conventions-act-365-leap-candidate-year-range","id":"FA-60951","implementations":{"attempt":{"sha256":"33cd45e419bb339e6fa589783bee7922a0909bebc714563767ea988a57bf0bc2","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(a, b, freq):\n    A = datetime.date(*a)\n    B = datetime.date(*b)\n    def leap(y):\n        return (y % 4 == 0 and y % 100 != 0) or y % 400 == 0\n    days = (B - A).days\n    if freq == 1:\n        has29 = any(leap(y) and A < datetime.date(y, 2, 29) <= B for y in range(A.year + 1, B.year + 1))\n        den = 366 if has29 else 365\n    else:\n        den = 366 if leap(B.year) else 365\n    return round(days / den, 9)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression candidate year range 1', [[2023, 2, 28], [2024, 2, 29], 1], 1.0], ['regression candidate year range 2', [[1915, 8, 27], [1916, 9, 13], 1], 1.046448087], ['partial repair probe 1', [[2024, 1, 29], [2025, 1, 29], 1], 1.0], ['partial repair probe 2', [[1924, 1, 30], [1927, 1, 30], 1], 2.994535519], ['boundary control 1', [[2024, 2, 29], [2025, 2, 28], 1], 1.0], ['boundary control 2', [[2023, 12, 15], [2024, 3, 15], 4], 0.24863388], ['normal control 1', [[2059, 4, 30], [2059, 12, 6], 4], 0.602739726], ['normal control 2', [[2095, 2, 1], [2095, 8, 1], 2], 0.495890411]], [['regression candidate year range 1', [[2055, 5, 28], [2056, 5, 28], 1], 1.0], ['regression candidate year range 2', [[1907, 5, 8], [1908, 5, 8], 1], 1.0], ['partial repair probe 1', [[2104, 1, 1], [2106, 1, 1], 1], 1.99726776], ['partial repair probe 2', [[2004, 1, 1], [2005, 1, 1], 1], 1.0], ['boundary control 1', [[2024, 2, 29], [2025, 2, 28], 1], 1.0], ['boundary control 2', [[2024, 11, 15], [2025, 2, 15], 4], 0.252054795], ['normal control 1', [[1902, 3, 28], [1902, 12, 28], 4], 0.753424658], ['normal control 2', [[2023, 2, 1], [2023, 8, 1], 2], 0.495890411]], [['regression candidate year range 1', [[2003, 1, 29], [2004, 3, 3], 1], 1.090163934], ['regression candidate year range 2', [[2091, 1, 30], [2092, 3, 29], 1], 1.158469945], ['partial repair probe 1', [[2024, 2, 15], [2025, 2, 15], 1], 1.0], ['partial repair probe 2', [[2096, 1, 15], [2098, 1, 15], 1], 1.99726776], ['boundary control 1', [[2024, 2, 29], [2025, 2, 28], 1], 1.0], ['boundary control 2', [[2023, 12, 15], [2024, 3, 15], 4], 0.24863388], ['normal control 1', [[1956, 5, 23], [1959, 5, 23], 1], 3.0], ['normal control 2', [[2050, 7, 28], [2051, 7, 28], 2], 1.0]], [['regression candidate year range 1', [[1983, 3, 1], [1984, 3, 1], 1], 1.0], ['regression candidate year range 2', [[1972, 1, 31], [1972, 10, 26], 1], 0.734972678], ['partial repair probe 1', [[2000, 1, 29], [2002, 1, 29], 1], 1.99726776], ['partial repair probe 2', [[2000, 1, 29], [2001, 1, 29], 1], 1.0], ['boundary control 1', [[2023, 12, 15], [2024, 3, 15], 4], 0.24863388], ['boundary control 2', [[2024, 11, 15], [2025, 2, 15], 4], 0.252054795], ['normal control 1', [[2095, 2, 28], [2096, 2, 28], 1], 1.0], ['normal control 2', [[1947, 3, 30], [1948, 7, 15], 2], 1.292349727]], [['regression candidate year range 1', [[1995, 12, 1], [1996, 12, 1], 1], 1.0], ['regression candidate year range 2', [[1991, 4, 30], [1992, 4, 30], 1], 1.0], ['partial repair probe 1', [[2024, 2, 15], [2025, 2, 15], 1], 1.0], ['partial repair probe 2', [[2028, 2, 1], [2031, 2, 1], 1], 2.994535519], ['boundary control 1', [[2023, 12, 15], [2024, 3, 15], 4], 0.24863388], ['boundary control 2', [[2024, 11, 15], [2025, 2, 15], 4], 0.252054795], ['normal control 1', [[2096, 1, 28], [2096, 4, 28], 4], 0.24863388], ['normal control 2', [[1943, 1, 22], [1943, 4, 22], 4], 0.246575342]]]\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":"5c3622434973bfcc2cda459b1460238b26ff18f6ca1981dd7eea96139aadf2c8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(a, b, freq):\n    A = datetime.date(*a)\n    B = datetime.date(*b)\n    def leap(y):\n        return (y % 4 == 0 and y % 100 != 0) or y % 400 == 0\n    days = (B - A).days\n    if freq == 1:\n        has29 = any(leap(y) and A < datetime.date(y, 2, 29) <= B for y in range(A.year, B.year))\n        den = 366 if has29 else 365\n    else:\n        den = 366 if leap(B.year) else 365\n    return round(days / den, 9)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression candidate year range 1', [[2023, 2, 28], [2024, 2, 29], 1], 1.0], ['regression candidate year range 2', [[1915, 8, 27], [1916, 9, 13], 1], 1.046448087], ['partial repair probe 1', [[2024, 1, 29], [2025, 1, 29], 1], 1.0], ['partial repair probe 2', [[1924, 1, 30], [1927, 1, 30], 1], 2.994535519], ['boundary control 1', [[2024, 2, 29], [2025, 2, 28], 1], 1.0], ['boundary control 2', [[2023, 12, 15], [2024, 3, 15], 4], 0.24863388], ['normal control 1', [[2059, 4, 30], [2059, 12, 6], 4], 0.602739726], ['normal control 2', [[2095, 2, 1], [2095, 8, 1], 2], 0.495890411]], [['regression candidate year range 1', [[2055, 5, 28], [2056, 5, 28], 1], 1.0], ['regression candidate year range 2', [[1907, 5, 8], [1908, 5, 8], 1], 1.0], ['partial repair probe 1', [[2104, 1, 1], [2106, 1, 1], 1], 1.99726776], ['partial repair probe 2', [[2004, 1, 1], [2005, 1, 1], 1], 1.0], ['boundary control 1', [[2024, 2, 29], [2025, 2, 28], 1], 1.0], ['boundary control 2', [[2024, 11, 15], [2025, 2, 15], 4], 0.252054795], ['normal control 1', [[1902, 3, 28], [1902, 12, 28], 4], 0.753424658], ['normal control 2', [[2023, 2, 1], [2023, 8, 1], 2], 0.495890411]], [['regression candidate year range 1', [[2003, 1, 29], [2004, 3, 3], 1], 1.090163934], ['regression candidate year range 2', [[2091, 1, 30], [2092, 3, 29], 1], 1.158469945], ['partial repair probe 1', [[2024, 2, 15], [2025, 2, 15], 1], 1.0], ['partial repair probe 2', [[2096, 1, 15], [2098, 1, 15], 1], 1.99726776], ['boundary control 1', [[2024, 2, 29], [2025, 2, 28], 1], 1.0], ['boundary control 2', [[2023, 12, 15], [2024, 3, 15], 4], 0.24863388], ['normal control 1', [[1956, 5, 23], [1959, 5, 23], 1], 3.0], ['normal control 2', [[2050, 7, 28], [2051, 7, 28], 2], 1.0]], [['regression candidate year range 1', [[1983, 3, 1], [1984, 3, 1], 1], 1.0], ['regression candidate year range 2', [[1972, 1, 31], [1972, 10, 26], 1], 0.734972678], ['partial repair probe 1', [[2000, 1, 29], [2002, 1, 29], 1], 1.99726776], ['partial repair probe 2', [[2000, 1, 29], [2001, 1, 29], 1], 1.0], ['boundary control 1', [[2023, 12, 15], [2024, 3, 15], 4], 0.24863388], ['boundary control 2', [[2024, 11, 15], [2025, 2, 15], 4], 0.252054795], ['normal control 1', [[2095, 2, 28], [2096, 2, 28], 1], 1.0], ['normal control 2', [[1947, 3, 30], [1948, 7, 15], 2], 1.292349727]], [['regression candidate year range 1', [[1995, 12, 1], [1996, 12, 1], 1], 1.0], ['regression candidate year range 2', [[1991, 4, 30], [1992, 4, 30], 1], 1.0], ['partial repair probe 1', [[2024, 2, 15], [2025, 2, 15], 1], 1.0], ['partial repair probe 2', [[2028, 2, 1], [2031, 2, 1], 1], 2.994535519], ['boundary control 1', [[2023, 12, 15], [2024, 3, 15], 4], 0.24863388], ['boundary control 2', [[2024, 11, 15], [2025, 2, 15], 4], 0.252054795], ['normal control 1', [[2096, 1, 28], [2096, 4, 28], 4], 0.24863388], ['normal control 2', [[1943, 1, 22], [1943, 4, 22], 4], 0.246575342]]]\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":"c0443261084dbcae7d6769b0648082c9aff1f2879028faa6bdfcf24d447a70bd","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(a, b, freq):\n    A = datetime.date(*a)\n    B = datetime.date(*b)\n    def leap(y):\n        return (y % 4 == 0 and y % 100 != 0) or y % 400 == 0\n    days = (B - A).days\n    if freq == 1:\n        has29 = any(leap(y) and A < datetime.date(y, 2, 29) <= B for y in range(A.year, B.year + 1))\n        den = 366 if has29 else 365\n    else:\n        den = 366 if leap(B.year) else 365\n    return round(days / den, 9)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression candidate year range 1', [[2023, 2, 28], [2024, 2, 29], 1], 1.0], ['regression candidate year range 2', [[1915, 8, 27], [1916, 9, 13], 1], 1.046448087], ['partial repair probe 1', [[2024, 1, 29], [2025, 1, 29], 1], 1.0], ['partial repair probe 2', [[1924, 1, 30], [1927, 1, 30], 1], 2.994535519], ['boundary control 1', [[2024, 2, 29], [2025, 2, 28], 1], 1.0], ['boundary control 2', [[2023, 12, 15], [2024, 3, 15], 4], 0.24863388], ['normal control 1', [[2059, 4, 30], [2059, 12, 6], 4], 0.602739726], ['normal control 2', [[2095, 2, 1], [2095, 8, 1], 2], 0.495890411]], [['regression candidate year range 1', [[2055, 5, 28], [2056, 5, 28], 1], 1.0], ['regression candidate year range 2', [[1907, 5, 8], [1908, 5, 8], 1], 1.0], ['partial repair probe 1', [[2104, 1, 1], [2106, 1, 1], 1], 1.99726776], ['partial repair probe 2', [[2004, 1, 1], [2005, 1, 1], 1], 1.0], ['boundary control 1', [[2024, 2, 29], [2025, 2, 28], 1], 1.0], ['boundary control 2', [[2024, 11, 15], [2025, 2, 15], 4], 0.252054795], ['normal control 1', [[1902, 3, 28], [1902, 12, 28], 4], 0.753424658], ['normal control 2', [[2023, 2, 1], [2023, 8, 1], 2], 0.495890411]], [['regression candidate year range 1', [[2003, 1, 29], [2004, 3, 3], 1], 1.090163934], ['regression candidate year range 2', [[2091, 1, 30], [2092, 3, 29], 1], 1.158469945], ['partial repair probe 1', [[2024, 2, 15], [2025, 2, 15], 1], 1.0], ['partial repair probe 2', [[2096, 1, 15], [2098, 1, 15], 1], 1.99726776], ['boundary control 1', [[2024, 2, 29], [2025, 2, 28], 1], 1.0], ['boundary control 2', [[2023, 12, 15], [2024, 3, 15], 4], 0.24863388], ['normal control 1', [[1956, 5, 23], [1959, 5, 23], 1], 3.0], ['normal control 2', [[2050, 7, 28], [2051, 7, 28], 2], 1.0]], [['regression candidate year range 1', [[1983, 3, 1], [1984, 3, 1], 1], 1.0], ['regression candidate year range 2', [[1972, 1, 31], [1972, 10, 26], 1], 0.734972678], ['partial repair probe 1', [[2000, 1, 29], [2002, 1, 29], 1], 1.99726776], ['partial repair probe 2', [[2000, 1, 29], [2001, 1, 29], 1], 1.0], ['boundary control 1', [[2023, 12, 15], [2024, 3, 15], 4], 0.24863388], ['boundary control 2', [[2024, 11, 15], [2025, 2, 15], 4], 0.252054795], ['normal control 1', [[2095, 2, 28], [2096, 2, 28], 1], 1.0], ['normal control 2', [[1947, 3, 30], [1948, 7, 15], 2], 1.292349727]], [['regression candidate year range 1', [[1995, 12, 1], [1996, 12, 1], 1], 1.0], ['regression candidate year range 2', [[1991, 4, 30], [1992, 4, 30], 1], 1.0], ['partial repair probe 1', [[2024, 2, 15], [2025, 2, 15], 1], 1.0], ['partial repair probe 2', [[2028, 2, 1], [2031, 2, 1], 1], 2.994535519], ['boundary control 1', [[2023, 12, 15], [2024, 3, 15], 4], 0.24863388], ['boundary control 2', [[2024, 11, 15], [2025, 2, 15], 4], 0.252054795], ['normal control 1', [[2096, 1, 28], [2096, 4, 28], 4], 0.24863388], ['normal control 2', [[1943, 1, 22], [1943, 4, 22], 4], 0.246575342]]]\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":"A deterministic toy contract stated explicitly in the contract field; no claim of conformance to any published convention text. 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-bond_day_count_conventions-act-365-leap-candidate-year-range","generated_at":"2026-09-29T14:46:50.510902+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Bond accrual and pricing systems depend on exact day-count arithmetic; a single-day error changes settlement cash.","repair":"Search every year from the start year through the end year inclusive.","root_cause":"The search over years stops before the end year.","sha256":"8f77aa6dfd3fe4b064cbc6513130d96c75d9291c595405e943c26029aec3a5cf","title":"Act/365L denominator selection: the end year is excluded from the leap-day search · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":45.194,"exit_code":1,"observations":[{"actual":1.0,"check":"regression candidate year range 1","expected":1.0,"passed":true},{"actual":1.046448087,"check":"regression candidate year range 2","expected":1.046448087,"passed":true},{"actual":1.002739726,"check":"partial repair probe 1","expected":1.0,"passed":false},{"actual":3.002739726,"check":"partial repair probe 2","expected":2.994535519,"passed":false},{"actual":1.0,"check":"boundary control 1","expected":1.0,"passed":true},{"actual":0.24863388,"check":"boundary control 2","expected":0.24863388,"passed":true},{"actual":0.602739726,"check":"normal control 1","expected":0.602739726,"passed":true},{"actual":0.495890411,"check":"normal control 2","expected":0.495890411,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression candidate year range 1\", \"actual\": 1.0, \"expected\": 1.0, \"passed\": true}, {\"check\": \"regression candidate year range 2\", \"actual\": 1.046448087, \"expected\": 1.046448087, \"passed\": true}, {\"check\": \"partial repair probe 1\", \"actual\": 1.002739726, \"expected\": 1.0, \"passed\": false}, {\"check\": \"partial repair probe 2\", \"actual\": 3.002739726, \"expected\": 2.994535519, \"passed\": false}, {\"check\": \"boundary control 1\", \"actual\": 1.0, \"expected\": 1.0, \"passed\": true}, {\"check\": \"boundary control 2\", \"actual\": 0.24863388, \"expected\": 0.24863388, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": 0.602739726, \"expected\": 0.602739726, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 0.495890411, \"expected\": 0.495890411, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":46.701,"exit_code":1,"observations":[{"actual":1.002739726,"check":"regression candidate year range 1","expected":1.0,"passed":false},{"actual":1.049315068,"check":"regression candidate year range 2","expected":1.046448087,"passed":false},{"actual":1.0,"check":"partial repair probe 1","expected":1.0,"passed":true},{"actual":2.994535519,"check":"partial repair probe 2","expected":2.994535519,"passed":true},{"actual":1.0,"check":"boundary control 1","expected":1.0,"passed":true},{"actual":0.24863388,"check":"boundary control 2","expected":0.24863388,"passed":true},{"actual":0.602739726,"check":"normal control 1","expected":0.602739726,"passed":true},{"actual":0.495890411,"check":"normal control 2","expected":0.495890411,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression candidate year range 1\", \"actual\": 1.002739726, \"expected\": 1.0, \"passed\": false}, {\"check\": \"regression candidate year range 2\", \"actual\": 1.049315068, \"expected\": 1.046448087, \"passed\": false}, {\"check\": \"partial repair probe 1\", \"actual\": 1.0, \"expected\": 1.0, \"passed\": true}, {\"check\": \"partial repair probe 2\", \"actual\": 2.994535519, \"expected\": 2.994535519, \"passed\": true}, {\"check\": \"boundary control 1\", \"actual\": 1.0, \"expected\": 1.0, \"passed\": true}, {\"check\": \"boundary control 2\", \"actual\": 0.24863388, \"expected\": 0.24863388, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": 0.602739726, \"expected\": 0.602739726, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 0.495890411, \"expected\": 0.495890411, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":44.798,"exit_code":0,"observations":[{"actual":1.0,"check":"regression candidate year range 1","expected":1.0,"passed":true},{"actual":1.046448087,"check":"regression candidate year range 2","expected":1.046448087,"passed":true},{"actual":1.0,"check":"partial repair probe 1","expected":1.0,"passed":true},{"actual":2.994535519,"check":"partial repair probe 2","expected":2.994535519,"passed":true},{"actual":1.0,"check":"boundary control 1","expected":1.0,"passed":true},{"actual":0.24863388,"check":"boundary control 2","expected":0.24863388,"passed":true},{"actual":0.602739726,"check":"normal control 1","expected":0.602739726,"passed":true},{"actual":0.495890411,"check":"normal control 2","expected":0.495890411,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression candidate year range 1\", \"actual\": 1.0, \"expected\": 1.0, \"passed\": true}, {\"check\": \"regression candidate year range 2\", \"actual\": 1.046448087, \"expected\": 1.046448087, \"passed\": true}, {\"check\": \"partial repair probe 1\", \"actual\": 1.0, \"expected\": 1.0, \"passed\": true}, {\"check\": \"partial repair probe 2\", \"actual\": 2.994535519, \"expected\": 2.994535519, \"passed\": true}, {\"check\": \"boundary control 1\", \"actual\": 1.0, \"expected\": 1.0, \"passed\": true}, {\"check\": \"boundary control 2\", \"actual\": 0.24863388, \"expected\": 0.24863388, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": 0.602739726, \"expected\": 0.602739726, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 0.495890411, \"expected\": 0.495890411, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}