{"abstract":"A latent injury discovered years later is time-barred from the injury date.","category":"Legal deadline computation","checks":7,"contract":"Stipulated: the claim accrues on the later of injury and discovery. The base deadline is the anniversary of accrual after years (a February 29 anniversary in a common year becomes February 28). Tolling intervals [start, end] are inclusive of both days, days before accrual do not count, and overlapping intervals count each day once; the tolled day count is added to the base deadline. A repose deadline of repose_years from the injury (same anniversary rule, never tolled) caps the result.","contract_signature":"injury, discovery, years, tolls, repose_years","evaluation_group":"w2-legal-deadline-computation-limitations-tolling-repose","failed_approach":"The partial repair `min(inj, disc)` takes the earlier date, which is still the injury in every latent case.","family":"w2-legal-deadline-computation-limitations-tolling-repose-accrual-choice","id":"FA-77471","implementations":{"attempt":{"sha256":"7de4eb0920cabee2cd4ef7b40437a9663230269ab3c4ee9fc17803997de449c7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(injury, discovery, years, tolls, repose_years):\n    inj = dt.date.fromisoformat(injury)\n    disc = dt.date.fromisoformat(discovery)\n    accrual = min(inj, disc)\n    def add_years(d, n):\n        y = d.year + n\n        return dt.date(y, d.month, min(d.day, calendar.monthrange(y, d.month)[1]))\n    base = add_years(accrual, years)\n    covered = set()\n    total = 0\n    for a, b in tolls:\n        a = dt.date.fromisoformat(a)\n        b = dt.date.fromisoformat(b)\n        a = max(a, accrual)\n        span = max(0, (b - a).days + 1)\n        total += span\n        for i in range(span):\n            covered.add(a + dt.timedelta(days=i))\n    tolled = len(covered)\n    extended = base + dt.timedelta(days=tolled)\n    repose = add_years(inj, repose_years)\n    return (min(extended, repose)).isoformat()\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: discovery then overlapping tolls',\n   ['2018-03-10', '2019-06-01', 2, [['2019-07-01', '2019-07-10'], ['2019-07-05', '2019-07-20']], 10],\n   '2021-06-21'),\n  ('leap day accrual', ['2020-02-29', '2020-02-29', 3, [], 10], '2023-02-28'),\n  ('leap crossing two years', ['2023-03-01', '2023-03-01', 2, [], 10], '2025-03-01'),\n  ('toll before discovery',\n   ['2015-01-10', '2016-05-05', 3, [['2015-06-01', '2015-12-31'], ['2017-01-01', '2017-01-01']], 10],\n   '2019-05-06'),\n  ('one day toll', ['2021-04-04', '2021-04-04', 1, [['2021-05-05', '2021-05-05']], 5], '2022-04-05'),\n  ('repose caps', ['2010-01-15', '2019-06-01', 3, [['2020-01-01', '2020-06-30']], 10], '2020-01-15'),\n  ('repose with tolling beyond',\n   ['2014-07-01', '2015-07-01', 7, [['2016-01-01', '2016-03-31']], 8],\n   '2022-07-01')],\n [('leap crossing two years', ['2023-03-01', '2023-03-01', 2, [], 10], '2025-03-01'),\n  ('toll before discovery',\n   ['2015-01-10', '2016-05-05', 3, [['2015-06-01', '2015-12-31'], ['2017-01-01', '2017-01-01']], 10],\n   '2019-05-06'),\n  ('one day toll', ['2021-04-04', '2021-04-04', 1, [['2021-05-05', '2021-05-05']], 5], '2022-04-05'),\n  ('repose caps', ['2010-01-15', '2019-06-01', 3, [['2020-01-01', '2020-06-30']], 10], '2020-01-15'),\n  ('repose with tolling beyond',\n   ['2014-07-01', '2015-07-01', 7, [['2016-01-01', '2016-03-31']], 8],\n   '2022-07-01'),\n  ('toll straddles accrual',\n   ['2019-01-01', '2019-02-01', 1, [['2019-01-20', '2019-02-10']], 4],\n   '2020-02-11'),\n  ('three overlapping tolls',\n   ['2022-05-05',\n    '2022-05-05',\n    2,\n    [['2022-06-01', '2022-06-30'], ['2022-06-15', '2022-07-15'], ['2022-07-10', '2022-07-12']],\n    6],\n   '2024-06-19')],\n [('one day toll', ['2021-04-04', '2021-04-04', 1, [['2021-05-05', '2021-05-05']], 5], '2022-04-05'),\n  ('repose caps', ['2010-01-15', '2019-06-01', 3, [['2020-01-01', '2020-06-30']], 10], '2020-01-15'),\n  ('repose with tolling beyond',\n   ['2014-07-01', '2015-07-01', 7, [['2016-01-01', '2016-03-31']], 8],\n   '2022-07-01'),\n  ('toll straddles accrual',\n   ['2019-01-01', '2019-02-01', 1, [['2019-01-20', '2019-02-10']], 4],\n   '2020-02-11'),\n  ('three overlapping tolls',\n   ['2022-05-05',\n    '2022-05-05',\n    2,\n    [['2022-06-01', '2022-06-30'], ['2022-06-15', '2022-07-15'], ['2022-07-10', '2022-07-12']],\n    6],\n   '2024-06-19'),\n  ('discovery earlier than injury input', ['2021-09-09', '2021-08-01', 2, [], 4], '2023-09-09'),\n  ('toll wholly before injury',\n   ['2020-10-10', '2020-10-10', 1, [['2019-01-01', '2019-02-01']], 3],\n   '2021-10-10')],\n [('repose with tolling beyond',\n   ['2014-07-01', '2015-07-01', 7, [['2016-01-01', '2016-03-31']], 8],\n   '2022-07-01'),\n  ('toll straddles accrual',\n   ['2019-01-01', '2019-02-01', 1, [['2019-01-20', '2019-02-10']], 4],\n   '2020-02-11'),\n  ('three overlapping tolls',\n   ['2022-05-05',\n    '2022-05-05',\n    2,\n    [['2022-06-01', '2022-06-30'], ['2022-06-15', '2022-07-15'], ['2022-07-10', '2022-07-12']],\n    6],\n   '2024-06-19'),\n  ('discovery earlier than injury input', ['2021-09-09', '2021-08-01', 2, [], 4], '2023-09-09'),\n  ('toll wholly before injury',\n   ['2020-10-10', '2020-10-10', 1, [['2019-01-01', '2019-02-01']], 3],\n   '2021-10-10'),\n  ('regression: discovery then overlapping tolls',\n   ['2018-03-10', '2019-06-01', 2, [['2019-07-01', '2019-07-10'], ['2019-07-05', '2019-07-20']], 10],\n   '2021-06-21'),\n  ('leap day accrual', ['2020-02-29', '2020-02-29', 3, [], 10], '2023-02-28')],\n [('three overlapping tolls',\n   ['2022-05-05',\n    '2022-05-05',\n    2,\n    [['2022-06-01', '2022-06-30'], ['2022-06-15', '2022-07-15'], ['2022-07-10', '2022-07-12']],\n    6],\n   '2024-06-19'),\n  ('discovery earlier than injury input', ['2021-09-09', '2021-08-01', 2, [], 4], '2023-09-09'),\n  ('toll wholly before injury',\n   ['2020-10-10', '2020-10-10', 1, [['2019-01-01', '2019-02-01']], 3],\n   '2021-10-10'),\n  ('regression: discovery then overlapping tolls',\n   ['2018-03-10', '2019-06-01', 2, [['2019-07-01', '2019-07-10'], ['2019-07-05', '2019-07-20']], 10],\n   '2021-06-21'),\n  ('leap day accrual', ['2020-02-29', '2020-02-29', 3, [], 10], '2023-02-28'),\n  ('leap crossing two years', ['2023-03-01', '2023-03-01', 2, [], 10], '2025-03-01'),\n  ('toll before discovery',\n   ['2015-01-10', '2016-05-05', 3, [['2015-06-01', '2015-12-31'], ['2017-01-01', '2017-01-01']], 10],\n   '2019-05-06')]]\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":"bba3b8f2035792b858ac336b10972b6d457433cad837b7893d167ec0f7a8d165","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(injury, discovery, years, tolls, repose_years):\n    inj = dt.date.fromisoformat(injury)\n    disc = dt.date.fromisoformat(discovery)\n    accrual = inj\n    def add_years(d, n):\n        y = d.year + n\n        return dt.date(y, d.month, min(d.day, calendar.monthrange(y, d.month)[1]))\n    base = add_years(accrual, years)\n    covered = set()\n    total = 0\n    for a, b in tolls:\n        a = dt.date.fromisoformat(a)\n        b = dt.date.fromisoformat(b)\n        a = max(a, accrual)\n        span = max(0, (b - a).days + 1)\n        total += span\n        for i in range(span):\n            covered.add(a + dt.timedelta(days=i))\n    tolled = len(covered)\n    extended = base + dt.timedelta(days=tolled)\n    repose = add_years(inj, repose_years)\n    return (min(extended, repose)).isoformat()\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: discovery then overlapping tolls',\n   ['2018-03-10', '2019-06-01', 2, [['2019-07-01', '2019-07-10'], ['2019-07-05', '2019-07-20']], 10],\n   '2021-06-21'),\n  ('leap day accrual', ['2020-02-29', '2020-02-29', 3, [], 10], '2023-02-28'),\n  ('leap crossing two years', ['2023-03-01', '2023-03-01', 2, [], 10], '2025-03-01'),\n  ('toll before discovery',\n   ['2015-01-10', '2016-05-05', 3, [['2015-06-01', '2015-12-31'], ['2017-01-01', '2017-01-01']], 10],\n   '2019-05-06'),\n  ('one day toll', ['2021-04-04', '2021-04-04', 1, [['2021-05-05', '2021-05-05']], 5], '2022-04-05'),\n  ('repose caps', ['2010-01-15', '2019-06-01', 3, [['2020-01-01', '2020-06-30']], 10], '2020-01-15'),\n  ('repose with tolling beyond',\n   ['2014-07-01', '2015-07-01', 7, [['2016-01-01', '2016-03-31']], 8],\n   '2022-07-01')],\n [('leap crossing two years', ['2023-03-01', '2023-03-01', 2, [], 10], '2025-03-01'),\n  ('toll before discovery',\n   ['2015-01-10', '2016-05-05', 3, [['2015-06-01', '2015-12-31'], ['2017-01-01', '2017-01-01']], 10],\n   '2019-05-06'),\n  ('one day toll', ['2021-04-04', '2021-04-04', 1, [['2021-05-05', '2021-05-05']], 5], '2022-04-05'),\n  ('repose caps', ['2010-01-15', '2019-06-01', 3, [['2020-01-01', '2020-06-30']], 10], '2020-01-15'),\n  ('repose with tolling beyond',\n   ['2014-07-01', '2015-07-01', 7, [['2016-01-01', '2016-03-31']], 8],\n   '2022-07-01'),\n  ('toll straddles accrual',\n   ['2019-01-01', '2019-02-01', 1, [['2019-01-20', '2019-02-10']], 4],\n   '2020-02-11'),\n  ('three overlapping tolls',\n   ['2022-05-05',\n    '2022-05-05',\n    2,\n    [['2022-06-01', '2022-06-30'], ['2022-06-15', '2022-07-15'], ['2022-07-10', '2022-07-12']],\n    6],\n   '2024-06-19')],\n [('one day toll', ['2021-04-04', '2021-04-04', 1, [['2021-05-05', '2021-05-05']], 5], '2022-04-05'),\n  ('repose caps', ['2010-01-15', '2019-06-01', 3, [['2020-01-01', '2020-06-30']], 10], '2020-01-15'),\n  ('repose with tolling beyond',\n   ['2014-07-01', '2015-07-01', 7, [['2016-01-01', '2016-03-31']], 8],\n   '2022-07-01'),\n  ('toll straddles accrual',\n   ['2019-01-01', '2019-02-01', 1, [['2019-01-20', '2019-02-10']], 4],\n   '2020-02-11'),\n  ('three overlapping tolls',\n   ['2022-05-05',\n    '2022-05-05',\n    2,\n    [['2022-06-01', '2022-06-30'], ['2022-06-15', '2022-07-15'], ['2022-07-10', '2022-07-12']],\n    6],\n   '2024-06-19'),\n  ('discovery earlier than injury input', ['2021-09-09', '2021-08-01', 2, [], 4], '2023-09-09'),\n  ('toll wholly before injury',\n   ['2020-10-10', '2020-10-10', 1, [['2019-01-01', '2019-02-01']], 3],\n   '2021-10-10')],\n [('repose with tolling beyond',\n   ['2014-07-01', '2015-07-01', 7, [['2016-01-01', '2016-03-31']], 8],\n   '2022-07-01'),\n  ('toll straddles accrual',\n   ['2019-01-01', '2019-02-01', 1, [['2019-01-20', '2019-02-10']], 4],\n   '2020-02-11'),\n  ('three overlapping tolls',\n   ['2022-05-05',\n    '2022-05-05',\n    2,\n    [['2022-06-01', '2022-06-30'], ['2022-06-15', '2022-07-15'], ['2022-07-10', '2022-07-12']],\n    6],\n   '2024-06-19'),\n  ('discovery earlier than injury input', ['2021-09-09', '2021-08-01', 2, [], 4], '2023-09-09'),\n  ('toll wholly before injury',\n   ['2020-10-10', '2020-10-10', 1, [['2019-01-01', '2019-02-01']], 3],\n   '2021-10-10'),\n  ('regression: discovery then overlapping tolls',\n   ['2018-03-10', '2019-06-01', 2, [['2019-07-01', '2019-07-10'], ['2019-07-05', '2019-07-20']], 10],\n   '2021-06-21'),\n  ('leap day accrual', ['2020-02-29', '2020-02-29', 3, [], 10], '2023-02-28')],\n [('three overlapping tolls',\n   ['2022-05-05',\n    '2022-05-05',\n    2,\n    [['2022-06-01', '2022-06-30'], ['2022-06-15', '2022-07-15'], ['2022-07-10', '2022-07-12']],\n    6],\n   '2024-06-19'),\n  ('discovery earlier than injury input', ['2021-09-09', '2021-08-01', 2, [], 4], '2023-09-09'),\n  ('toll wholly before injury',\n   ['2020-10-10', '2020-10-10', 1, [['2019-01-01', '2019-02-01']], 3],\n   '2021-10-10'),\n  ('regression: discovery then overlapping tolls',\n   ['2018-03-10', '2019-06-01', 2, [['2019-07-01', '2019-07-10'], ['2019-07-05', '2019-07-20']], 10],\n   '2021-06-21'),\n  ('leap day accrual', ['2020-02-29', '2020-02-29', 3, [], 10], '2023-02-28'),\n  ('leap crossing two years', ['2023-03-01', '2023-03-01', 2, [], 10], '2025-03-01'),\n  ('toll before discovery',\n   ['2015-01-10', '2016-05-05', 3, [['2015-06-01', '2015-12-31'], ['2017-01-01', '2017-01-01']], 10],\n   '2019-05-06')]]\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 deadline rules evaluated offline on explicit fixtures. The contract is inspired by common court-rule structures but is not legal advice and makes no claim to reproduce any jurisdiction's rules. 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-legal-deadline-computation-limitations-tolling-repose-accrual-choice","generated_at":"2026-09-29T14:49:25.892898+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Docketing systems compute filing and response deadlines from trigger events; a wrong date can forfeit a right.","root_cause":"The discovery rule is ignored and the period runs from injury.","sha256":"5c4e188dbc94bdd27f6a33028ac806f1af5c49b8c9692e24d52de18b9916d5cf","title":"Limitations period with discovery accrual, tolling and repose cap: accrual choice · 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":44.037,"exit_code":1,"observations":[{"actual":"2020-03-30","check":"regression: discovery then overlapping tolls","expected":"2021-06-21","passed":false},{"actual":"2023-02-28","check":"leap day accrual","expected":"2023-02-28","passed":true},{"actual":"2025-03-01","check":"leap crossing two years","expected":"2025-03-01","passed":true},{"actual":"2018-08-13","check":"toll before discovery","expected":"2019-05-06","passed":false},{"actual":"2022-04-05","check":"one day toll","expected":"2022-04-05","passed":true},{"actual":"2013-07-16","check":"repose caps","expected":"2020-01-15","passed":false},{"actual":"2021-09-30","check":"repose with tolling beyond","expected":"2022-07-01","passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: discovery then overlapping tolls\", \"actual\": \"2020-03-30\", \"expected\": \"2021-06-21\", \"passed\": false}, {\"check\": \"leap day accrual\", \"actual\": \"2023-02-28\", \"expected\": \"2023-02-28\", \"passed\": true}, {\"check\": \"leap crossing two years\", \"actual\": \"2025-03-01\", \"expected\": \"2025-03-01\", \"passed\": true}, {\"check\": \"toll before discovery\", \"actual\": \"2018-08-13\", \"expected\": \"2019-05-06\", \"passed\": false}, {\"check\": \"one day toll\", \"actual\": \"2022-04-05\", \"expected\": \"2022-04-05\", \"passed\": true}, {\"check\": \"repose caps\", \"actual\": \"2013-07-16\", \"expected\": \"2020-01-15\", \"passed\": false}, {\"check\": \"repose with tolling beyond\", \"actual\": \"2021-09-30\", \"expected\": \"2022-07-01\", \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.81,"exit_code":1,"observations":[{"actual":"2020-03-30","check":"regression: discovery then overlapping tolls","expected":"2021-06-21","passed":false},{"actual":"2023-02-28","check":"leap day accrual","expected":"2023-02-28","passed":true},{"actual":"2025-03-01","check":"leap crossing two years","expected":"2025-03-01","passed":true},{"actual":"2018-08-13","check":"toll before discovery","expected":"2019-05-06","passed":false},{"actual":"2022-04-05","check":"one day toll","expected":"2022-04-05","passed":true},{"actual":"2013-07-16","check":"repose caps","expected":"2020-01-15","passed":false},{"actual":"2021-09-30","check":"repose with tolling beyond","expected":"2022-07-01","passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: discovery then overlapping tolls\", \"actual\": \"2020-03-30\", \"expected\": \"2021-06-21\", \"passed\": false}, {\"check\": \"leap day accrual\", \"actual\": \"2023-02-28\", \"expected\": \"2023-02-28\", \"passed\": true}, {\"check\": \"leap crossing two years\", \"actual\": \"2025-03-01\", \"expected\": \"2025-03-01\", \"passed\": true}, {\"check\": \"toll before discovery\", \"actual\": \"2018-08-13\", \"expected\": \"2019-05-06\", \"passed\": false}, {\"check\": \"one day toll\", \"actual\": \"2022-04-05\", \"expected\": \"2022-04-05\", \"passed\": true}, {\"check\": \"repose caps\", \"actual\": \"2013-07-16\", \"expected\": \"2020-01-15\", \"passed\": false}, {\"check\": \"repose with tolling beyond\", \"actual\": \"2021-09-30\", \"expected\": \"2022-07-01\", \"passed\": false}], \"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."}}