{"abstract":"A corrupted duplicate share silently replaces the good one.","category":"Error-correcting codes","checks":8,"contract":"Systematic Reed-Solomon erasure code over GF(257): the k data symbols are the values of a degree < k polynomial at x = 1..k, and any symbol is its value at another x. Given surviving shares [x, y] (duplicates allowed if they agree; conflicting duplicates return None; y is reduced mod 257), recover the k data symbols by Lagrange interpolation over the k shares with the smallest x. Fewer than k distinct x values returns None.","contract_signature":"shares, k","evaluation_group":"w2-error_correcting_codes-rs-erasure-gf257","failed_approach":"Rejecting every duplicate refuses consistent retransmitted shares.","family":"w2-error_correcting_codes-rs-erasure-gf257-duplicate-shares","id":"FA-72246","implementations":{"attempt":{"sha256":"2f506d00a345bdd97e4c39d414dd7495820a98a704998e4012d13cdf69c471c5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(shares, k):\n    p = 257\n    pts = {}\n    for x, y in shares:\n        if x in pts:\n            return None\n        pts[x] = y % p\n    if len(pts) < k:\n        return None\n    use = sorted(pts.items())[:k]\n    out = []\n    for t in range(1, k + 1):\n        total = 0\n        for i, (xi, yi) in enumerate(use):\n            num, den = 1, 1\n            for j, (xj, _) in enumerate(use):\n                if j != i:\n                    num = num * (t - xj) % p\n                    den = den * (xi - xj) % p\n            total = (total + yi * num * pow(den, p - 2, p)) % p\n        out.append(total)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [[[1, 195], [2, 163], [1, 196]], 2]', [[[1, 195], [2, 163], [1, 196]], 2], None], ['regression [[[1, 191], [5, 97], [3, 23], [1, 192]], 3]', [[[1, 191], [5, 97], [3, 23], [1, 192]], 3], None], ['partial-repair [[[1, 7], [1, 7], [2, 9]], 2]', [[[1, 7], [1, 7], [2, 9]], 2], [7, 9]], ['control [[[1, 195], [2, 163]], 2]', [[[1, 195], [2, 163]], 2], [195, 163]], ['control [[[1, 195], [2, 163], [6, 35]], 2]', [[[1, 195], [2, 163], [6, 35]], 2], [195, 163]], ['control [[[1, 195], [1, 195]], 2]', [[[1, 195], [1, 195]], 2], None], ['control [[[1, 452], [2, 420]], 2]', [[[1, 452], [2, 420]], 2], [195, 163]], ['control [[[1, 191], [5, 97], [3, 23]], 3]', [[[1, 191], [5, 97], [3, 23]], 3], [191, 141, 23]]], [['regression [[[8, 25], [4, 191], [3, 238], [1, 28], [8, 26]], 4]', [[[8, 25], [4, 191], [3, 238], [1, 28], [8, 26]], 4], None], ['regression [[[4, 14], [5, 158], [7, 75], [8, 90], [4, 15]], 4]', [[[4, 14], [5, 158], [7, 75], [8, 90], [4, 15]], 4], None], ['partial-repair [[[1, 7], [1, 7], [2, 9]], 2]', [[[1, 7], [1, 7], [2, 9]], 2], [7, 9]], ['control [[[1, 191], [5, 97], [3, 23], [4, 94]], 3]', [[[1, 191], [5, 97], [3, 23], [4, 94]], 3], [191, 141, 23]], ['control [[[1, 191], [5, 97], [1, 191]], 3]', [[[1, 191], [5, 97], [1, 191]], 3], None], ['control [[[1, 448], [5, 354], [3, 280]], 3]', [[[1, 448], [5, 354], [3, 280]], 3], [191, 141, 23]], ['control [[[1, 224], [5, 68], [4, 8]], 3]', [[[1, 224], [5, 68], [4, 8]], 3], [224, 86, 14]], ['control [[[1, 224], [5, 68], [4, 8], [6, 194]], 3]', [[[1, 224], [5, 68], [4, 8], [6, 194]], 3], [224, 86, 14]]], [['regression [[[4, 127], [5, 207], [4, 128]], 2]', [[[4, 127], [5, 207], [4, 128]], 2], None], ['regression [[[1, 88], [7, 101], [3, 242], [1, 89]], 3]', [[[1, 88], [7, 101], [3, 242], [1, 89]], 3], None], ['partial-repair [[[1, 7], [1, 7], [2, 9]], 2]', [[[1, 7], [1, 7], [2, 9]], 2], [7, 9]], ['control [[[1, 224], [5, 68], [1, 224]], 3]', [[[1, 224], [5, 68], [1, 224]], 3], None], ['control [[[1, 481], [5, 325], [4, 265]], 3]', [[[1, 481], [5, 325], [4, 265]], 3], [224, 86, 14]], ['control [[[8, 25], [4, 191], [3, 238], [1, 28]], 4]', [[[8, 25], [4, 191], [3, 238], [1, 28]], 4], [28, 103, 238, 191]], ['control [[[8, 25], [4, 191], [3, 238], [1, 28], [7, 136]], 4]', [[[8, 25], [4, 191], [3, 238], [1, 28], [7, 136]], 4], [28, 103, 238, 191]], ['control [[[8, 25], [4, 191], [3, 238], [8, 25]], 4]', [[[8, 25], [4, 191], [3, 238], [8, 25]], 4], None]], [['regression [[[1, 191], [5, 97], [3, 23], [1, 192]], 3]', [[[1, 191], [5, 97], [3, 23], [1, 192]], 3], None], ['regression [[[1, 224], [5, 68], [4, 8], [1, 225]], 3]', [[[1, 224], [5, 68], [4, 8], [1, 225]], 3], None], ['partial-repair [[[1, 7], [1, 7], [2, 9]], 2]', [[[1, 7], [1, 7], [2, 9]], 2], [7, 9]], ['control [[[8, 282], [4, 448], [3, 495], [1, 285]], 4]', [[[8, 282], [4, 448], [3, 495], [1, 285]], 4], [28, 103, 238, 191]], ['control [[[4, 14], [5, 158], [7, 75], [8, 90]], 4]', [[[4, 14], [5, 158], [7, 75], [8, 90]], 4], [215, 35, 99, 14]], ['control [[[4, 14], [5, 158], [7, 75], [8, 90], [1, 215]], 4]', [[[4, 14], [5, 158], [7, 75], [8, 90], [1, 215]], 4], [215, 35, 99, 14]], ['control [[[4, 14], [5, 158], [7, 75], [4, 14]], 4]', [[[4, 14], [5, 158], [7, 75], [4, 14]], 4], None], ['control [[[4, 271], [5, 415], [7, 332], [8, 347]], 4]', [[[4, 271], [5, 415], [7, 332], [8, 347]], 4], [215, 35, 99, 14]]], [['regression [[[4, 14], [5, 158], [7, 75], [8, 90], [4, 15]], 4]', [[[4, 14], [5, 158], [7, 75], [8, 90], [4, 15]], 4], None], ['regression [[[4, 122], [1, 54], [2, 149], [5, 153], [3, 70], [4, 123]], 5]', [[[4, 122], [1, 54], [2, 149], [5, 153], [3, 70], [4, 123]], 5], None], ['partial-repair [[[1, 7], [1, 7], [2, 9]], 2]', [[[1, 7], [1, 7], [2, 9]], 2], [7, 9]], ['control [[[4, 122], [1, 54], [2, 149], [5, 153], [3, 70]], 5]', [[[4, 122], [1, 54], [2, 149], [5, 153], [3, 70]], 5], [54, 149, 70, 122, 153]], ['control [[[4, 122], [1, 54], [2, 149], [5, 153], [3, 70], [8, 226]], 5]', [[[4, 122], [1, 54], [2, 149], [5, 153], [3, 70], [8, 226]], 5], [54, 149, 70, 122, 153]], ['control [[[4, 122], [1, 54], [2, 149], [5, 153], [4, 122]], 5]', [[[4, 122], [1, 54], [2, 149], [5, 153], [4, 122]], 5], None], ['control [[[4, 379], [1, 311], [2, 406], [5, 410], [3, 327]], 5]', [[[4, 379], [1, 311], [2, 406], [5, 410], [3, 327]], 5], [54, 149, 70, 122, 153]], ['control [[[4, 127], [5, 207]], 2]', [[[4, 127], [5, 207]], 2], [144, 224]]]]\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":"b06e5379ba3354c956f9015b0be7cfec428bec962e382644f417c0f8ffcf6239","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(shares, k):\n    p = 257\n    pts = {}\n    for x, y in shares:\n        pts[x] = y % p\n    if len(pts) < k:\n        return None\n    use = sorted(pts.items())[:k]\n    out = []\n    for t in range(1, k + 1):\n        total = 0\n        for i, (xi, yi) in enumerate(use):\n            num, den = 1, 1\n            for j, (xj, _) in enumerate(use):\n                if j != i:\n                    num = num * (t - xj) % p\n                    den = den * (xi - xj) % p\n            total = (total + yi * num * pow(den, p - 2, p)) % p\n        out.append(total)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [[[1, 195], [2, 163], [1, 196]], 2]', [[[1, 195], [2, 163], [1, 196]], 2], None], ['regression [[[1, 191], [5, 97], [3, 23], [1, 192]], 3]', [[[1, 191], [5, 97], [3, 23], [1, 192]], 3], None], ['partial-repair [[[1, 7], [1, 7], [2, 9]], 2]', [[[1, 7], [1, 7], [2, 9]], 2], [7, 9]], ['control [[[1, 195], [2, 163]], 2]', [[[1, 195], [2, 163]], 2], [195, 163]], ['control [[[1, 195], [2, 163], [6, 35]], 2]', [[[1, 195], [2, 163], [6, 35]], 2], [195, 163]], ['control [[[1, 195], [1, 195]], 2]', [[[1, 195], [1, 195]], 2], None], ['control [[[1, 452], [2, 420]], 2]', [[[1, 452], [2, 420]], 2], [195, 163]], ['control [[[1, 191], [5, 97], [3, 23]], 3]', [[[1, 191], [5, 97], [3, 23]], 3], [191, 141, 23]]], [['regression [[[8, 25], [4, 191], [3, 238], [1, 28], [8, 26]], 4]', [[[8, 25], [4, 191], [3, 238], [1, 28], [8, 26]], 4], None], ['regression [[[4, 14], [5, 158], [7, 75], [8, 90], [4, 15]], 4]', [[[4, 14], [5, 158], [7, 75], [8, 90], [4, 15]], 4], None], ['partial-repair [[[1, 7], [1, 7], [2, 9]], 2]', [[[1, 7], [1, 7], [2, 9]], 2], [7, 9]], ['control [[[1, 191], [5, 97], [3, 23], [4, 94]], 3]', [[[1, 191], [5, 97], [3, 23], [4, 94]], 3], [191, 141, 23]], ['control [[[1, 191], [5, 97], [1, 191]], 3]', [[[1, 191], [5, 97], [1, 191]], 3], None], ['control [[[1, 448], [5, 354], [3, 280]], 3]', [[[1, 448], [5, 354], [3, 280]], 3], [191, 141, 23]], ['control [[[1, 224], [5, 68], [4, 8]], 3]', [[[1, 224], [5, 68], [4, 8]], 3], [224, 86, 14]], ['control [[[1, 224], [5, 68], [4, 8], [6, 194]], 3]', [[[1, 224], [5, 68], [4, 8], [6, 194]], 3], [224, 86, 14]]], [['regression [[[4, 127], [5, 207], [4, 128]], 2]', [[[4, 127], [5, 207], [4, 128]], 2], None], ['regression [[[1, 88], [7, 101], [3, 242], [1, 89]], 3]', [[[1, 88], [7, 101], [3, 242], [1, 89]], 3], None], ['partial-repair [[[1, 7], [1, 7], [2, 9]], 2]', [[[1, 7], [1, 7], [2, 9]], 2], [7, 9]], ['control [[[1, 224], [5, 68], [1, 224]], 3]', [[[1, 224], [5, 68], [1, 224]], 3], None], ['control [[[1, 481], [5, 325], [4, 265]], 3]', [[[1, 481], [5, 325], [4, 265]], 3], [224, 86, 14]], ['control [[[8, 25], [4, 191], [3, 238], [1, 28]], 4]', [[[8, 25], [4, 191], [3, 238], [1, 28]], 4], [28, 103, 238, 191]], ['control [[[8, 25], [4, 191], [3, 238], [1, 28], [7, 136]], 4]', [[[8, 25], [4, 191], [3, 238], [1, 28], [7, 136]], 4], [28, 103, 238, 191]], ['control [[[8, 25], [4, 191], [3, 238], [8, 25]], 4]', [[[8, 25], [4, 191], [3, 238], [8, 25]], 4], None]], [['regression [[[1, 191], [5, 97], [3, 23], [1, 192]], 3]', [[[1, 191], [5, 97], [3, 23], [1, 192]], 3], None], ['regression [[[1, 224], [5, 68], [4, 8], [1, 225]], 3]', [[[1, 224], [5, 68], [4, 8], [1, 225]], 3], None], ['partial-repair [[[1, 7], [1, 7], [2, 9]], 2]', [[[1, 7], [1, 7], [2, 9]], 2], [7, 9]], ['control [[[8, 282], [4, 448], [3, 495], [1, 285]], 4]', [[[8, 282], [4, 448], [3, 495], [1, 285]], 4], [28, 103, 238, 191]], ['control [[[4, 14], [5, 158], [7, 75], [8, 90]], 4]', [[[4, 14], [5, 158], [7, 75], [8, 90]], 4], [215, 35, 99, 14]], ['control [[[4, 14], [5, 158], [7, 75], [8, 90], [1, 215]], 4]', [[[4, 14], [5, 158], [7, 75], [8, 90], [1, 215]], 4], [215, 35, 99, 14]], ['control [[[4, 14], [5, 158], [7, 75], [4, 14]], 4]', [[[4, 14], [5, 158], [7, 75], [4, 14]], 4], None], ['control [[[4, 271], [5, 415], [7, 332], [8, 347]], 4]', [[[4, 271], [5, 415], [7, 332], [8, 347]], 4], [215, 35, 99, 14]]], [['regression [[[4, 14], [5, 158], [7, 75], [8, 90], [4, 15]], 4]', [[[4, 14], [5, 158], [7, 75], [8, 90], [4, 15]], 4], None], ['regression [[[4, 122], [1, 54], [2, 149], [5, 153], [3, 70], [4, 123]], 5]', [[[4, 122], [1, 54], [2, 149], [5, 153], [3, 70], [4, 123]], 5], None], ['partial-repair [[[1, 7], [1, 7], [2, 9]], 2]', [[[1, 7], [1, 7], [2, 9]], 2], [7, 9]], ['control [[[4, 122], [1, 54], [2, 149], [5, 153], [3, 70]], 5]', [[[4, 122], [1, 54], [2, 149], [5, 153], [3, 70]], 5], [54, 149, 70, 122, 153]], ['control [[[4, 122], [1, 54], [2, 149], [5, 153], [3, 70], [8, 226]], 5]', [[[4, 122], [1, 54], [2, 149], [5, 153], [3, 70], [8, 226]], 5], [54, 149, 70, 122, 153]], ['control [[[4, 122], [1, 54], [2, 149], [5, 153], [4, 122]], 5]', [[[4, 122], [1, 54], [2, 149], [5, 153], [4, 122]], 5], None], ['control [[[4, 379], [1, 311], [2, 406], [5, 410], [3, 327]], 5]', [[[4, 379], [1, 311], [2, 406], [5, 410], [3, 327]], 5], [54, 149, 70, 122, 153]], ['control [[[4, 127], [5, 207]], 2]', [[[4, 127], [5, 207]], 2], [144, 224]]]]\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, bounded teaching model of the named code under the stated contract; not a production codec. 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-error_correcting_codes-rs-erasure-gf257-duplicate-shares","generated_at":"2026-09-29T14:48:36.759961+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Distributed storage rebuilds lost data fragments from any k surviving fragments.","root_cause":"Shares with the same x are stored last-wins without checking agreement.","sha256":"b776b987708eb32f0ddb671936fe18186b204a0fc7abf81976a08ad1ffd8058d","title":"RS erasure recovery lets a conflicting duplicate overwrite a share · 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":39.808,"exit_code":1,"observations":[{"actual":null,"check":"regression [[[1, 195], [2, 163], [1, 196]], 2]","expected":null,"passed":true},{"actual":null,"check":"regression [[[1, 191], [5, 97], [3, 23], [1, 192]], 3]","expected":null,"passed":true},{"actual":null,"check":"partial-repair [[[1, 7], [1, 7], [2, 9]], 2]","expected":[7,9],"passed":false},{"actual":[195,163],"check":"control [[[1, 195], [2, 163]], 2]","expected":[195,163],"passed":true},{"actual":[195,163],"check":"control [[[1, 195], [2, 163], [6, 35]], 2]","expected":[195,163],"passed":true},{"actual":null,"check":"control [[[1, 195], [1, 195]], 2]","expected":null,"passed":true},{"actual":[195,163],"check":"control [[[1, 452], [2, 420]], 2]","expected":[195,163],"passed":true},{"actual":[191,141,23],"check":"control [[[1, 191], [5, 97], [3, 23]], 3]","expected":[191,141,23],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [[[1, 195], [2, 163], [1, 196]], 2]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"regression [[[1, 191], [5, 97], [3, 23], [1, 192]], 3]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"partial-repair [[[1, 7], [1, 7], [2, 9]], 2]\", \"actual\": null, \"expected\": [7, 9], \"passed\": false}, {\"check\": \"control [[[1, 195], [2, 163]], 2]\", \"actual\": [195, 163], \"expected\": [195, 163], \"passed\": true}, {\"check\": \"control [[[1, 195], [2, 163], [6, 35]], 2]\", \"actual\": [195, 163], \"expected\": [195, 163], \"passed\": true}, {\"check\": \"control [[[1, 195], [1, 195]], 2]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [[[1, 452], [2, 420]], 2]\", \"actual\": [195, 163], \"expected\": [195, 163], \"passed\": true}, {\"check\": \"control [[[1, 191], [5, 97], [3, 23]], 3]\", \"actual\": [191, 141, 23], \"expected\": [191, 141, 23], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.421,"exit_code":1,"observations":[{"actual":[196,163],"check":"regression [[[1, 195], [2, 163], [1, 196]], 2]","expected":null,"passed":false},{"actual":[192,45,23],"check":"regression [[[1, 191], [5, 97], [3, 23], [1, 192]], 3]","expected":null,"passed":false},{"actual":[7,9],"check":"partial-repair [[[1, 7], [1, 7], [2, 9]], 2]","expected":[7,9],"passed":true},{"actual":[195,163],"check":"control [[[1, 195], [2, 163]], 2]","expected":[195,163],"passed":true},{"actual":[195,163],"check":"control [[[1, 195], [2, 163], [6, 35]], 2]","expected":[195,163],"passed":true},{"actual":null,"check":"control [[[1, 195], [1, 195]], 2]","expected":null,"passed":true},{"actual":[195,163],"check":"control [[[1, 452], [2, 420]], 2]","expected":[195,163],"passed":true},{"actual":[191,141,23],"check":"control [[[1, 191], [5, 97], [3, 23]], 3]","expected":[191,141,23],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [[[1, 195], [2, 163], [1, 196]], 2]\", \"actual\": [196, 163], \"expected\": null, \"passed\": false}, {\"check\": \"regression [[[1, 191], [5, 97], [3, 23], [1, 192]], 3]\", \"actual\": [192, 45, 23], \"expected\": null, \"passed\": false}, {\"check\": \"partial-repair [[[1, 7], [1, 7], [2, 9]], 2]\", \"actual\": [7, 9], \"expected\": [7, 9], \"passed\": true}, {\"check\": \"control [[[1, 195], [2, 163]], 2]\", \"actual\": [195, 163], \"expected\": [195, 163], \"passed\": true}, {\"check\": \"control [[[1, 195], [2, 163], [6, 35]], 2]\", \"actual\": [195, 163], \"expected\": [195, 163], \"passed\": true}, {\"check\": \"control [[[1, 195], [1, 195]], 2]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [[[1, 452], [2, 420]], 2]\", \"actual\": [195, 163], \"expected\": [195, 163], \"passed\": true}, {\"check\": \"control [[[1, 191], [5, 97], [3, 23]], 3]\", \"actual\": [191, 141, 23], \"expected\": [191, 141, 23], \"passed\": true}], \"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."}}