Understand the failure.
Verify the repair.
Small, reproducible software failures. The broken implementation, the fix that didn’t work, and the one that passed—preserved together.
Explore the cases ↓How results are verified ↗WHAT THE ARCHIVE CONTAINS
100840 executable cases. 20168 are open.
Every case records the implementation that fails, the fix that did not work, and the repair that passed its checks—with recorded outputs and source hashes. This release adds 100840 cases across 20168 failure mechanisms and 254 domains.
The open tier gives you the failure and the unsuccessful fix for one case in every mechanism. The remaining 80672 cases, 5 variants per mechanism, are member-only: the verified repair, its recorded checks, and the full fixture suite are held in the member archive. Read the methodology ↗
A RECORD OF WHAT WENT WRONG
Browse the archive / 100840
The payer on a quote-denominated leg is derived from the side alone · case 01
A customer spending a fixed number of dollars on euros has the euros rounded up in their favour.
The payer on a quote-denominated leg is derived from the side alone · case 02
A customer spending a fixed number of dollars on euros has the euros rounded up in their favour.
The payer on a quote-denominated leg is derived from the side alone · case 03
A customer spending a fixed number of dollars on euros has the euros rounded up in their favour.
The payer on a quote-denominated leg is derived from the side alone · case 04
A customer spending a fixed number of dollars on euros has the euros rounded up in their favour.
The payer on a quote-denominated leg is derived from the side alone · case 05
A customer spending a fixed number of dollars on euros has the euros rounded up in their favour.
Customer-facing FX amounts use nearest rounding instead of house-favourable rounding · case 01
Receivable amounts are rounded up to the nearest cent, paying customers fractions the dealer does not hold.
Customer-facing FX amounts use nearest rounding instead of house-favourable rounding · case 02
Receivable amounts are rounded up to the nearest cent, paying customers fractions the dealer does not hold.
Customer-facing FX amounts use nearest rounding instead of house-favourable rounding · case 03
Receivable amounts are rounded up to the nearest cent, paying customers fractions the dealer does not hold.
Customer-facing FX amounts use nearest rounding instead of house-favourable rounding · case 04
Receivable amounts are rounded up to the nearest cent, paying customers fractions the dealer does not hold.
Customer-facing FX amounts use nearest rounding instead of house-favourable rounding · case 05
Receivable amounts are rounded up to the nearest cent, paying customers fractions the dealer does not hold.
A locked quote with equal bid and ask is rejected as crossed · case 01
Legitimate zero-spread promotional quotes fail with ERR:crossed-quote.
A locked quote with equal bid and ask is rejected as crossed · case 02
Legitimate zero-spread promotional quotes fail with ERR:crossed-quote.
A locked quote with equal bid and ask is rejected as crossed · case 03
Legitimate zero-spread promotional quotes fail with ERR:crossed-quote.
A locked quote with equal bid and ask is rejected as crossed · case 04
Legitimate zero-spread promotional quotes fail with ERR:crossed-quote.
A locked quote with equal bid and ask is rejected as crossed · case 05
Legitimate zero-spread promotional quotes fail with ERR:crossed-quote.
The counter amount is rounded with the input currency exponent · case 01
Dollars converted to yen are returned with cents, and yen converted to dollars are whole numbers.
The counter amount is rounded with the input currency exponent · case 02
Dollars converted to yen are returned with cents, and yen converted to dollars are whole numbers.
The counter amount is rounded with the input currency exponent · case 03
Dollars converted to yen are returned with cents, and yen converted to dollars are whole numbers.
The counter amount is rounded with the input currency exponent · case 04
Dollars converted to yen are returned with cents, and yen converted to dollars are whole numbers.
The counter amount is rounded with the input currency exponent · case 05
Dollars converted to yen are returned with cents, and yen converted to dollars are whole numbers.
Triangulation multiplies by a pre-rounded inverse of the legacy rate · case 01
Large lira amounts convert to a EUR intermediate that is off by a few thousandths.
Triangulation multiplies by a pre-rounded inverse of the legacy rate · case 02
Large lira amounts convert to a EUR intermediate that is off by a few thousandths.
Triangulation multiplies by a pre-rounded inverse of the legacy rate · case 03
Large lira amounts convert to a EUR intermediate that is off by a few thousandths.
Triangulation multiplies by a pre-rounded inverse of the legacy rate · case 04
Large lira amounts convert to a EUR intermediate that is off by a few thousandths.
Triangulation multiplies by a pre-rounded inverse of the legacy rate · case 05
Large lira amounts convert to a EUR intermediate that is off by a few thousandths.
The EUR intermediate is rounded to cents instead of three decimals · case 01
Legacy-to-legacy amounts differ from the reference triangulation by a few minor units.
The EUR intermediate is rounded to cents instead of three decimals · case 02
Legacy-to-legacy amounts differ from the reference triangulation by a few minor units.
The EUR intermediate is rounded to cents instead of three decimals · case 03
Legacy-to-legacy amounts differ from the reference triangulation by a few minor units.
The EUR intermediate is rounded to cents instead of three decimals · case 04
Legacy-to-legacy amounts differ from the reference triangulation by a few minor units.
The EUR intermediate is rounded to cents instead of three decimals · case 05
Legacy-to-legacy amounts differ from the reference triangulation by a few minor units.
Legacy pairs use a derived direct cross rate instead of triangulating · case 01
Mark to franc conversions disagree with the triangulated reference amount.
Legacy pairs use a derived direct cross rate instead of triangulating · case 02
Mark to franc conversions disagree with the triangulated reference amount.
Legacy pairs use a derived direct cross rate instead of triangulating · case 03
Mark to franc conversions disagree with the triangulated reference amount.
Legacy pairs use a derived direct cross rate instead of triangulating · case 04
Mark to franc conversions disagree with the triangulated reference amount.
Legacy pairs use a derived direct cross rate instead of triangulating · case 05
Mark to franc conversions disagree with the triangulated reference amount.
A conversion into EUR returns the three-decimal intermediate · case 01
Marks converted to euros are reported with three decimals.
A conversion into EUR returns the three-decimal intermediate · case 02
Marks converted to euros are reported with three decimals.
A conversion into EUR returns the three-decimal intermediate · case 03
Marks converted to euros are reported with three decimals.
A conversion into EUR returns the three-decimal intermediate · case 04
Marks converted to euros are reported with three decimals.
A conversion into EUR returns the three-decimal intermediate · case 05
Marks converted to euros are reported with three decimals.
A same-currency conversion is routed through euro triangulation · case 01
Converting 12345 lira to lira returns 12346 lira.
A same-currency conversion is routed through euro triangulation · case 02
Converting 12345 lira to lira returns 12346 lira.
A same-currency conversion is routed through euro triangulation · case 03
Converting 12345 lira to lira returns 12346 lira.
A same-currency conversion is routed through euro triangulation · case 04
Converting 12345 lira to lira returns 12346 lira.
A same-currency conversion is routed through euro triangulation · case 05
Converting 12345 lira to lira returns 12346 lira.
The converted control total is rebuilt from the already rounded lines · case 01
Invoice totals in the target currency drift from round(sum*rate) and no plug is ever posted.
The converted control total is rebuilt from the already rounded lines · case 02
Invoice totals in the target currency drift from round(sum*rate) and no plug is ever posted.
The converted control total is rebuilt from the already rounded lines · case 03
Invoice totals in the target currency drift from round(sum*rate) and no plug is ever posted.
The converted control total is rebuilt from the already rounded lines · case 04
Invoice totals in the target currency drift from round(sum*rate) and no plug is ever posted.
The converted control total is rebuilt from the already rounded lines · case 05
Invoice totals in the target currency drift from round(sum*rate) and no plug is ever posted.
The rounding plug lands on the largest signed converted line · case 01
When the largest line is a credit, the difference is booked to a small debit line instead.
The rounding plug lands on the largest signed converted line · case 02
When the largest line is a credit, the difference is booked to a small debit line instead.
The rounding plug lands on the largest signed converted line · case 03
When the largest line is a credit, the difference is booked to a small debit line instead.
The rounding plug lands on the largest signed converted line · case 04
When the largest line is a credit, the difference is booked to a small debit line instead.
The rounding plug lands on the largest signed converted line · case 05
When the largest line is a credit, the difference is booked to a small debit line instead.
The rounding difference is subtracted from the plug line · case 01
Converted lines sum to a value two differences away from the control total.
The rounding difference is subtracted from the plug line · case 02
Converted lines sum to a value two differences away from the control total.
The rounding difference is subtracted from the plug line · case 03
Converted lines sum to a value two differences away from the control total.
The rounding difference is subtracted from the plug line · case 04
Converted lines sum to a value two differences away from the control total.
The rounding difference is subtracted from the plug line · case 05
Converted lines sum to a value two differences away from the control total.
A converted credit that rounds to zero is emitted as minus zero · case 01
A one-cent credit converted at 0.3 shows as '-0.00' on the invoice.
A converted credit that rounds to zero is emitted as minus zero · case 02
A one-cent credit converted at 0.3 shows as '-0.00' on the invoice.
A converted credit that rounds to zero is emitted as minus zero · case 03
A one-cent credit converted at 0.3 shows as '-0.00' on the invoice.
A converted credit that rounds to zero is emitted as minus zero · case 04
A one-cent credit converted at 0.3 shows as '-0.00' on the invoice.
A converted credit that rounds to zero is emitted as minus zero · case 05
A one-cent credit converted at 0.3 shows as '-0.00' on the invoice.
A rate published at the trade instant is not eligible · case 01
A trade at t=7 ignores the tick published at t=7 and reports a stale or older rate.
A rate published at the trade instant is not eligible · case 02
A trade at t=7 ignores the tick published at t=7 and reports a stale or older rate.
A rate published at the trade instant is not eligible · case 03
A trade at t=7 ignores the tick published at t=7 and reports a stale or older rate.
A rate published at the trade instant is not eligible · case 04
A trade at t=7 ignores the tick published at t=7 and reports a stale or older rate.
A rate published at the trade instant is not eligible · case 05
A trade at t=7 ignores the tick published at t=7 and reports a stale or older rate.
A rate correction with the same timestamp is ignored · case 01
The originally published rate is used although a correction for the same instant followed it.
A rate correction with the same timestamp is ignored · case 02
The originally published rate is used although a correction for the same instant followed it.
A rate correction with the same timestamp is ignored · case 03
The originally published rate is used although a correction for the same instant followed it.
A rate correction with the same timestamp is ignored · case 04
The originally published rate is used although a correction for the same instant followed it.
A rate correction with the same timestamp is ignored · case 05
The originally published rate is used although a correction for the same instant followed it.
A rate exactly at the maximum age is declared stale · case 01
A tick exactly max_age old is rejected.
A rate exactly at the maximum age is declared stale · case 02
A tick exactly max_age old is rejected.
A rate exactly at the maximum age is declared stale · case 03
A tick exactly max_age old is rejected.
A rate exactly at the maximum age is declared stale · case 04
A tick exactly max_age old is rejected.
A rate exactly at the maximum age is declared stale · case 05
A tick exactly max_age old is rejected.
A zero maximum age is treated as no age limit · case 01
With max_age 0, an hour-old rate is accepted.
A zero maximum age is treated as no age limit · case 02
With max_age 0, an hour-old rate is accepted.
A zero maximum age is treated as no age limit · case 03
With max_age 0, an hour-old rate is accepted.
A zero maximum age is treated as no age limit · case 04
With max_age 0, an hour-old rate is accepted.
A zero maximum age is treated as no age limit · case 05
With max_age 0, an hour-old rate is accepted.
Minor units are converted without rescaling between currency exponents · case 01
1000 US cents convert to 151370 yen instead of 1514 yen.
Minor units are converted without rescaling between currency exponents · case 02
1000 US cents convert to 151370 yen instead of 1514 yen.
Minor units are converted without rescaling between currency exponents · case 03
1000 US cents convert to 151370 yen instead of 1514 yen.
Minor units are converted without rescaling between currency exponents · case 04
1000 US cents convert to 151370 yen instead of 1514 yen.
Minor units are converted without rescaling between currency exponents · case 05
1000 US cents convert to 151370 yen instead of 1514 yen.
The converted minor amount is truncated by int() · case 01
Converted amounts are systematically short by up to one minor unit, and negatives move toward zero.
The converted minor amount is truncated by int() · case 02
Converted amounts are systematically short by up to one minor unit, and negatives move toward zero.
The converted minor amount is truncated by int() · case 03
Converted amounts are systematically short by up to one minor unit, and negatives move toward zero.
The converted minor amount is truncated by int() · case 04
Converted amounts are systematically short by up to one minor unit, and negatives move toward zero.
The converted minor amount is truncated by int() · case 05
Converted amounts are systematically short by up to one minor unit, and negatives move toward zero.
The amount-rate product is formed in binary floating point · case 01
115 cents at 1.1 becomes 127 instead of the half-even 126.
The amount-rate product is formed in binary floating point · case 02
115 cents at 1.1 becomes 127 instead of the half-even 126.
The amount-rate product is formed in binary floating point · case 03
115 cents at 1.1 becomes 127 instead of the half-even 126.
The amount-rate product is formed in binary floating point · case 04
115 cents at 1.1 becomes 127 instead of the half-even 126.
The amount-rate product is formed in binary floating point · case 05
115 cents at 1.1 becomes 127 instead of the half-even 126.
INSPECTABLE BY DESIGN
Every result has a runnable source.
Runnable implementations with recorded outputs, source hashes, and explicit contracts. Related variants share a failure mechanism and belong together in evaluation splits.
Read the methodology ↗