{"abstract":"Only palindromic payloads produce correct check digits.","category":"Check-digit algorithms","checks":8,"contract":"Verhoeff dihedral-group scheme. mode \"generate\" returns the check digit for a nonempty ASCII digit payload; mode \"validate\" returns whether a nonempty digit string ending in its check digit is correct. Digits are processed from the right with permutation P[(i + offset) % 8], offset 1 when generating and 0 when validating; the check digit is the dihedral inverse of the final state. Empty or non-digit input returns None.","contract_signature":"s, mode","evaluation_group":"w2-check_digit_algorithms-verhoeff","failed_approach":"Reversing but starting enumerate at 1 double-counts the offset and shifts every permutation by one.","family":"w2-check_digit_algorithms-verhoeff-processing-direction","id":"FA-72391","implementations":{"attempt":{"sha256":"b7c0d00a8edca88045291f557027b9d6c80ede0d515f7108ce232e7b5e46c127","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s, mode):\n    D = [[0,1,2,3,4,5,6,7,8,9],[1,2,3,4,0,6,7,8,9,5],[2,3,4,0,1,7,8,9,5,6],[3,4,0,1,2,8,9,5,6,7],[4,0,1,2,3,9,5,6,7,8],[5,9,8,7,6,0,4,3,2,1],[6,5,9,8,7,1,0,4,3,2],[7,6,5,9,8,2,1,0,4,3],[8,7,6,5,9,3,2,1,0,4],[9,8,7,6,5,4,3,2,1,0]]\n    P = [[0,1,2,3,4,5,6,7,8,9],[1,5,7,6,2,8,3,0,9,4],[5,8,0,3,7,9,6,1,4,2],[8,9,1,6,0,4,3,5,2,7],[9,4,5,3,1,2,8,7,6,0],[4,2,8,6,5,7,3,9,0,1],[2,7,9,3,8,0,6,4,1,5],[7,0,4,6,9,1,3,2,5,8]]\n    INV = [0,4,3,2,1,5,6,7,8,9]\n    if not s or not s.isascii() or not s.isdigit():\n        return None\n    offset = 1 if mode == 'generate' else 0\n    c = 0\n    for i, ch in enumerate(reversed(s), 1):\n        c = D[c][P[(i + offset) % 8][int(ch)]]\n    if mode == 'generate':\n        return INV[c]\n    return c == 0\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"12\", \"generate\"]', ['12', 'generate'], 1], ['regression [\"600\", \"generate\"]', ['600', 'generate'], 8], ['partial-repair [\"7\", \"generate\"]', ['7', 'generate'], 0], ['control [\"73\", \"validate\"]', ['73', 'validate'], False], ['control [\"123\", \"validate\"]', ['123', 'validate'], False], ['control [\"317230\", \"validate\"]', ['317230', 'validate'], False], ['control [\"2864257569\", \"validate\"]', ['2864257569', 'validate'], False], ['control [\"426688793324\", \"validate\"]', ['426688793324', 'validate'], False]], [['regression [\"07668886\", \"generate\"]', ['07668886', 'generate'], 2], ['regression [\"286425756\", \"generate\"]', ['286425756', 'generate'], 2], ['partial-repair [\"6001\", \"validate\"]', ['6001', 'validate'], False], ['control [\"8115669551647\", \"validate\"]', ['8115669551647', 'validate'], False], ['control [\"6516456313406690\", \"validate\"]', ['6516456313406690', 'validate'], False], ['control [\"2364\", \"validate\"]', ['2364', 'validate'], False], ['control [\"\", \"generate\"]', ['', 'generate'], None], ['control [\"\", \"validate\"]', ['', 'validate'], None]], [['regression [\"811566955164\", \"generate\"]', ['811566955164', 'generate'], 9], ['regression [\"651645631340669\", \"generate\"]', ['651645631340669', 'generate'], 8], ['partial-repair [\"286425756\", \"generate\"]', ['286425756', 'generate'], 2], ['partial-repair [\"42668879332\", \"generate\"]', ['42668879332', 'generate'], 9], ['control [\"12a\", \"generate\"]', ['12a', 'generate'], None], ['control [\"1428572\", \"validate\"]', ['1428572', 'validate'], False], ['control [\"73\", \"validate\"]', ['73', 'validate'], False], ['control [\"123\", \"validate\"]', ['123', 'validate'], False]], [['regression [\"2363\", \"validate\"]', ['2363', 'validate'], True], ['regression [\"12345\", \"generate\"]', ['12345', 'generate'], 1], ['partial-repair [\"236\", \"generate\"]', ['236', 'generate'], 3], ['control [\"2864257569\", \"validate\"]', ['2864257569', 'validate'], False], ['control [\"426688793324\", \"validate\"]', ['426688793324', 'validate'], False], ['control [\"8115669551647\", \"validate\"]', ['8115669551647', 'validate'], False], ['control [\"6516456313406690\", \"validate\"]', ['6516456313406690', 'validate'], False], ['control [\"2364\", \"validate\"]', ['2364', 'validate'], False]], [['regression [\"142857\", \"generate\"]', ['142857', 'generate'], 0], ['regression [\"1428570\", \"validate\"]', ['1428570', 'validate'], True], ['partial-repair [\"0\", \"generate\"]', ['0', 'generate'], 4], ['partial-repair [\"0\", \"validate\"]', ['0', 'validate'], True], ['control [\"\", \"generate\"]', ['', 'generate'], None], ['control [\"\", \"validate\"]', ['', 'validate'], None], ['control [\"12a\", \"generate\"]', ['12a', 'generate'], None], ['control [\"1428572\", \"validate\"]', ['1428572', 'validate'], False]]]\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":"87d174cef4ce245bafd08d2a67177673b31fb67954c49b74a7a9ec03a57aac88","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s, mode):\n    D = [[0,1,2,3,4,5,6,7,8,9],[1,2,3,4,0,6,7,8,9,5],[2,3,4,0,1,7,8,9,5,6],[3,4,0,1,2,8,9,5,6,7],[4,0,1,2,3,9,5,6,7,8],[5,9,8,7,6,0,4,3,2,1],[6,5,9,8,7,1,0,4,3,2],[7,6,5,9,8,2,1,0,4,3],[8,7,6,5,9,3,2,1,0,4],[9,8,7,6,5,4,3,2,1,0]]\n    P = [[0,1,2,3,4,5,6,7,8,9],[1,5,7,6,2,8,3,0,9,4],[5,8,0,3,7,9,6,1,4,2],[8,9,1,6,0,4,3,5,2,7],[9,4,5,3,1,2,8,7,6,0],[4,2,8,6,5,7,3,9,0,1],[2,7,9,3,8,0,6,4,1,5],[7,0,4,6,9,1,3,2,5,8]]\n    INV = [0,4,3,2,1,5,6,7,8,9]\n    if not s or not s.isascii() or not s.isdigit():\n        return None\n    offset = 1 if mode == 'generate' else 0\n    c = 0\n    for i, ch in enumerate(s):\n        c = D[c][P[(i + offset) % 8][int(ch)]]\n    if mode == 'generate':\n        return INV[c]\n    return c == 0\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"12\", \"generate\"]', ['12', 'generate'], 1], ['regression [\"600\", \"generate\"]', ['600', 'generate'], 8], ['partial-repair [\"7\", \"generate\"]', ['7', 'generate'], 0], ['control [\"73\", \"validate\"]', ['73', 'validate'], False], ['control [\"123\", \"validate\"]', ['123', 'validate'], False], ['control [\"317230\", \"validate\"]', ['317230', 'validate'], False], ['control [\"2864257569\", \"validate\"]', ['2864257569', 'validate'], False], ['control [\"426688793324\", \"validate\"]', ['426688793324', 'validate'], False]], [['regression [\"07668886\", \"generate\"]', ['07668886', 'generate'], 2], ['regression [\"286425756\", \"generate\"]', ['286425756', 'generate'], 2], ['partial-repair [\"6001\", \"validate\"]', ['6001', 'validate'], False], ['control [\"8115669551647\", \"validate\"]', ['8115669551647', 'validate'], False], ['control [\"6516456313406690\", \"validate\"]', ['6516456313406690', 'validate'], False], ['control [\"2364\", \"validate\"]', ['2364', 'validate'], False], ['control [\"\", \"generate\"]', ['', 'generate'], None], ['control [\"\", \"validate\"]', ['', 'validate'], None]], [['regression [\"811566955164\", \"generate\"]', ['811566955164', 'generate'], 9], ['regression [\"651645631340669\", \"generate\"]', ['651645631340669', 'generate'], 8], ['partial-repair [\"286425756\", \"generate\"]', ['286425756', 'generate'], 2], ['partial-repair [\"42668879332\", \"generate\"]', ['42668879332', 'generate'], 9], ['control [\"12a\", \"generate\"]', ['12a', 'generate'], None], ['control [\"1428572\", \"validate\"]', ['1428572', 'validate'], False], ['control [\"73\", \"validate\"]', ['73', 'validate'], False], ['control [\"123\", \"validate\"]', ['123', 'validate'], False]], [['regression [\"2363\", \"validate\"]', ['2363', 'validate'], True], ['regression [\"12345\", \"generate\"]', ['12345', 'generate'], 1], ['partial-repair [\"236\", \"generate\"]', ['236', 'generate'], 3], ['control [\"2864257569\", \"validate\"]', ['2864257569', 'validate'], False], ['control [\"426688793324\", \"validate\"]', ['426688793324', 'validate'], False], ['control [\"8115669551647\", \"validate\"]', ['8115669551647', 'validate'], False], ['control [\"6516456313406690\", \"validate\"]', ['6516456313406690', 'validate'], False], ['control [\"2364\", \"validate\"]', ['2364', 'validate'], False]], [['regression [\"142857\", \"generate\"]', ['142857', 'generate'], 0], ['regression [\"1428570\", \"validate\"]', ['1428570', 'validate'], True], ['partial-repair [\"0\", \"generate\"]', ['0', 'generate'], 4], ['partial-repair [\"0\", \"validate\"]', ['0', 'validate'], True], ['control [\"\", \"generate\"]', ['', 'generate'], None], ['control [\"\", \"validate\"]', ['', 'validate'], None], ['control [\"12a\", \"generate\"]', ['12a', 'generate'], None], ['control [\"1428572\", \"validate\"]', ['1428572', 'validate'], False]]]\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 scheme under the stated contract; not a certified validator. 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-check_digit_algorithms-verhoeff-processing-direction","generated_at":"2026-09-29T14:48:38.101124+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"National identity and ticketing numbers use Verhoeff to catch all single-digit and adjacent transposition errors.","root_cause":"The loop enumerates s from the left, so permutation powers are assigned to the wrong positions.","sha256":"df5dab887976d5e57f0a6d3b035f0f055fde5716f8ad0f3ac8bc546e2dfffd51","title":"Verhoeff walks digits left to right · 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.119,"exit_code":1,"observations":[{"actual":9,"check":"regression [\"12\", \"generate\"]","expected":1,"passed":false},{"actual":5,"check":"regression [\"600\", \"generate\"]","expected":8,"passed":false},{"actual":4,"check":"partial-repair [\"7\", \"generate\"]","expected":0,"passed":false},{"actual":false,"check":"control [\"73\", \"validate\"]","expected":false,"passed":true},{"actual":false,"check":"control [\"123\", \"validate\"]","expected":false,"passed":true},{"actual":false,"check":"control [\"317230\", \"validate\"]","expected":false,"passed":true},{"actual":false,"check":"control [\"2864257569\", \"validate\"]","expected":false,"passed":true},{"actual":false,"check":"control [\"426688793324\", \"validate\"]","expected":false,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"12\\\", \\\"generate\\\"]\", \"actual\": 9, \"expected\": 1, \"passed\": false}, {\"check\": \"regression [\\\"600\\\", \\\"generate\\\"]\", \"actual\": 5, \"expected\": 8, \"passed\": false}, {\"check\": \"partial-repair [\\\"7\\\", \\\"generate\\\"]\", \"actual\": 4, \"expected\": 0, \"passed\": false}, {\"check\": \"control [\\\"73\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"123\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"317230\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"2864257569\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"426688793324\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.97,"exit_code":1,"observations":[{"actual":5,"check":"regression [\"12\", \"generate\"]","expected":1,"passed":false},{"actual":0,"check":"regression [\"600\", \"generate\"]","expected":8,"passed":false},{"actual":0,"check":"partial-repair [\"7\", \"generate\"]","expected":0,"passed":true},{"actual":false,"check":"control [\"73\", \"validate\"]","expected":false,"passed":true},{"actual":false,"check":"control [\"123\", \"validate\"]","expected":false,"passed":true},{"actual":false,"check":"control [\"317230\", \"validate\"]","expected":false,"passed":true},{"actual":false,"check":"control [\"2864257569\", \"validate\"]","expected":false,"passed":true},{"actual":false,"check":"control [\"426688793324\", \"validate\"]","expected":false,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"12\\\", \\\"generate\\\"]\", \"actual\": 5, \"expected\": 1, \"passed\": false}, {\"check\": \"regression [\\\"600\\\", \\\"generate\\\"]\", \"actual\": 0, \"expected\": 8, \"passed\": false}, {\"check\": \"partial-repair [\\\"7\\\", \\\"generate\\\"]\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"control [\\\"73\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"123\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"317230\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"2864257569\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"426688793324\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"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."}}