{"abstract":"Q-based rebuilds return wrong bytes.","category":"Error-correcting codes","checks":8,"contract":"Recover one missing data block of a RAID-6 stripe over GF(2^8) (0x11D). data has exactly one None (else None is returned). P = XOR of data; Q = sum of g^k * D_k with g = 2 and k the 0-based disk index. Use P when it is available; otherwise rebuild D_i = (Q + sum over present k of g^k D_k) * g^(-i); if neither is available return None.","evaluation_group":"w2-error_correcting_codes-raid6-q-recovery","failed_approach":"Also shifting the inverse exponent keeps the reconstruction inconsistent with the stored Q.","family":"w2-error_correcting_codes-raid6-q-recovery-generator-index","id":"FA-72046","implementations":{"attempt":{"sha256":"421736afac95310fae54db7911fd45912d6e90b5b3b97183d351e79a63f4ad1a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(data, p, q):\n    EXP, LOG = [0] * 512, [0] * 256\n    x = 1\n    for i in range(255):\n        EXP[i] = EXP[i + 255] = x\n        LOG[x] = i\n        x <<= 1\n        if x & 0x100:\n            x ^= 0x11D\n    def mul(a, b):\n        return 0 if a == 0 or b == 0 else EXP[LOG[a] + LOG[b]]\n    \n    if data.count(None) != 1:\n        return None\n    i = data.index(None)\n    if p is not None:\n        x = p\n        for v in data:\n            if v is not None:\n                x ^= v\n        return x\n    if q is None:\n        return None\n    x = q\n    for k, v in enumerate(data):\n        if v is not None:\n            x ^= mul(EXP[k + 1], v)\n    return mul(x, EXP[(254 - i) % 255])\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [[111, null], null, 186]', [[111, None], None, 186], 228], ['regression [[61, null, 139], null, 236]', [[61, None, 139], None, 236], 237], ['control [[61, null, 139], 91, 236]', [[61, None, 139], 91, 236], 237], ['control [[10, 11, null, 231, 194, 75], 177, 1]', [[10, 11, None, 231, 194, 75], 177, 1], 222], ['control [[220, 10, null], 58, 95]', [[220, 10, None], 58, 95], 236], ['control [[114, null, 163, 119, 100, 76], 199, 178]', [[114, None, 163, 119, 100, 76], 199, 178], 73], ['control [[1, 2], null, 3]', [[1, 2], None, 3], None], ['control [[null, null], 1, 2]', [[None, None], 1, 2], None]], [['regression [[104, 202, 220, 113, null], null, 38]', [[104, 202, 220, 113, None], None, 38], 191], ['regression [[10, 11, null, 231, 194, 75], null, 1]', [[10, 11, None, 231, 194, 75], None, 1], 222], ['control [[null, null], 1, 2]', [[None, None], 1, 2], None], ['control [[4, null], null, null]', [[4, None], None, None], None], ['control [[61, null, 139], 91, 236]', [[61, None, 139], 91, 236], 237], ['control [[10, 11, null, 231, 194, 75], 177, 1]', [[10, 11, None, 231, 194, 75], 177, 1], 222], ['control [[220, 10, null], 58, 95]', [[220, 10, None], 58, 95], 236], ['control [[114, null, 163, 119, 100, 76], 199, 178]', [[114, None, 163, 119, 100, 76], 199, 178], 73]], [['regression [[220, 10, null], null, 95]', [[220, 10, None], None, 95], 236], ['regression [[68, 12, null, 209], null, 47]', [[68, 12, None, 209], None, 47], 106], ['control [[114, null, 163, 119, 100, 76], 199, 178]', [[114, None, 163, 119, 100, 76], 199, 178], 73], ['control [[1, 2], null, 3]', [[1, 2], None, 3], None], ['control [[null, null], 1, 2]', [[None, None], 1, 2], None], ['control [[4, null], null, null]', [[4, None], None, None], None], ['control [[61, null, 139], 91, 236]', [[61, None, 139], 91, 236], 237], ['control [[10, 11, null, 231, 194, 75], 177, 1]', [[10, 11, None, 231, 194, 75], 177, 1], 222]], [['regression [[114, null, 163, 119, 100, 76], null, 178]', [[114, None, 163, 119, 100, 76], None, 178], 73], ['regression [[130, 12, 210, 57, null, 52, 76], null, 198]', [[130, 12, 210, 57, None, 52, 76], None, 198], 161], ['control [[10, 11, null, 231, 194, 75], 177, 1]', [[10, 11, None, 231, 194, 75], 177, 1], 222], ['control [[220, 10, null], 58, 95]', [[220, 10, None], 58, 95], 236], ['control [[114, null, 163, 119, 100, 76], 199, 178]', [[114, None, 163, 119, 100, 76], 199, 178], 73], ['control [[1, 2], null, 3]', [[1, 2], None, 3], None], ['control [[null, null], 1, 2]', [[None, None], 1, 2], None], ['control [[4, null], null, null]', [[4, None], None, None], None]], [['regression [[null, 5], null, 7]', [[None, 5], None, 7], 13], ['regression [[111, null], null, 186]', [[111, None], None, 186], 228], ['partial-repair [[null], null, 9]', [[None], None, 9], 9], ['control [[4, null], null, null]', [[4, None], None, None], None], ['control [[61, null, 139], 91, 236]', [[61, None, 139], 91, 236], 237], ['control [[10, 11, null, 231, 194, 75], 177, 1]', [[10, 11, None, 231, 194, 75], 177, 1], 222], ['control [[220, 10, null], 58, 95]', [[220, 10, None], 58, 95], 236], ['control [[114, null, 163, 119, 100, 76], 199, 178]', [[114, None, 163, 119, 100, 76], 199, 178], 73]]]\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":"31c733934eab7176b92163fc8a2b1518e2d211c973fcaf26d0f75943fde96005","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(data, p, q):\n    EXP, LOG = [0] * 512, [0] * 256\n    x = 1\n    for i in range(255):\n        EXP[i] = EXP[i + 255] = x\n        LOG[x] = i\n        x <<= 1\n        if x & 0x100:\n            x ^= 0x11D\n    def mul(a, b):\n        return 0 if a == 0 or b == 0 else EXP[LOG[a] + LOG[b]]\n    \n    if data.count(None) != 1:\n        return None\n    i = data.index(None)\n    if p is not None:\n        x = p\n        for v in data:\n            if v is not None:\n                x ^= v\n        return x\n    if q is None:\n        return None\n    x = q\n    for k, v in enumerate(data):\n        if v is not None:\n            x ^= mul(EXP[k + 1], v)\n    return mul(x, EXP[(255 - i) % 255])\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [[111, null], null, 186]', [[111, None], None, 186], 228], ['regression [[61, null, 139], null, 236]', [[61, None, 139], None, 236], 237], ['control [[61, null, 139], 91, 236]', [[61, None, 139], 91, 236], 237], ['control [[10, 11, null, 231, 194, 75], 177, 1]', [[10, 11, None, 231, 194, 75], 177, 1], 222], ['control [[220, 10, null], 58, 95]', [[220, 10, None], 58, 95], 236], ['control [[114, null, 163, 119, 100, 76], 199, 178]', [[114, None, 163, 119, 100, 76], 199, 178], 73], ['control [[1, 2], null, 3]', [[1, 2], None, 3], None], ['control [[null, null], 1, 2]', [[None, None], 1, 2], None]], [['regression [[104, 202, 220, 113, null], null, 38]', [[104, 202, 220, 113, None], None, 38], 191], ['regression [[10, 11, null, 231, 194, 75], null, 1]', [[10, 11, None, 231, 194, 75], None, 1], 222], ['control [[null, null], 1, 2]', [[None, None], 1, 2], None], ['control [[4, null], null, null]', [[4, None], None, None], None], ['control [[61, null, 139], 91, 236]', [[61, None, 139], 91, 236], 237], ['control [[10, 11, null, 231, 194, 75], 177, 1]', [[10, 11, None, 231, 194, 75], 177, 1], 222], ['control [[220, 10, null], 58, 95]', [[220, 10, None], 58, 95], 236], ['control [[114, null, 163, 119, 100, 76], 199, 178]', [[114, None, 163, 119, 100, 76], 199, 178], 73]], [['regression [[220, 10, null], null, 95]', [[220, 10, None], None, 95], 236], ['regression [[68, 12, null, 209], null, 47]', [[68, 12, None, 209], None, 47], 106], ['control [[114, null, 163, 119, 100, 76], 199, 178]', [[114, None, 163, 119, 100, 76], 199, 178], 73], ['control [[1, 2], null, 3]', [[1, 2], None, 3], None], ['control [[null, null], 1, 2]', [[None, None], 1, 2], None], ['control [[4, null], null, null]', [[4, None], None, None], None], ['control [[61, null, 139], 91, 236]', [[61, None, 139], 91, 236], 237], ['control [[10, 11, null, 231, 194, 75], 177, 1]', [[10, 11, None, 231, 194, 75], 177, 1], 222]], [['regression [[114, null, 163, 119, 100, 76], null, 178]', [[114, None, 163, 119, 100, 76], None, 178], 73], ['regression [[130, 12, 210, 57, null, 52, 76], null, 198]', [[130, 12, 210, 57, None, 52, 76], None, 198], 161], ['control [[10, 11, null, 231, 194, 75], 177, 1]', [[10, 11, None, 231, 194, 75], 177, 1], 222], ['control [[220, 10, null], 58, 95]', [[220, 10, None], 58, 95], 236], ['control [[114, null, 163, 119, 100, 76], 199, 178]', [[114, None, 163, 119, 100, 76], 199, 178], 73], ['control [[1, 2], null, 3]', [[1, 2], None, 3], None], ['control [[null, null], 1, 2]', [[None, None], 1, 2], None], ['control [[4, null], null, null]', [[4, None], None, None], None]], [['regression [[null, 5], null, 7]', [[None, 5], None, 7], 13], ['regression [[111, null], null, 186]', [[111, None], None, 186], 228], ['partial-repair [[null], null, 9]', [[None], None, 9], 9], ['control [[4, null], null, null]', [[4, None], None, None], None], ['control [[61, null, 139], 91, 236]', [[61, None, 139], 91, 236], 237], ['control [[10, 11, null, 231, 194, 75], 177, 1]', [[10, 11, None, 231, 194, 75], 177, 1], 222], ['control [[220, 10, null], 58, 95]', [[220, 10, None], 58, 95], 236], ['control [[114, null, 163, 119, 100, 76], 199, 178]', [[114, None, 163, 119, 100, 76], 199, 178], 73]]]\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"},"fixed":{"sha256":"5169bdccd7b640e1949432d1b5993cc0b633525bf15317e06c155af6767718db","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(data, p, q):\n    EXP, LOG = [0] * 512, [0] * 256\n    x = 1\n    for i in range(255):\n        EXP[i] = EXP[i + 255] = x\n        LOG[x] = i\n        x <<= 1\n        if x & 0x100:\n            x ^= 0x11D\n    def mul(a, b):\n        return 0 if a == 0 or b == 0 else EXP[LOG[a] + LOG[b]]\n    \n    if data.count(None) != 1:\n        return None\n    i = data.index(None)\n    if p is not None:\n        x = p\n        for v in data:\n            if v is not None:\n                x ^= v\n        return x\n    if q is None:\n        return None\n    x = q\n    for k, v in enumerate(data):\n        if v is not None:\n            x ^= mul(EXP[k], v)\n    return mul(x, EXP[(255 - i) % 255])\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [[111, null], null, 186]', [[111, None], None, 186], 228], ['regression [[61, null, 139], null, 236]', [[61, None, 139], None, 236], 237], ['control [[61, null, 139], 91, 236]', [[61, None, 139], 91, 236], 237], ['control [[10, 11, null, 231, 194, 75], 177, 1]', [[10, 11, None, 231, 194, 75], 177, 1], 222], ['control [[220, 10, null], 58, 95]', [[220, 10, None], 58, 95], 236], ['control [[114, null, 163, 119, 100, 76], 199, 178]', [[114, None, 163, 119, 100, 76], 199, 178], 73], ['control [[1, 2], null, 3]', [[1, 2], None, 3], None], ['control [[null, null], 1, 2]', [[None, None], 1, 2], None]], [['regression [[104, 202, 220, 113, null], null, 38]', [[104, 202, 220, 113, None], None, 38], 191], ['regression [[10, 11, null, 231, 194, 75], null, 1]', [[10, 11, None, 231, 194, 75], None, 1], 222], ['control [[null, null], 1, 2]', [[None, None], 1, 2], None], ['control [[4, null], null, null]', [[4, None], None, None], None], ['control [[61, null, 139], 91, 236]', [[61, None, 139], 91, 236], 237], ['control [[10, 11, null, 231, 194, 75], 177, 1]', [[10, 11, None, 231, 194, 75], 177, 1], 222], ['control [[220, 10, null], 58, 95]', [[220, 10, None], 58, 95], 236], ['control [[114, null, 163, 119, 100, 76], 199, 178]', [[114, None, 163, 119, 100, 76], 199, 178], 73]], [['regression [[220, 10, null], null, 95]', [[220, 10, None], None, 95], 236], ['regression [[68, 12, null, 209], null, 47]', [[68, 12, None, 209], None, 47], 106], ['control [[114, null, 163, 119, 100, 76], 199, 178]', [[114, None, 163, 119, 100, 76], 199, 178], 73], ['control [[1, 2], null, 3]', [[1, 2], None, 3], None], ['control [[null, null], 1, 2]', [[None, None], 1, 2], None], ['control [[4, null], null, null]', [[4, None], None, None], None], ['control [[61, null, 139], 91, 236]', [[61, None, 139], 91, 236], 237], ['control [[10, 11, null, 231, 194, 75], 177, 1]', [[10, 11, None, 231, 194, 75], 177, 1], 222]], [['regression [[114, null, 163, 119, 100, 76], null, 178]', [[114, None, 163, 119, 100, 76], None, 178], 73], ['regression [[130, 12, 210, 57, null, 52, 76], null, 198]', [[130, 12, 210, 57, None, 52, 76], None, 198], 161], ['control [[10, 11, null, 231, 194, 75], 177, 1]', [[10, 11, None, 231, 194, 75], 177, 1], 222], ['control [[220, 10, null], 58, 95]', [[220, 10, None], 58, 95], 236], ['control [[114, null, 163, 119, 100, 76], 199, 178]', [[114, None, 163, 119, 100, 76], 199, 178], 73], ['control [[1, 2], null, 3]', [[1, 2], None, 3], None], ['control [[null, null], 1, 2]', [[None, None], 1, 2], None], ['control [[4, null], null, null]', [[4, None], None, None], None]], [['regression [[null, 5], null, 7]', [[None, 5], None, 7], 13], ['regression [[111, null], null, 186]', [[111, None], None, 186], 228], ['partial-repair [[null], null, 9]', [[None], None, 9], 9], ['control [[4, null], null, null]', [[4, None], None, None], None], ['control [[61, null, 139], 91, 236]', [[61, None, 139], 91, 236], 237], ['control [[10, 11, null, 231, 194, 75], 177, 1]', [[10, 11, None, 231, 194, 75], 177, 1], 222], ['control [[220, 10, null], 58, 95]', [[220, 10, None], 58, 95], 236], ['control [[114, null, 163, 119, 100, 76], 199, 178]', [[114, None, 163, 119, 100, 76], 199, 178], 73]]]\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-raid6-q-recovery-generator-index","generated_at":"2026-09-29T14:48:34.969670+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Dual-parity arrays rebuild a data disk from the Q syndrome when the P disk has also failed.","repair":"Weight disk k by g^k, matching how Q was written.","root_cause":"The partial Q sum weights present disks by g^(k+1) (1-based disks).","sha256":"3fb6d3f681217a75c965973aaf7dc226dc518be7a4242f07c05e693945d1acab","title":"RAID-6 weights disks by g to the power k plus one · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.314,"exit_code":1,"observations":[{"actual":25,"check":"regression [[111, null], null, 186]","expected":228,"passed":false},{"actual":160,"check":"regression [[61, null, 139], null, 236]","expected":237,"passed":false},{"actual":237,"check":"control [[61, null, 139], 91, 236]","expected":237,"passed":true},{"actual":222,"check":"control [[10, 11, null, 231, 194, 75], 177, 1]","expected":222,"passed":true},{"actual":236,"check":"control [[220, 10, null], 58, 95]","expected":236,"passed":true},{"actual":73,"check":"control [[114, null, 163, 119, 100, 76], 199, 178]","expected":73,"passed":true},{"actual":null,"check":"control [[1, 2], null, 3]","expected":null,"passed":true},{"actual":null,"check":"control [[null, null], 1, 2]","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [[111, null], null, 186]\", \"actual\": 25, \"expected\": 228, \"passed\": false}, {\"check\": \"regression [[61, null, 139], null, 236]\", \"actual\": 160, \"expected\": 237, \"passed\": false}, {\"check\": \"control [[61, null, 139], 91, 236]\", \"actual\": 237, \"expected\": 237, \"passed\": true}, {\"check\": \"control [[10, 11, null, 231, 194, 75], 177, 1]\", \"actual\": 222, \"expected\": 222, \"passed\": true}, {\"check\": \"control [[220, 10, null], 58, 95]\", \"actual\": 236, \"expected\": 236, \"passed\": true}, {\"check\": \"control [[114, null, 163, 119, 100, 76], 199, 178]\", \"actual\": 73, \"expected\": 73, \"passed\": true}, {\"check\": \"control [[1, 2], null, 3]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [[null, null], 1, 2]\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":37.053,"exit_code":1,"observations":[{"actual":50,"check":"regression [[111, null], null, 186]","expected":228,"passed":false},{"actual":93,"check":"regression [[61, null, 139], null, 236]","expected":237,"passed":false},{"actual":237,"check":"control [[61, null, 139], 91, 236]","expected":237,"passed":true},{"actual":222,"check":"control [[10, 11, null, 231, 194, 75], 177, 1]","expected":222,"passed":true},{"actual":236,"check":"control [[220, 10, null], 58, 95]","expected":236,"passed":true},{"actual":73,"check":"control [[114, null, 163, 119, 100, 76], 199, 178]","expected":73,"passed":true},{"actual":null,"check":"control [[1, 2], null, 3]","expected":null,"passed":true},{"actual":null,"check":"control [[null, null], 1, 2]","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [[111, null], null, 186]\", \"actual\": 50, \"expected\": 228, \"passed\": false}, {\"check\": \"regression [[61, null, 139], null, 236]\", \"actual\": 93, \"expected\": 237, \"passed\": false}, {\"check\": \"control [[61, null, 139], 91, 236]\", \"actual\": 237, \"expected\": 237, \"passed\": true}, {\"check\": \"control [[10, 11, null, 231, 194, 75], 177, 1]\", \"actual\": 222, \"expected\": 222, \"passed\": true}, {\"check\": \"control [[220, 10, null], 58, 95]\", \"actual\": 236, \"expected\": 236, \"passed\": true}, {\"check\": \"control [[114, null, 163, 119, 100, 76], 199, 178]\", \"actual\": 73, \"expected\": 73, \"passed\": true}, {\"check\": \"control [[1, 2], null, 3]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [[null, null], 1, 2]\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.406,"exit_code":0,"observations":[{"actual":228,"check":"regression [[111, null], null, 186]","expected":228,"passed":true},{"actual":237,"check":"regression [[61, null, 139], null, 236]","expected":237,"passed":true},{"actual":237,"check":"control [[61, null, 139], 91, 236]","expected":237,"passed":true},{"actual":222,"check":"control [[10, 11, null, 231, 194, 75], 177, 1]","expected":222,"passed":true},{"actual":236,"check":"control [[220, 10, null], 58, 95]","expected":236,"passed":true},{"actual":73,"check":"control [[114, null, 163, 119, 100, 76], 199, 178]","expected":73,"passed":true},{"actual":null,"check":"control [[1, 2], null, 3]","expected":null,"passed":true},{"actual":null,"check":"control [[null, null], 1, 2]","expected":null,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [[111, null], null, 186]\", \"actual\": 228, \"expected\": 228, \"passed\": true}, {\"check\": \"regression [[61, null, 139], null, 236]\", \"actual\": 237, \"expected\": 237, \"passed\": true}, {\"check\": \"control [[61, null, 139], 91, 236]\", \"actual\": 237, \"expected\": 237, \"passed\": true}, {\"check\": \"control [[10, 11, null, 231, 194, 75], 177, 1]\", \"actual\": 222, \"expected\": 222, \"passed\": true}, {\"check\": \"control [[220, 10, null], 58, 95]\", \"actual\": 236, \"expected\": 236, \"passed\": true}, {\"check\": \"control [[114, null, 163, 119, 100, 76], 199, 178]\", \"actual\": 73, \"expected\": 73, \"passed\": true}, {\"check\": \"control [[1, 2], null, 3]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [[null, null], 1, 2]\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}