{"abstract":"References printed in groups of digits return None.","category":"Check-digit algorithms","checks":8,"contract":"Damm quasigroup scheme with the standard order-10 table. Spaces are ignored; the remaining text must be nonempty ASCII digits or the result is None. Digits are processed left to right with interim = T[interim][digit] from 0; \"generate\" returns the final interim value, \"validate\" returns whether it is 0.","evaluation_group":"w2-check_digit_algorithms-damm","failed_approach":"Removing only the first space fixes two-group references but not longer groupings.","family":"w2-check_digit_algorithms-damm-group-spacing","id":"FA-72416","implementations":{"attempt":{"sha256":"c39645e1ec5c4fe79ee2e84f8d8405857ebe9942ded3128a6daa2bb63a80ca9b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s, mode):\n    T = [[0,3,1,7,5,9,8,6,4,2],[7,0,9,2,1,5,4,8,6,3],[4,2,0,6,8,7,1,3,5,9],[1,7,5,0,9,8,3,4,2,6],[6,1,2,3,0,4,5,9,7,8],[3,6,7,4,2,0,9,5,8,1],[5,8,6,9,7,2,0,1,3,4],[8,9,4,5,3,6,2,0,1,7],[9,4,3,8,6,1,7,2,0,5],[2,5,8,1,4,3,6,7,9,0]]\n    t = s.replace(' ', '', 1)\n    if not t or not t.isascii() or not t.isdigit():\n        return None\n    interim = 0\n    for ch in t:\n        interim = T[interim][int(ch)]\n    if mode == 'generate':\n        return interim\n    return interim == 0\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"572 4\", \"validate\"]', ['572 4', 'validate'], True], ['regression [\"12 34 56\", \"generate\"]', ['12 34 56', 'generate'], 6], ['partial-repair [\"4012 8888 8888 1881\", \"generate\"]', ['4012 8888 8888 1881', 'generate'], 6], ['control [\"9\", \"generate\"]', ['9', 'generate'], 2], ['control [\"97\", \"validate\"]', ['97', 'validate'], False], ['control [\"24\", \"generate\"]', ['24', 'generate'], 1], ['control [\"249\", \"validate\"]', ['249', 'validate'], False], ['control [\"406\", \"generate\"]', ['406', 'generate'], 3]], [['regression [\"572 4\", \"validate\"]', ['572 4', 'validate'], True], ['regression [\"12 34 56\", \"generate\"]', ['12 34 56', 'generate'], 6], ['partial-repair [\"4012 8888 8888 1881\", \"generate\"]', ['4012 8888 8888 1881', 'generate'], 6], ['control [\"4060\", \"validate\"]', ['4060', 'validate'], False], ['control [\"7601\", \"generate\"]', ['7601', 'generate'], 3], ['control [\"76013\", \"validate\"]', ['76013', 'validate'], True], ['control [\"637005\", \"generate\"]', ['637005', 'generate'], 2], ['control [\"6370058\", \"validate\"]', ['6370058', 'validate'], False]], [['regression [\"572 4\", \"validate\"]', ['572 4', 'validate'], True], ['regression [\"12 34 56\", \"generate\"]', ['12 34 56', 'generate'], 6], ['partial-repair [\"4012 8888 8888 1881\", \"generate\"]', ['4012 8888 8888 1881', 'generate'], 6], ['control [\"2379421\", \"generate\"]', ['2379421', 'generate'], 1], ['control [\"23794217\", \"validate\"]', ['23794217', 'validate'], False], ['control [\"315720564\", \"generate\"]', ['315720564', 'generate'], 2], ['control [\"3157205642\", \"validate\"]', ['3157205642', 'validate'], True], ['control [\"9034129563\", \"generate\"]', ['9034129563', 'generate'], 7]], [['regression [\"572 4\", \"validate\"]', ['572 4', 'validate'], True], ['regression [\"12 34 56\", \"generate\"]', ['12 34 56', 'generate'], 6], ['partial-repair [\"4012 8888 8888 1881\", \"generate\"]', ['4012 8888 8888 1881', 'generate'], 6], ['control [\"90341295635\", \"validate\"]', ['90341295635', 'validate'], False], ['control [\"7689245619132\", \"generate\"]', ['7689245619132', 'generate'], 9], ['control [\"76892456191326\", \"validate\"]', ['76892456191326', 'validate'], False], ['control [\"572\", \"generate\"]', ['572', 'generate'], 4], ['control [\"5724\", \"validate\"]', ['5724', 'validate'], True]], [['regression [\"572 4\", \"validate\"]', ['572 4', 'validate'], True], ['regression [\"12 34 56\", \"generate\"]', ['12 34 56', 'generate'], 6], ['partial-repair [\"4012 8888 8888 1881\", \"generate\"]', ['4012 8888 8888 1881', 'generate'], 6], ['control [\"5727\", \"validate\"]', ['5727', 'validate'], False], ['control [\"  \", \"generate\"]', ['  ', 'generate'], None], ['control [\"1-2\", \"generate\"]', ['1-2', 'generate'], None], ['control [\"98\", \"generate\"]', ['98', 'generate'], 5], ['control [\"0\", \"validate\"]', ['0', 'validate'], True]]]\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":"19a48c52e429fa4bf50be6da90ee45426c202cdc371b828c6806bfe3cbc927ac","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s, mode):\n    T = [[0,3,1,7,5,9,8,6,4,2],[7,0,9,2,1,5,4,8,6,3],[4,2,0,6,8,7,1,3,5,9],[1,7,5,0,9,8,3,4,2,6],[6,1,2,3,0,4,5,9,7,8],[3,6,7,4,2,0,9,5,8,1],[5,8,6,9,7,2,0,1,3,4],[8,9,4,5,3,6,2,0,1,7],[9,4,3,8,6,1,7,2,0,5],[2,5,8,1,4,3,6,7,9,0]]\n    t = s.strip()\n    if not t or not t.isascii() or not t.isdigit():\n        return None\n    interim = 0\n    for ch in t:\n        interim = T[interim][int(ch)]\n    if mode == 'generate':\n        return interim\n    return interim == 0\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"572 4\", \"validate\"]', ['572 4', 'validate'], True], ['regression [\"12 34 56\", \"generate\"]', ['12 34 56', 'generate'], 6], ['partial-repair [\"4012 8888 8888 1881\", \"generate\"]', ['4012 8888 8888 1881', 'generate'], 6], ['control [\"9\", \"generate\"]', ['9', 'generate'], 2], ['control [\"97\", \"validate\"]', ['97', 'validate'], False], ['control [\"24\", \"generate\"]', ['24', 'generate'], 1], ['control [\"249\", \"validate\"]', ['249', 'validate'], False], ['control [\"406\", \"generate\"]', ['406', 'generate'], 3]], [['regression [\"572 4\", \"validate\"]', ['572 4', 'validate'], True], ['regression [\"12 34 56\", \"generate\"]', ['12 34 56', 'generate'], 6], ['partial-repair [\"4012 8888 8888 1881\", \"generate\"]', ['4012 8888 8888 1881', 'generate'], 6], ['control [\"4060\", \"validate\"]', ['4060', 'validate'], False], ['control [\"7601\", \"generate\"]', ['7601', 'generate'], 3], ['control [\"76013\", \"validate\"]', ['76013', 'validate'], True], ['control [\"637005\", \"generate\"]', ['637005', 'generate'], 2], ['control [\"6370058\", \"validate\"]', ['6370058', 'validate'], False]], [['regression [\"572 4\", \"validate\"]', ['572 4', 'validate'], True], ['regression [\"12 34 56\", \"generate\"]', ['12 34 56', 'generate'], 6], ['partial-repair [\"4012 8888 8888 1881\", \"generate\"]', ['4012 8888 8888 1881', 'generate'], 6], ['control [\"2379421\", \"generate\"]', ['2379421', 'generate'], 1], ['control [\"23794217\", \"validate\"]', ['23794217', 'validate'], False], ['control [\"315720564\", \"generate\"]', ['315720564', 'generate'], 2], ['control [\"3157205642\", \"validate\"]', ['3157205642', 'validate'], True], ['control [\"9034129563\", \"generate\"]', ['9034129563', 'generate'], 7]], [['regression [\"572 4\", \"validate\"]', ['572 4', 'validate'], True], ['regression [\"12 34 56\", \"generate\"]', ['12 34 56', 'generate'], 6], ['partial-repair [\"4012 8888 8888 1881\", \"generate\"]', ['4012 8888 8888 1881', 'generate'], 6], ['control [\"90341295635\", \"validate\"]', ['90341295635', 'validate'], False], ['control [\"7689245619132\", \"generate\"]', ['7689245619132', 'generate'], 9], ['control [\"76892456191326\", \"validate\"]', ['76892456191326', 'validate'], False], ['control [\"572\", \"generate\"]', ['572', 'generate'], 4], ['control [\"5724\", \"validate\"]', ['5724', 'validate'], True]], [['regression [\"572 4\", \"validate\"]', ['572 4', 'validate'], True], ['regression [\"12 34 56\", \"generate\"]', ['12 34 56', 'generate'], 6], ['partial-repair [\"4012 8888 8888 1881\", \"generate\"]', ['4012 8888 8888 1881', 'generate'], 6], ['control [\"5727\", \"validate\"]', ['5727', 'validate'], False], ['control [\"  \", \"generate\"]', ['  ', 'generate'], None], ['control [\"1-2\", \"generate\"]', ['1-2', 'generate'], None], ['control [\"98\", \"generate\"]', ['98', 'generate'], 5], ['control [\"0\", \"validate\"]', ['0', 'validate'], True]]]\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":"d5224ce481d9fa3c9b155d914389ca070abddc8a166286cc8898841e55bbad7c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s, mode):\n    T = [[0,3,1,7,5,9,8,6,4,2],[7,0,9,2,1,5,4,8,6,3],[4,2,0,6,8,7,1,3,5,9],[1,7,5,0,9,8,3,4,2,6],[6,1,2,3,0,4,5,9,7,8],[3,6,7,4,2,0,9,5,8,1],[5,8,6,9,7,2,0,1,3,4],[8,9,4,5,3,6,2,0,1,7],[9,4,3,8,6,1,7,2,0,5],[2,5,8,1,4,3,6,7,9,0]]\n    t = s.replace(' ', '')\n    if not t or not t.isascii() or not t.isdigit():\n        return None\n    interim = 0\n    for ch in t:\n        interim = T[interim][int(ch)]\n    if mode == 'generate':\n        return interim\n    return interim == 0\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"572 4\", \"validate\"]', ['572 4', 'validate'], True], ['regression [\"12 34 56\", \"generate\"]', ['12 34 56', 'generate'], 6], ['partial-repair [\"4012 8888 8888 1881\", \"generate\"]', ['4012 8888 8888 1881', 'generate'], 6], ['control [\"9\", \"generate\"]', ['9', 'generate'], 2], ['control [\"97\", \"validate\"]', ['97', 'validate'], False], ['control [\"24\", \"generate\"]', ['24', 'generate'], 1], ['control [\"249\", \"validate\"]', ['249', 'validate'], False], ['control [\"406\", \"generate\"]', ['406', 'generate'], 3]], [['regression [\"572 4\", \"validate\"]', ['572 4', 'validate'], True], ['regression [\"12 34 56\", \"generate\"]', ['12 34 56', 'generate'], 6], ['partial-repair [\"4012 8888 8888 1881\", \"generate\"]', ['4012 8888 8888 1881', 'generate'], 6], ['control [\"4060\", \"validate\"]', ['4060', 'validate'], False], ['control [\"7601\", \"generate\"]', ['7601', 'generate'], 3], ['control [\"76013\", \"validate\"]', ['76013', 'validate'], True], ['control [\"637005\", \"generate\"]', ['637005', 'generate'], 2], ['control [\"6370058\", \"validate\"]', ['6370058', 'validate'], False]], [['regression [\"572 4\", \"validate\"]', ['572 4', 'validate'], True], ['regression [\"12 34 56\", \"generate\"]', ['12 34 56', 'generate'], 6], ['partial-repair [\"4012 8888 8888 1881\", \"generate\"]', ['4012 8888 8888 1881', 'generate'], 6], ['control [\"2379421\", \"generate\"]', ['2379421', 'generate'], 1], ['control [\"23794217\", \"validate\"]', ['23794217', 'validate'], False], ['control [\"315720564\", \"generate\"]', ['315720564', 'generate'], 2], ['control [\"3157205642\", \"validate\"]', ['3157205642', 'validate'], True], ['control [\"9034129563\", \"generate\"]', ['9034129563', 'generate'], 7]], [['regression [\"572 4\", \"validate\"]', ['572 4', 'validate'], True], ['regression [\"12 34 56\", \"generate\"]', ['12 34 56', 'generate'], 6], ['partial-repair [\"4012 8888 8888 1881\", \"generate\"]', ['4012 8888 8888 1881', 'generate'], 6], ['control [\"90341295635\", \"validate\"]', ['90341295635', 'validate'], False], ['control [\"7689245619132\", \"generate\"]', ['7689245619132', 'generate'], 9], ['control [\"76892456191326\", \"validate\"]', ['76892456191326', 'validate'], False], ['control [\"572\", \"generate\"]', ['572', 'generate'], 4], ['control [\"5724\", \"validate\"]', ['5724', 'validate'], True]], [['regression [\"572 4\", \"validate\"]', ['572 4', 'validate'], True], ['regression [\"12 34 56\", \"generate\"]', ['12 34 56', 'generate'], 6], ['partial-repair [\"4012 8888 8888 1881\", \"generate\"]', ['4012 8888 8888 1881', 'generate'], 6], ['control [\"5727\", \"validate\"]', ['5727', 'validate'], False], ['control [\"  \", \"generate\"]', ['  ', 'generate'], None], ['control [\"1-2\", \"generate\"]', ['1-2', 'generate'], None], ['control [\"98\", \"generate\"]', ['98', 'generate'], 5], ['control [\"0\", \"validate\"]', ['0', 'validate'], True]]]\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-damm-group-spacing","generated_at":"2026-09-29T14:48:38.393361+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Damm checks are used on order and parcel references where transpositions must be detected.","repair":"Remove every space before validating the digits.","root_cause":"Only surrounding whitespace is trimmed, so interior group spaces fail the digit gate.","sha256":"68a52e98217979ef251c78fed6d8797052c966421cf2a9133fc41c7affdbcf11","title":"Damm rejects space-grouped references · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.213,"exit_code":1,"observations":[{"actual":true,"check":"regression [\"572 4\", \"validate\"]","expected":true,"passed":true},{"actual":null,"check":"regression [\"12 34 56\", \"generate\"]","expected":6,"passed":false},{"actual":null,"check":"partial-repair [\"4012 8888 8888 1881\", \"generate\"]","expected":6,"passed":false},{"actual":2,"check":"control [\"9\", \"generate\"]","expected":2,"passed":true},{"actual":false,"check":"control [\"97\", \"validate\"]","expected":false,"passed":true},{"actual":1,"check":"control [\"24\", \"generate\"]","expected":1,"passed":true},{"actual":false,"check":"control [\"249\", \"validate\"]","expected":false,"passed":true},{"actual":3,"check":"control [\"406\", \"generate\"]","expected":3,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"572 4\\\", \\\"validate\\\"]\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"regression [\\\"12 34 56\\\", \\\"generate\\\"]\", \"actual\": null, \"expected\": 6, \"passed\": false}, {\"check\": \"partial-repair [\\\"4012 8888 8888 1881\\\", \\\"generate\\\"]\", \"actual\": null, \"expected\": 6, \"passed\": false}, {\"check\": \"control [\\\"9\\\", \\\"generate\\\"]\", \"actual\": 2, \"expected\": 2, \"passed\": true}, {\"check\": \"control [\\\"97\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"24\\\", \\\"generate\\\"]\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"control [\\\"249\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"406\\\", \\\"generate\\\"]\", \"actual\": 3, \"expected\": 3, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":37.271,"exit_code":1,"observations":[{"actual":null,"check":"regression [\"572 4\", \"validate\"]","expected":true,"passed":false},{"actual":null,"check":"regression [\"12 34 56\", \"generate\"]","expected":6,"passed":false},{"actual":null,"check":"partial-repair [\"4012 8888 8888 1881\", \"generate\"]","expected":6,"passed":false},{"actual":2,"check":"control [\"9\", \"generate\"]","expected":2,"passed":true},{"actual":false,"check":"control [\"97\", \"validate\"]","expected":false,"passed":true},{"actual":1,"check":"control [\"24\", \"generate\"]","expected":1,"passed":true},{"actual":false,"check":"control [\"249\", \"validate\"]","expected":false,"passed":true},{"actual":3,"check":"control [\"406\", \"generate\"]","expected":3,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"572 4\\\", \\\"validate\\\"]\", \"actual\": null, \"expected\": true, \"passed\": false}, {\"check\": \"regression [\\\"12 34 56\\\", \\\"generate\\\"]\", \"actual\": null, \"expected\": 6, \"passed\": false}, {\"check\": \"partial-repair [\\\"4012 8888 8888 1881\\\", \\\"generate\\\"]\", \"actual\": null, \"expected\": 6, \"passed\": false}, {\"check\": \"control [\\\"9\\\", \\\"generate\\\"]\", \"actual\": 2, \"expected\": 2, \"passed\": true}, {\"check\": \"control [\\\"97\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"24\\\", \\\"generate\\\"]\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"control [\\\"249\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"406\\\", \\\"generate\\\"]\", \"actual\": 3, \"expected\": 3, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":37.981,"exit_code":0,"observations":[{"actual":true,"check":"regression [\"572 4\", \"validate\"]","expected":true,"passed":true},{"actual":6,"check":"regression [\"12 34 56\", \"generate\"]","expected":6,"passed":true},{"actual":6,"check":"partial-repair [\"4012 8888 8888 1881\", \"generate\"]","expected":6,"passed":true},{"actual":2,"check":"control [\"9\", \"generate\"]","expected":2,"passed":true},{"actual":false,"check":"control [\"97\", \"validate\"]","expected":false,"passed":true},{"actual":1,"check":"control [\"24\", \"generate\"]","expected":1,"passed":true},{"actual":false,"check":"control [\"249\", \"validate\"]","expected":false,"passed":true},{"actual":3,"check":"control [\"406\", \"generate\"]","expected":3,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"572 4\\\", \\\"validate\\\"]\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"regression [\\\"12 34 56\\\", \\\"generate\\\"]\", \"actual\": 6, \"expected\": 6, \"passed\": true}, {\"check\": \"partial-repair [\\\"4012 8888 8888 1881\\\", \\\"generate\\\"]\", \"actual\": 6, \"expected\": 6, \"passed\": true}, {\"check\": \"control [\\\"9\\\", \\\"generate\\\"]\", \"actual\": 2, \"expected\": 2, \"passed\": true}, {\"check\": \"control [\\\"97\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"24\\\", \\\"generate\\\"]\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"control [\\\"249\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"406\\\", \\\"generate\\\"]\", \"actual\": 3, \"expected\": 3, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}