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 conversion carry is never reset between days · case 01
A fraction left over from Monday pays out on Tuesday.
The conversion carry is never reset between days · case 02
A fraction left over from Monday pays out on Tuesday.
The conversion carry is never reset between days · case 03
A fraction left over from Monday pays out on Tuesday.
The conversion carry is never reset between days · case 04
A fraction left over from Monday pays out on Tuesday.
The conversion carry is never reset between days · case 05
A fraction left over from Monday pays out on Tuesday.
The cumulative total is truncated toward zero · case 01
A day that starts with reversals posts converted amounts that do not sum to the floor of the total.
The cumulative total is truncated toward zero · case 02
A day that starts with reversals posts converted amounts that do not sum to the floor of the total.
The cumulative total is truncated toward zero · case 03
A day that starts with reversals posts converted amounts that do not sum to the floor of the total.
The cumulative total is truncated toward zero · case 04
A day that starts with reversals posts converted amounts that do not sum to the floor of the total.
The cumulative total is truncated toward zero · case 05
A day that starts with reversals posts converted amounts that do not sum to the floor of the total.
The day reset clears the running total but keeps the previous floor · case 01
The first posting of a new day is reduced by the previous day's accumulated floor.
The day reset clears the running total but keeps the previous floor · case 02
The first posting of a new day is reduced by the previous day's accumulated floor.
The day reset clears the running total but keeps the previous floor · case 03
The first posting of a new day is reduced by the previous day's accumulated floor.
The day reset clears the running total but keeps the previous floor · case 04
The first posting of a new day is reduced by the previous day's accumulated floor.
The day reset clears the running total but keeps the previous floor · case 05
The first posting of a new day is reduced by the previous day's accumulated floor.
The rate deviation is measured relative to the new rate · case 01
A drop exactly at the tolerance is rejected while an equal rise is accepted.
The rate deviation is measured relative to the new rate · case 02
A drop exactly at the tolerance is rejected while an equal rise is accepted.
The rate deviation is measured relative to the new rate · case 03
A drop exactly at the tolerance is rejected while an equal rise is accepted.
The rate deviation is measured relative to the new rate · case 04
A drop exactly at the tolerance is rejected while an equal rise is accepted.
The rate deviation is measured relative to the new rate · case 05
A drop exactly at the tolerance is rejected while an equal rise is accepted.
A move exactly at the tolerance is computed in floating point · case 01
A 10% move against a 1000 bps band is rejected by a few ulps.
A move exactly at the tolerance is computed in floating point · case 02
A 10% move against a 1000 bps band is rejected by a few ulps.
A move exactly at the tolerance is computed in floating point · case 03
A 10% move against a 1000 bps band is rejected by a few ulps.
A move exactly at the tolerance is computed in floating point · case 04
A 10% move against a 1000 bps band is rejected by a few ulps.
A move exactly at the tolerance is computed in floating point · case 05
A 10% move against a 1000 bps band is rejected by a few ulps.
An inverted incoming quote is compared without inversion · case 01
A USD/EUR print is compared directly with the EUR/USD reference and rejected.
An inverted incoming quote is compared without inversion · case 02
A USD/EUR print is compared directly with the EUR/USD reference and rejected.
An inverted incoming quote is compared without inversion · case 03
A USD/EUR print is compared directly with the EUR/USD reference and rejected.
An inverted incoming quote is compared without inversion · case 04
A USD/EUR print is compared directly with the EUR/USD reference and rejected.
An inverted incoming quote is compared without inversion · case 05
A USD/EUR print is compared directly with the EUR/USD reference and rejected.
Only upward rate moves are checked against the tolerance · case 01
A collapsed rate far below the reference is accepted.
Only upward rate moves are checked against the tolerance · case 02
A collapsed rate far below the reference is accepted.
Only upward rate moves are checked against the tolerance · case 03
A collapsed rate far below the reference is accepted.
Only upward rate moves are checked against the tolerance · case 04
A collapsed rate far below the reference is accepted.
Only upward rate moves are checked against the tolerance · case 05
A collapsed rate far below the reference is accepted.
Amounts dated on the cutover day are redenominated a second time · case 01
Payments booked on the cutover date are divided by the factor although they are already in the new currency.
Amounts dated on the cutover day are redenominated a second time · case 02
Payments booked on the cutover date are divided by the factor although they are already in the new currency.
Amounts dated on the cutover day are redenominated a second time · case 03
Payments booked on the cutover date are divided by the factor although they are already in the new currency.
Amounts dated on the cutover day are redenominated a second time · case 04
Payments booked on the cutover date are divided by the factor although they are already in the new currency.
Amounts dated on the cutover day are redenominated a second time · case 05
Payments booked on the cutover date are divided by the factor although they are already in the new currency.
Redenomination ignores a change in minor-unit exponent · case 01
A zero-decimal legacy currency converted into a two-decimal currency is a hundred times too small.
Redenomination ignores a change in minor-unit exponent · case 02
A zero-decimal legacy currency converted into a two-decimal currency is a hundred times too small.
Redenomination ignores a change in minor-unit exponent · case 03
A zero-decimal legacy currency converted into a two-decimal currency is a hundred times too small.
Redenomination ignores a change in minor-unit exponent · case 04
A zero-decimal legacy currency converted into a two-decimal currency is a hundred times too small.
Redenomination ignores a change in minor-unit exponent · case 05
A zero-decimal legacy currency converted into a two-decimal currency is a hundred times too small.
Redenominated amounts are truncated · case 01
Old balances lose up to one new minor unit, and debts shrink toward zero.
Redenominated amounts are truncated · case 02
Old balances lose up to one new minor unit, and debts shrink toward zero.
Redenominated amounts are truncated · case 03
Old balances lose up to one new minor unit, and debts shrink toward zero.
Redenominated amounts are truncated · case 04
Old balances lose up to one new minor unit, and debts shrink toward zero.
Redenominated amounts are truncated · case 05
Old balances lose up to one new minor unit, and debts shrink toward zero.
Old minor digits are dropped before applying the redenomination factor · case 01
Legacy amounts with fractional old units lose value when redenominated.
Old minor digits are dropped before applying the redenomination factor · case 02
Legacy amounts with fractional old units lose value when redenominated.
Old minor digits are dropped before applying the redenomination factor · case 03
Legacy amounts with fractional old units lose value when redenominated.
Old minor digits are dropped before applying the redenomination factor · case 04
Legacy amounts with fractional old units lose value when redenominated.
Old minor digits are dropped before applying the redenomination factor · case 05
Legacy amounts with fractional old units lose value when redenominated.
A XXXUSD quote is used as units per USD without inversion · case 01
EURJPY is computed as 139.7 instead of 164.0.
A XXXUSD quote is used as units per USD without inversion · case 02
EURJPY is computed as 139.7 instead of 164.0.
A XXXUSD quote is used as units per USD without inversion · case 03
EURJPY is computed as 139.7 instead of 164.0.
A XXXUSD quote is used as units per USD without inversion · case 04
EURJPY is computed as 139.7 instead of 164.0.
A XXXUSD quote is used as units per USD without inversion · case 05
EURJPY is computed as 139.7 instead of 164.0.
The cross rate divides base-per-USD by quote-per-USD · case 01
EURJPY is returned as its reciprocal.
The cross rate divides base-per-USD by quote-per-USD · case 02
EURJPY is returned as its reciprocal.
The cross rate divides base-per-USD by quote-per-USD · case 03
EURJPY is returned as its reciprocal.
The cross rate divides base-per-USD by quote-per-USD · case 04
EURJPY is returned as its reciprocal.
The cross rate divides base-per-USD by quote-per-USD · case 05
EURJPY is returned as its reciprocal.
Inverted USD legs are rounded to four decimals · case 01
Crosses built from EURUSD or GBPUSD drift in the fourth significant digit.
Inverted USD legs are rounded to four decimals · case 02
Crosses built from EURUSD or GBPUSD drift in the fourth significant digit.
Inverted USD legs are rounded to four decimals · case 03
Crosses built from EURUSD or GBPUSD drift in the fourth significant digit.
Inverted USD legs are rounded to four decimals · case 04
Crosses built from EURUSD or GBPUSD drift in the fourth significant digit.
Inverted USD legs are rounded to four decimals · case 05
Crosses built from EURUSD or GBPUSD drift in the fourth significant digit.
A target involving USD itself looks up a USDUSD quote · case 01
USDJPY and JPYUSD targets fail with ERR:no-quote.
A target involving USD itself looks up a USDUSD quote · case 02
USDJPY and JPYUSD targets fail with ERR:no-quote.
A target involving USD itself looks up a USDUSD quote · case 03
USDJPY and JPYUSD targets fail with ERR:no-quote.
A target involving USD itself looks up a USDUSD quote · case 04
USDJPY and JPYUSD targets fail with ERR:no-quote.
A target involving USD itself looks up a USDUSD quote · case 05
USDJPY and JPYUSD targets fail with ERR:no-quote.
An inverted quote overrides the authoritative direct USD quote · case 01
When both USDEUR and EURUSD are present, crosses use the inverse of EURUSD.
An inverted quote overrides the authoritative direct USD quote · case 02
When both USDEUR and EURUSD are present, crosses use the inverse of EURUSD.
An inverted quote overrides the authoritative direct USD quote · case 03
When both USDEUR and EURUSD are present, crosses use the inverse of EURUSD.
An inverted quote overrides the authoritative direct USD quote · case 04
When both USDEUR and EURUSD are present, crosses use the inverse of EURUSD.
An inverted quote overrides the authoritative direct USD quote · case 05
When both USDEUR and EURUSD are present, crosses use the inverse of EURUSD.
The dispensed amount is rounded to the nearest note · case 01
The ATM dispenses more foreign currency than the customer requested.
The dispensed amount is rounded to the nearest note · case 02
The ATM dispenses more foreign currency than the customer requested.
The dispensed amount is rounded to the nearest note · case 03
The ATM dispenses more foreign currency than the customer requested.
The dispensed amount is rounded to the nearest note · case 04
The ATM dispenses more foreign currency than the customer requested.
The dispensed amount is rounded to the nearest note · case 05
The ATM dispenses more foreign currency than the customer requested.
The customer is charged the requested amount instead of the dispensed amount · case 01
Requesting 200.00 but receiving 30,000 yen charges 200.00 plus the fee.
The customer is charged the requested amount instead of the dispensed amount · case 02
Requesting 200.00 but receiving 30,000 yen charges 200.00 plus the fee.
The customer is charged the requested amount instead of the dispensed amount · case 03
Requesting 200.00 but receiving 30,000 yen charges 200.00 plus the fee.
The customer is charged the requested amount instead of the dispensed amount · case 04
Requesting 200.00 but receiving 30,000 yen charges 200.00 plus the fee.
The customer is charged the requested amount instead of the dispensed amount · case 05
Requesting 200.00 but receiving 30,000 yen charges 200.00 plus the fee.
The home-currency charge is rounded to nearest instead of up · case 01
The bank absorbs up to half a cent per withdrawal.
The home-currency charge is rounded to nearest instead of up · case 02
The bank absorbs up to half a cent per withdrawal.
The home-currency charge is rounded to nearest instead of up · case 03
The bank absorbs up to half a cent per withdrawal.
The home-currency charge is rounded to nearest instead of up · case 04
The bank absorbs up to half a cent per withdrawal.
The home-currency charge is rounded to nearest instead of up · case 05
The bank absorbs up to half a cent per withdrawal.
A request below the smallest note is charged the fee · case 01
The customer pays the ATM fee for a withdrawal that dispensed nothing.
A request below the smallest note is charged the fee · case 02
The customer pays the ATM fee for a withdrawal that dispensed nothing.
A request below the smallest note is charged the fee · case 03
The customer pays the ATM fee for a withdrawal that dispensed nothing.
A request below the smallest note is charged the fee · case 04
The customer pays the ATM fee for a withdrawal that dispensed nothing.
A request below the smallest note is charged the fee · case 05
The customer pays the ATM fee for a withdrawal that dispensed nothing.
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 ↗