{"abstract":"EURUSD traded before a USD-only holiday settles a day late.","category":"Currency rounding and FX conversion","checks":8,"contract":"solve(trade, pair, holidays): stipulated spot value-date rule. USDCAD/CADUSD settle T+1, every other pair T+2. Count forward from the trade date: a day before the final one counts only if it is a weekday and not a holiday of the non-USD currencies of the pair; the value date itself must be a weekday that is a holiday in neither currency. holidays maps currency to ISO date strings. Return the ISO value date.","evaluation_group":"w2-currency_rounding_and_fx_conversion-fx-spot-value-date","failed_approach":"Ignoring all holidays on intermediate days also skips the non-USD holiday check.","family":"w2-currency_rounding_and_fx_conversion-fx-spot-value-date-intermediate-usd-holiday","id":"FA-62161","implementations":{"attempt":{"sha256":"1e89db000d7edb8b6a44fad4d5214330d6d5711145ab6eb9c876d93e062eabde","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom datetime import date, timedelta\nN = 1\nobservations = []\ndef solve(trade, pair, holidays):\n    d = date.fromisoformat(trade)\n    base, quote = pair[:3], pair[3:]\n    def good(x, ccys):\n        return x.weekday() < 5 and all(x.isoformat() not in holidays.get(c, []) for c in ccys)\n    lag = 1 if {base, quote} == {'USD', 'CAD'} else 2\n    non_usd = [c for c in (base, quote) if c != 'USD']\n    x, n = d, 0\n    while n < lag:\n        x += timedelta(days=1)\n        if good(x, [] if n < lag - 1 else [base, quote]):\n            n += 1\n    return x.isoformat()\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('regression intermediate-usd-holiday 1', ('2026-03-02', 'EURUSD', {'USD': ['2026-03-03']}), '2026-03-04'),\n  ('regression intermediate-usd-holiday 2',\n   ('2026-03-02', 'USDJPY',\n    {'USD': ['2026-03-03'], 'JPY': ['2026-03-04', '2026-03-06'], 'CAD': [], 'GBP': ['2026-03-04', '2026-03-06']}),\n   '2026-03-05'),\n  ('partial repair guard 1', ('2026-03-02', 'EURUSD', {'EUR': ['2026-03-03']}), '2026-03-05'),\n  ('partial repair guard 2', ('2026-04-28', 'GBPJPY', {'JPY': ['2026-04-29', '2026-04-30']}), '2026-05-04'),\n  ('control: plain t+2', ('2026-03-02', 'EURUSD', {}), '2026-03-04'),\n  ('control: over weekend', ('2026-03-05', 'EURUSD', {}), '2026-03-09'),\n  ('control: usd holiday on spot', ('2026-03-02', 'EURUSD', {'USD': ['2026-03-04']}), '2026-03-05'),\n  ('control: cad t+1', ('2026-03-02', 'USDCAD', {}), '2026-03-03')],\n [('regression intermediate-usd-holiday 1',\n   ('2026-06-29', 'EURUSD',\n    {'USD': ['2026-06-30', '2026-07-01', '2026-07-03', '2026-07-04'],\n     'EUR': ['2026-07-01', '2026-07-04'],\n     'CAD': ['2026-07-03'],\n     'GBP': ['2026-07-04']}),\n   '2026-07-02'),\n  ('regression intermediate-usd-holiday 2',\n   ('2026-07-23', 'USDJPY', {'USD': ['2026-07-24', '2026-07-26', '2026-07-27'], 'CAD': ['2026-07-28']}), '2026-07-28'),\n  ('partial repair guard 1',\n   ('2026-03-30', 'EURGBP', {'EUR': ['2026-03-31', '2026-04-04'], 'CAD': ['2026-04-02'], 'GBP': ['2026-04-03']}),\n   '2026-04-02'),\n  ('partial repair guard 2',\n   ('2026-10-09', 'GBPJPY',\n    {'JPY': ['2026-10-11', '2026-10-12', '2026-10-13'],\n     'EUR': ['2026-10-14'],\n     'CAD': ['2026-10-10', '2026-10-11', '2026-10-12', '2026-10-13'],\n     'GBP': ['2026-10-12', '2026-10-14']}),\n   '2026-10-16'),\n  ('control: usd holiday on spot', ('2026-03-02', 'EURUSD', {'USD': ['2026-03-04']}), '2026-03-05'),\n  ('control: cad t+1', ('2026-03-02', 'USDCAD', {}), '2026-03-03'),\n  ('control: euro holiday t+1', ('2026-03-02', 'EURUSD', {'EUR': ['2026-03-03']}), '2026-03-05'),\n  ('control: cross with cad', ('2026-03-02', 'EURCAD', {}), '2026-03-04')],\n [('regression intermediate-usd-holiday 1',\n   ('2026-03-30', 'EURUSD',\n    {'USD': ['2026-03-31', '2026-04-01', '2026-04-03', '2026-04-04'],\n     'EUR': ['2026-03-31', '2026-04-04'],\n     'CAD': ['2026-04-02', '2026-04-04']}),\n   '2026-04-02'),\n  ('regression intermediate-usd-holiday 2',\n   ('2026-07-17', 'EURUSD', {'USD': ['2026-07-20'], 'EUR': ['2026-07-18'], 'CAD': ['2026-07-20']}), '2026-07-21'),\n  ('partial repair guard 1',\n   ('2026-08-14', 'GBPJPY',\n    {'USD': [], 'JPY': ['2026-08-15', '2026-08-17', '2026-08-19'], 'EUR': ['2026-08-15', '2026-08-17']}),\n   '2026-08-20'),\n  ('partial repair guard 2',\n   ('2026-07-22', 'EURUSD', {'EUR': ['2026-07-23', '2026-07-24', '2026-07-25'], 'CAD': ['2026-07-23', '2026-07-26']}),\n   '2026-07-28'),\n  ('control: cross with cad', ('2026-03-02', 'EURCAD', {}), '2026-03-04'),\n  ('control: cad usd holiday', ('2026-03-06', 'CADUSD', {'USD': ['2026-03-09']}), '2026-03-10'),\n  ('control: yen cross', ('2026-04-28', 'GBPJPY', {'JPY': ['2026-04-29', '2026-04-30']}), '2026-05-04'),\n  ('control: plain t+2', ('2026-03-02', 'EURUSD', {}), '2026-03-04')],\n [('regression intermediate-usd-holiday 1',\n   ('2026-09-24', 'USDJPY',\n    {'USD': ['2026-09-25', '2026-09-28', '2026-09-29'],\n     'EUR': [],\n     'CAD': ['2026-09-25', '2026-09-28', '2026-09-29'],\n     'GBP': ['2026-09-27', '2026-09-29']}),\n   '2026-09-30'),\n  ('regression intermediate-usd-holiday 2',\n   ('2026-07-17', 'EURUSD',\n    {'USD': ['2026-07-18', '2026-07-19', '2026-07-21'],\n     'JPY': ['2026-07-18'],\n     'EUR': ['2026-07-20'],\n     'CAD': ['2026-07-18', '2026-07-22']}),\n   '2026-07-22'),\n  ('partial repair guard 1',\n   ('2026-02-16', 'EURCAD',\n    {'USD': ['2026-02-17', '2026-02-18', '2026-02-20'],\n     'EUR': ['2026-02-17', '2026-02-21'],\n     'CAD': [],\n     'GBP': ['2026-02-17', '2026-02-20']}),\n   '2026-02-19'),\n  ('partial repair guard 2',\n   ('2026-03-23', 'EURCAD',\n    {'JPY': ['2026-03-27'], 'EUR': ['2026-03-25'], 'CAD': ['2026-03-24', '2026-03-26'], 'GBP': ['2026-03-25']}),\n   '2026-03-30'),\n  ('control: plain t+2', ('2026-03-02', 'EURUSD', {}), '2026-03-04'),\n  ('control: over weekend', ('2026-03-05', 'EURUSD', {}), '2026-03-09'),\n  ('control: usd holiday t+1', ('2026-03-02', 'EURUSD', {'USD': ['2026-03-03']}), '2026-03-04'),\n  ('control: usd holiday on spot', ('2026-03-02', 'EURUSD', {'USD': ['2026-03-04']}), '2026-03-05')],\n [('regression intermediate-usd-holiday 1',\n   ('2026-09-08', 'EURUSD',\n    {'USD': ['2026-09-09', '2026-09-10', '2026-09-12', '2026-09-13'], 'JPY': ['2026-09-13'], 'EUR': ['2026-09-13']}),\n   '2026-09-11'),\n  ('regression intermediate-usd-holiday 2',\n   ('2026-04-10', 'USDJPY', {'USD': ['2026-04-13'], 'JPY': ['2026-04-14'], 'GBP': ['2026-04-14', '2026-04-15']}),\n   '2026-04-15'),\n  ('partial repair guard 1',\n   ('2026-08-28', 'EURCAD',\n    {'USD': ['2026-08-30', '2026-08-31', '2026-09-01'],\n     'EUR': ['2026-08-31', '2026-09-01'],\n     'CAD': ['2026-08-29', '2026-08-31'],\n     'GBP': ['2026-08-29', '2026-09-01']}),\n   '2026-09-03'),\n  ('partial repair guard 2',\n   ('2026-03-19', 'EURCAD', {'USD': ['2026-03-21'], 'JPY': ['2026-03-20'], 'EUR': ['2026-03-20'], 'CAD': []}),\n   '2026-03-24'),\n  ('control: usd holiday on spot', ('2026-03-02', 'EURUSD', {'USD': ['2026-03-04']}), '2026-03-05'),\n  ('control: cad t+1', ('2026-03-02', 'USDCAD', {}), '2026-03-03'),\n  ('control: euro holiday t+1', ('2026-03-02', 'EURUSD', {'EUR': ['2026-03-03']}), '2026-03-05'),\n  ('control: cross with cad', ('2026-03-02', 'EURCAD', {}), '2026-03-04')]]\nfor label, args, expected in cases[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":"14f0074404cadffc4af7cc34157c861d603def92b887b99dd85eb5f85ab042ed","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom datetime import date, timedelta\nN = 1\nobservations = []\ndef solve(trade, pair, holidays):\n    d = date.fromisoformat(trade)\n    base, quote = pair[:3], pair[3:]\n    def good(x, ccys):\n        return x.weekday() < 5 and all(x.isoformat() not in holidays.get(c, []) for c in ccys)\n    lag = 1 if {base, quote} == {'USD', 'CAD'} else 2\n    non_usd = [c for c in (base, quote) if c != 'USD']\n    x, n = d, 0\n    while n < lag:\n        x += timedelta(days=1)\n        if good(x, [base, quote]):\n            n += 1\n    return x.isoformat()\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('regression intermediate-usd-holiday 1', ('2026-03-02', 'EURUSD', {'USD': ['2026-03-03']}), '2026-03-04'),\n  ('regression intermediate-usd-holiday 2',\n   ('2026-03-02', 'USDJPY',\n    {'USD': ['2026-03-03'], 'JPY': ['2026-03-04', '2026-03-06'], 'CAD': [], 'GBP': ['2026-03-04', '2026-03-06']}),\n   '2026-03-05'),\n  ('partial repair guard 1', ('2026-03-02', 'EURUSD', {'EUR': ['2026-03-03']}), '2026-03-05'),\n  ('partial repair guard 2', ('2026-04-28', 'GBPJPY', {'JPY': ['2026-04-29', '2026-04-30']}), '2026-05-04'),\n  ('control: plain t+2', ('2026-03-02', 'EURUSD', {}), '2026-03-04'),\n  ('control: over weekend', ('2026-03-05', 'EURUSD', {}), '2026-03-09'),\n  ('control: usd holiday on spot', ('2026-03-02', 'EURUSD', {'USD': ['2026-03-04']}), '2026-03-05'),\n  ('control: cad t+1', ('2026-03-02', 'USDCAD', {}), '2026-03-03')],\n [('regression intermediate-usd-holiday 1',\n   ('2026-06-29', 'EURUSD',\n    {'USD': ['2026-06-30', '2026-07-01', '2026-07-03', '2026-07-04'],\n     'EUR': ['2026-07-01', '2026-07-04'],\n     'CAD': ['2026-07-03'],\n     'GBP': ['2026-07-04']}),\n   '2026-07-02'),\n  ('regression intermediate-usd-holiday 2',\n   ('2026-07-23', 'USDJPY', {'USD': ['2026-07-24', '2026-07-26', '2026-07-27'], 'CAD': ['2026-07-28']}), '2026-07-28'),\n  ('partial repair guard 1',\n   ('2026-03-30', 'EURGBP', {'EUR': ['2026-03-31', '2026-04-04'], 'CAD': ['2026-04-02'], 'GBP': ['2026-04-03']}),\n   '2026-04-02'),\n  ('partial repair guard 2',\n   ('2026-10-09', 'GBPJPY',\n    {'JPY': ['2026-10-11', '2026-10-12', '2026-10-13'],\n     'EUR': ['2026-10-14'],\n     'CAD': ['2026-10-10', '2026-10-11', '2026-10-12', '2026-10-13'],\n     'GBP': ['2026-10-12', '2026-10-14']}),\n   '2026-10-16'),\n  ('control: usd holiday on spot', ('2026-03-02', 'EURUSD', {'USD': ['2026-03-04']}), '2026-03-05'),\n  ('control: cad t+1', ('2026-03-02', 'USDCAD', {}), '2026-03-03'),\n  ('control: euro holiday t+1', ('2026-03-02', 'EURUSD', {'EUR': ['2026-03-03']}), '2026-03-05'),\n  ('control: cross with cad', ('2026-03-02', 'EURCAD', {}), '2026-03-04')],\n [('regression intermediate-usd-holiday 1',\n   ('2026-03-30', 'EURUSD',\n    {'USD': ['2026-03-31', '2026-04-01', '2026-04-03', '2026-04-04'],\n     'EUR': ['2026-03-31', '2026-04-04'],\n     'CAD': ['2026-04-02', '2026-04-04']}),\n   '2026-04-02'),\n  ('regression intermediate-usd-holiday 2',\n   ('2026-07-17', 'EURUSD', {'USD': ['2026-07-20'], 'EUR': ['2026-07-18'], 'CAD': ['2026-07-20']}), '2026-07-21'),\n  ('partial repair guard 1',\n   ('2026-08-14', 'GBPJPY',\n    {'USD': [], 'JPY': ['2026-08-15', '2026-08-17', '2026-08-19'], 'EUR': ['2026-08-15', '2026-08-17']}),\n   '2026-08-20'),\n  ('partial repair guard 2',\n   ('2026-07-22', 'EURUSD', {'EUR': ['2026-07-23', '2026-07-24', '2026-07-25'], 'CAD': ['2026-07-23', '2026-07-26']}),\n   '2026-07-28'),\n  ('control: cross with cad', ('2026-03-02', 'EURCAD', {}), '2026-03-04'),\n  ('control: cad usd holiday', ('2026-03-06', 'CADUSD', {'USD': ['2026-03-09']}), '2026-03-10'),\n  ('control: yen cross', ('2026-04-28', 'GBPJPY', {'JPY': ['2026-04-29', '2026-04-30']}), '2026-05-04'),\n  ('control: plain t+2', ('2026-03-02', 'EURUSD', {}), '2026-03-04')],\n [('regression intermediate-usd-holiday 1',\n   ('2026-09-24', 'USDJPY',\n    {'USD': ['2026-09-25', '2026-09-28', '2026-09-29'],\n     'EUR': [],\n     'CAD': ['2026-09-25', '2026-09-28', '2026-09-29'],\n     'GBP': ['2026-09-27', '2026-09-29']}),\n   '2026-09-30'),\n  ('regression intermediate-usd-holiday 2',\n   ('2026-07-17', 'EURUSD',\n    {'USD': ['2026-07-18', '2026-07-19', '2026-07-21'],\n     'JPY': ['2026-07-18'],\n     'EUR': ['2026-07-20'],\n     'CAD': ['2026-07-18', '2026-07-22']}),\n   '2026-07-22'),\n  ('partial repair guard 1',\n   ('2026-02-16', 'EURCAD',\n    {'USD': ['2026-02-17', '2026-02-18', '2026-02-20'],\n     'EUR': ['2026-02-17', '2026-02-21'],\n     'CAD': [],\n     'GBP': ['2026-02-17', '2026-02-20']}),\n   '2026-02-19'),\n  ('partial repair guard 2',\n   ('2026-03-23', 'EURCAD',\n    {'JPY': ['2026-03-27'], 'EUR': ['2026-03-25'], 'CAD': ['2026-03-24', '2026-03-26'], 'GBP': ['2026-03-25']}),\n   '2026-03-30'),\n  ('control: plain t+2', ('2026-03-02', 'EURUSD', {}), '2026-03-04'),\n  ('control: over weekend', ('2026-03-05', 'EURUSD', {}), '2026-03-09'),\n  ('control: usd holiday t+1', ('2026-03-02', 'EURUSD', {'USD': ['2026-03-03']}), '2026-03-04'),\n  ('control: usd holiday on spot', ('2026-03-02', 'EURUSD', {'USD': ['2026-03-04']}), '2026-03-05')],\n [('regression intermediate-usd-holiday 1',\n   ('2026-09-08', 'EURUSD',\n    {'USD': ['2026-09-09', '2026-09-10', '2026-09-12', '2026-09-13'], 'JPY': ['2026-09-13'], 'EUR': ['2026-09-13']}),\n   '2026-09-11'),\n  ('regression intermediate-usd-holiday 2',\n   ('2026-04-10', 'USDJPY', {'USD': ['2026-04-13'], 'JPY': ['2026-04-14'], 'GBP': ['2026-04-14', '2026-04-15']}),\n   '2026-04-15'),\n  ('partial repair guard 1',\n   ('2026-08-28', 'EURCAD',\n    {'USD': ['2026-08-30', '2026-08-31', '2026-09-01'],\n     'EUR': ['2026-08-31', '2026-09-01'],\n     'CAD': ['2026-08-29', '2026-08-31'],\n     'GBP': ['2026-08-29', '2026-09-01']}),\n   '2026-09-03'),\n  ('partial repair guard 2',\n   ('2026-03-19', 'EURCAD', {'USD': ['2026-03-21'], 'JPY': ['2026-03-20'], 'EUR': ['2026-03-20'], 'CAD': []}),\n   '2026-03-24'),\n  ('control: usd holiday on spot', ('2026-03-02', 'EURUSD', {'USD': ['2026-03-04']}), '2026-03-05'),\n  ('control: cad t+1', ('2026-03-02', 'USDCAD', {}), '2026-03-03'),\n  ('control: euro holiday t+1', ('2026-03-02', 'EURUSD', {'EUR': ['2026-03-03']}), '2026-03-05'),\n  ('control: cross with cad', ('2026-03-02', 'EURCAD', {}), '2026-03-04')]]\nfor label, args, expected in cases[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":"94c9240c95114eb76b06773258796cab9aab7f7596de0759f5822e3878a72e74","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom datetime import date, timedelta\nN = 1\nobservations = []\ndef solve(trade, pair, holidays):\n    d = date.fromisoformat(trade)\n    base, quote = pair[:3], pair[3:]\n    def good(x, ccys):\n        return x.weekday() < 5 and all(x.isoformat() not in holidays.get(c, []) for c in ccys)\n    lag = 1 if {base, quote} == {'USD', 'CAD'} else 2\n    non_usd = [c for c in (base, quote) if c != 'USD']\n    x, n = d, 0\n    while n < lag:\n        x += timedelta(days=1)\n        if good(x, non_usd if n < lag - 1 else [base, quote]):\n            n += 1\n    return x.isoformat()\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('regression intermediate-usd-holiday 1', ('2026-03-02', 'EURUSD', {'USD': ['2026-03-03']}), '2026-03-04'),\n  ('regression intermediate-usd-holiday 2',\n   ('2026-03-02', 'USDJPY',\n    {'USD': ['2026-03-03'], 'JPY': ['2026-03-04', '2026-03-06'], 'CAD': [], 'GBP': ['2026-03-04', '2026-03-06']}),\n   '2026-03-05'),\n  ('partial repair guard 1', ('2026-03-02', 'EURUSD', {'EUR': ['2026-03-03']}), '2026-03-05'),\n  ('partial repair guard 2', ('2026-04-28', 'GBPJPY', {'JPY': ['2026-04-29', '2026-04-30']}), '2026-05-04'),\n  ('control: plain t+2', ('2026-03-02', 'EURUSD', {}), '2026-03-04'),\n  ('control: over weekend', ('2026-03-05', 'EURUSD', {}), '2026-03-09'),\n  ('control: usd holiday on spot', ('2026-03-02', 'EURUSD', {'USD': ['2026-03-04']}), '2026-03-05'),\n  ('control: cad t+1', ('2026-03-02', 'USDCAD', {}), '2026-03-03')],\n [('regression intermediate-usd-holiday 1',\n   ('2026-06-29', 'EURUSD',\n    {'USD': ['2026-06-30', '2026-07-01', '2026-07-03', '2026-07-04'],\n     'EUR': ['2026-07-01', '2026-07-04'],\n     'CAD': ['2026-07-03'],\n     'GBP': ['2026-07-04']}),\n   '2026-07-02'),\n  ('regression intermediate-usd-holiday 2',\n   ('2026-07-23', 'USDJPY', {'USD': ['2026-07-24', '2026-07-26', '2026-07-27'], 'CAD': ['2026-07-28']}), '2026-07-28'),\n  ('partial repair guard 1',\n   ('2026-03-30', 'EURGBP', {'EUR': ['2026-03-31', '2026-04-04'], 'CAD': ['2026-04-02'], 'GBP': ['2026-04-03']}),\n   '2026-04-02'),\n  ('partial repair guard 2',\n   ('2026-10-09', 'GBPJPY',\n    {'JPY': ['2026-10-11', '2026-10-12', '2026-10-13'],\n     'EUR': ['2026-10-14'],\n     'CAD': ['2026-10-10', '2026-10-11', '2026-10-12', '2026-10-13'],\n     'GBP': ['2026-10-12', '2026-10-14']}),\n   '2026-10-16'),\n  ('control: usd holiday on spot', ('2026-03-02', 'EURUSD', {'USD': ['2026-03-04']}), '2026-03-05'),\n  ('control: cad t+1', ('2026-03-02', 'USDCAD', {}), '2026-03-03'),\n  ('control: euro holiday t+1', ('2026-03-02', 'EURUSD', {'EUR': ['2026-03-03']}), '2026-03-05'),\n  ('control: cross with cad', ('2026-03-02', 'EURCAD', {}), '2026-03-04')],\n [('regression intermediate-usd-holiday 1',\n   ('2026-03-30', 'EURUSD',\n    {'USD': ['2026-03-31', '2026-04-01', '2026-04-03', '2026-04-04'],\n     'EUR': ['2026-03-31', '2026-04-04'],\n     'CAD': ['2026-04-02', '2026-04-04']}),\n   '2026-04-02'),\n  ('regression intermediate-usd-holiday 2',\n   ('2026-07-17', 'EURUSD', {'USD': ['2026-07-20'], 'EUR': ['2026-07-18'], 'CAD': ['2026-07-20']}), '2026-07-21'),\n  ('partial repair guard 1',\n   ('2026-08-14', 'GBPJPY',\n    {'USD': [], 'JPY': ['2026-08-15', '2026-08-17', '2026-08-19'], 'EUR': ['2026-08-15', '2026-08-17']}),\n   '2026-08-20'),\n  ('partial repair guard 2',\n   ('2026-07-22', 'EURUSD', {'EUR': ['2026-07-23', '2026-07-24', '2026-07-25'], 'CAD': ['2026-07-23', '2026-07-26']}),\n   '2026-07-28'),\n  ('control: cross with cad', ('2026-03-02', 'EURCAD', {}), '2026-03-04'),\n  ('control: cad usd holiday', ('2026-03-06', 'CADUSD', {'USD': ['2026-03-09']}), '2026-03-10'),\n  ('control: yen cross', ('2026-04-28', 'GBPJPY', {'JPY': ['2026-04-29', '2026-04-30']}), '2026-05-04'),\n  ('control: plain t+2', ('2026-03-02', 'EURUSD', {}), '2026-03-04')],\n [('regression intermediate-usd-holiday 1',\n   ('2026-09-24', 'USDJPY',\n    {'USD': ['2026-09-25', '2026-09-28', '2026-09-29'],\n     'EUR': [],\n     'CAD': ['2026-09-25', '2026-09-28', '2026-09-29'],\n     'GBP': ['2026-09-27', '2026-09-29']}),\n   '2026-09-30'),\n  ('regression intermediate-usd-holiday 2',\n   ('2026-07-17', 'EURUSD',\n    {'USD': ['2026-07-18', '2026-07-19', '2026-07-21'],\n     'JPY': ['2026-07-18'],\n     'EUR': ['2026-07-20'],\n     'CAD': ['2026-07-18', '2026-07-22']}),\n   '2026-07-22'),\n  ('partial repair guard 1',\n   ('2026-02-16', 'EURCAD',\n    {'USD': ['2026-02-17', '2026-02-18', '2026-02-20'],\n     'EUR': ['2026-02-17', '2026-02-21'],\n     'CAD': [],\n     'GBP': ['2026-02-17', '2026-02-20']}),\n   '2026-02-19'),\n  ('partial repair guard 2',\n   ('2026-03-23', 'EURCAD',\n    {'JPY': ['2026-03-27'], 'EUR': ['2026-03-25'], 'CAD': ['2026-03-24', '2026-03-26'], 'GBP': ['2026-03-25']}),\n   '2026-03-30'),\n  ('control: plain t+2', ('2026-03-02', 'EURUSD', {}), '2026-03-04'),\n  ('control: over weekend', ('2026-03-05', 'EURUSD', {}), '2026-03-09'),\n  ('control: usd holiday t+1', ('2026-03-02', 'EURUSD', {'USD': ['2026-03-03']}), '2026-03-04'),\n  ('control: usd holiday on spot', ('2026-03-02', 'EURUSD', {'USD': ['2026-03-04']}), '2026-03-05')],\n [('regression intermediate-usd-holiday 1',\n   ('2026-09-08', 'EURUSD',\n    {'USD': ['2026-09-09', '2026-09-10', '2026-09-12', '2026-09-13'], 'JPY': ['2026-09-13'], 'EUR': ['2026-09-13']}),\n   '2026-09-11'),\n  ('regression intermediate-usd-holiday 2',\n   ('2026-04-10', 'USDJPY', {'USD': ['2026-04-13'], 'JPY': ['2026-04-14'], 'GBP': ['2026-04-14', '2026-04-15']}),\n   '2026-04-15'),\n  ('partial repair guard 1',\n   ('2026-08-28', 'EURCAD',\n    {'USD': ['2026-08-30', '2026-08-31', '2026-09-01'],\n     'EUR': ['2026-08-31', '2026-09-01'],\n     'CAD': ['2026-08-29', '2026-08-31'],\n     'GBP': ['2026-08-29', '2026-09-01']}),\n   '2026-09-03'),\n  ('partial repair guard 2',\n   ('2026-03-19', 'EURCAD', {'USD': ['2026-03-21'], 'JPY': ['2026-03-20'], 'EUR': ['2026-03-20'], 'CAD': []}),\n   '2026-03-24'),\n  ('control: usd holiday on spot', ('2026-03-02', 'EURUSD', {'USD': ['2026-03-04']}), '2026-03-05'),\n  ('control: cad t+1', ('2026-03-02', 'USDCAD', {}), '2026-03-03'),\n  ('control: euro holiday t+1', ('2026-03-02', 'EURUSD', {'EUR': ['2026-03-03']}), '2026-03-05'),\n  ('control: cross with cad', ('2026-03-02', 'EURCAD', {}), '2026-03-04')]]\nfor label, args, expected in cases[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, bounded teaching model with a stipulated toy contract; it makes no claim of conformance to any real regulation, standard, or institution'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-currency_rounding_and_fx_conversion-fx-spot-value-date-intermediate-usd-holiday","generated_at":"2026-09-29T14:47:02.040244+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Currency amounts must be rounded at the right stage and in the right unit, or ledgers, quotes and settlements drift by minor units.","repair":"Intermediate days need only be business days for the non-USD currencies.","root_cause":"Intermediate days are checked against both currencies' holidays, including USD.","sha256":"c17198914c5d18f917cb9a8b75d6d107d99bf2173d03c60f1edab5f3fc74ae77","title":"A USD holiday on the day before spot delays the value date · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.234,"exit_code":1,"observations":[{"actual":"2026-03-04","check":"regression intermediate-usd-holiday 1","expected":"2026-03-04","passed":true},{"actual":"2026-03-05","check":"regression intermediate-usd-holiday 2","expected":"2026-03-05","passed":true},{"actual":"2026-03-04","check":"partial repair guard 1","expected":"2026-03-05","passed":false},{"actual":"2026-05-01","check":"partial repair guard 2","expected":"2026-05-04","passed":false},{"actual":"2026-03-04","check":"control: plain t+2","expected":"2026-03-04","passed":true},{"actual":"2026-03-09","check":"control: over weekend","expected":"2026-03-09","passed":true},{"actual":"2026-03-05","check":"control: usd holiday on spot","expected":"2026-03-05","passed":true},{"actual":"2026-03-03","check":"control: cad t+1","expected":"2026-03-03","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression intermediate-usd-holiday 1\", \"actual\": \"2026-03-04\", \"expected\": \"2026-03-04\", \"passed\": true}, {\"check\": \"regression intermediate-usd-holiday 2\", \"actual\": \"2026-03-05\", \"expected\": \"2026-03-05\", \"passed\": true}, {\"check\": \"partial repair guard 1\", \"actual\": \"2026-03-04\", \"expected\": \"2026-03-05\", \"passed\": false}, {\"check\": \"partial repair guard 2\", \"actual\": \"2026-05-01\", \"expected\": \"2026-05-04\", \"passed\": false}, {\"check\": \"control: plain t+2\", \"actual\": \"2026-03-04\", \"expected\": \"2026-03-04\", \"passed\": true}, {\"check\": \"control: over weekend\", \"actual\": \"2026-03-09\", \"expected\": \"2026-03-09\", \"passed\": true}, {\"check\": \"control: usd holiday on spot\", \"actual\": \"2026-03-05\", \"expected\": \"2026-03-05\", \"passed\": true}, {\"check\": \"control: cad t+1\", \"actual\": \"2026-03-03\", \"expected\": \"2026-03-03\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.428,"exit_code":1,"observations":[{"actual":"2026-03-05","check":"regression intermediate-usd-holiday 1","expected":"2026-03-04","passed":false},{"actual":"2026-03-09","check":"regression intermediate-usd-holiday 2","expected":"2026-03-05","passed":false},{"actual":"2026-03-05","check":"partial repair guard 1","expected":"2026-03-05","passed":true},{"actual":"2026-05-04","check":"partial repair guard 2","expected":"2026-05-04","passed":true},{"actual":"2026-03-04","check":"control: plain t+2","expected":"2026-03-04","passed":true},{"actual":"2026-03-09","check":"control: over weekend","expected":"2026-03-09","passed":true},{"actual":"2026-03-05","check":"control: usd holiday on spot","expected":"2026-03-05","passed":true},{"actual":"2026-03-03","check":"control: cad t+1","expected":"2026-03-03","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression intermediate-usd-holiday 1\", \"actual\": \"2026-03-05\", \"expected\": \"2026-03-04\", \"passed\": false}, {\"check\": \"regression intermediate-usd-holiday 2\", \"actual\": \"2026-03-09\", \"expected\": \"2026-03-05\", \"passed\": false}, {\"check\": \"partial repair guard 1\", \"actual\": \"2026-03-05\", \"expected\": \"2026-03-05\", \"passed\": true}, {\"check\": \"partial repair guard 2\", \"actual\": \"2026-05-04\", \"expected\": \"2026-05-04\", \"passed\": true}, {\"check\": \"control: plain t+2\", \"actual\": \"2026-03-04\", \"expected\": \"2026-03-04\", \"passed\": true}, {\"check\": \"control: over weekend\", \"actual\": \"2026-03-09\", \"expected\": \"2026-03-09\", \"passed\": true}, {\"check\": \"control: usd holiday on spot\", \"actual\": \"2026-03-05\", \"expected\": \"2026-03-05\", \"passed\": true}, {\"check\": \"control: cad t+1\", \"actual\": \"2026-03-03\", \"expected\": \"2026-03-03\", \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.673,"exit_code":0,"observations":[{"actual":"2026-03-04","check":"regression intermediate-usd-holiday 1","expected":"2026-03-04","passed":true},{"actual":"2026-03-05","check":"regression intermediate-usd-holiday 2","expected":"2026-03-05","passed":true},{"actual":"2026-03-05","check":"partial repair guard 1","expected":"2026-03-05","passed":true},{"actual":"2026-05-04","check":"partial repair guard 2","expected":"2026-05-04","passed":true},{"actual":"2026-03-04","check":"control: plain t+2","expected":"2026-03-04","passed":true},{"actual":"2026-03-09","check":"control: over weekend","expected":"2026-03-09","passed":true},{"actual":"2026-03-05","check":"control: usd holiday on spot","expected":"2026-03-05","passed":true},{"actual":"2026-03-03","check":"control: cad t+1","expected":"2026-03-03","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression intermediate-usd-holiday 1\", \"actual\": \"2026-03-04\", \"expected\": \"2026-03-04\", \"passed\": true}, {\"check\": \"regression intermediate-usd-holiday 2\", \"actual\": \"2026-03-05\", \"expected\": \"2026-03-05\", \"passed\": true}, {\"check\": \"partial repair guard 1\", \"actual\": \"2026-03-05\", \"expected\": \"2026-03-05\", \"passed\": true}, {\"check\": \"partial repair guard 2\", \"actual\": \"2026-05-04\", \"expected\": \"2026-05-04\", \"passed\": true}, {\"check\": \"control: plain t+2\", \"actual\": \"2026-03-04\", \"expected\": \"2026-03-04\", \"passed\": true}, {\"check\": \"control: over weekend\", \"actual\": \"2026-03-09\", \"expected\": \"2026-03-09\", \"passed\": true}, {\"check\": \"control: usd holiday on spot\", \"actual\": \"2026-03-05\", \"expected\": \"2026-03-05\", \"passed\": true}, {\"check\": \"control: cad t+1\", \"actual\": \"2026-03-03\", \"expected\": \"2026-03-03\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}