{"abstract":"Hyphenated ISBNs are reported malformed.","category":"Check-digit algorithms","checks":8,"contract":"ISBN-10 validation. Hyphens and spaces are removed; the rest must be nine ASCII digits followed by a digit or uppercase X (value 10), else \"malformed\". Weights run 10 down to 1 from the left and the number is \"valid\" when the weighted sum is divisible by 11, else \"invalid\".","contract_signature":"s","evaluation_group":"w2-check_digit_algorithms-isbn10-validate","failed_approach":"Stripping hyphens only at the ends leaves the interior group separators.","family":"w2-check_digit_algorithms-isbn10-validate-hyphen-removal","id":"FA-72431","implementations":{"attempt":{"sha256":"4008c2d32622615472eda70ca446573e63a363fbf0e210dc1c8b4b6d5c9ad194","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s):\n    t = s.strip('-').replace(' ', '')\n    if len(t) != 10 or not t.isascii() or not t[:9].isdigit():\n        return 'malformed'\n    if not (t[9].isdigit() or t[9] == 'X'):\n        return 'malformed'\n    total = 0\n    for i, ch in enumerate(t):\n        v = 10 if ch == 'X' else int(ch)\n        total += (10 - i) * v\n    return 'valid' if total % 11 == 0 else 'invalid'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"5-892-87293-9\"]', ['5-892-87293-9'], 'valid'], ['regression [\"2-399-55395-0\"]', ['2-399-55395-0'], 'valid'], ['control [\"5892872939\"]', ['5892872939'], 'valid'], ['control [\"2399553950\"]', ['2399553950'], 'valid'], ['control [\"9465545449\"]', ['9465545449'], 'valid'], ['control [\"829284466X\"]', ['829284466X'], 'valid'], ['control [\"9379774826\"]', ['9379774826'], 'valid'], ['control [\"2266685686\"]', ['2266685686'], 'valid']], [['regression [\"8-292-84466-X\"]', ['8-292-84466-X'], 'valid'], ['regression [\"9-379-77482-6\"]', ['9-379-77482-6'], 'valid'], ['control [\"2266685686\"]', ['2266685686'], 'valid'], ['control [\"2892681790\"]', ['2892681790'], 'valid'], ['control [\"5900307905\"]', ['5900307905'], 'valid'], ['control [\"3905987139\"]', ['3905987139'], 'valid'], ['control [\"7113753523\"]', ['7113753523'], 'valid'], ['control [\"1475433131\"]', ['1475433131'], 'valid']], [['regression [\"0-306-40615-2\"]', ['0-306-40615-2'], 'valid'], ['regression [\"0-8044-2957-X\"]', ['0-8044-2957-X'], 'valid'], ['control [\"1475433131\"]', ['1475433131'], 'valid'], ['control [\"3407375115\"]', ['3407375115'], 'valid'], ['control [\"8449627923\"]', ['8449627923'], 'valid'], ['control [\"0436178273\"]', ['0436178273'], 'valid'], ['control [\"080442957X\"]', ['080442957X'], 'valid'], ['control [\"0306406152\"]', ['0306406152'], 'valid']], [['regression [\"1-84356-028-3\"]', ['1-84356-028-3'], 'valid'], ['regression [\"5-892-87293-9\"]', ['5-892-87293-9'], 'valid'], ['control [\"0306406152\"]', ['0306406152'], 'valid'], ['control [\"9999999999\"]', ['9999999999'], 'valid'], ['control [\"0000000000\"]', ['0000000000'], 'valid'], ['control [\"123456789X\"]', ['123456789X'], 'valid'], ['control [\"097522980X\"]', ['097522980X'], 'valid'], ['control [\"5892872930\"]', ['5892872930'], 'invalid']], [['regression [\"9-465-54544-9\"]', ['9-465-54544-9'], 'valid'], ['regression [\"8-292-84466-X\"]', ['8-292-84466-X'], 'valid'], ['control [\"5892872930\"]', ['5892872930'], 'invalid'], ['control [\"2399553951\"]', ['2399553951'], 'invalid'], ['control [\"9465545440\"]', ['9465545440'], 'invalid'], ['control [\"8292844660\"]', ['8292844660'], 'invalid'], ['control [\"9379774827\"]', ['9379774827'], 'invalid'], ['control [\"2266685687\"]', ['2266685687'], 'invalid']]]\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":"00a9b3f05e9b05dd647efd63aba8aec62ee6cab0b7aaedc0d5c98e95b8756ff8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s):\n    t = s.replace('-', '', 1).replace(' ', '')\n    if len(t) != 10 or not t.isascii() or not t[:9].isdigit():\n        return 'malformed'\n    if not (t[9].isdigit() or t[9] == 'X'):\n        return 'malformed'\n    total = 0\n    for i, ch in enumerate(t):\n        v = 10 if ch == 'X' else int(ch)\n        total += (10 - i) * v\n    return 'valid' if total % 11 == 0 else 'invalid'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"5-892-87293-9\"]', ['5-892-87293-9'], 'valid'], ['regression [\"2-399-55395-0\"]', ['2-399-55395-0'], 'valid'], ['control [\"5892872939\"]', ['5892872939'], 'valid'], ['control [\"2399553950\"]', ['2399553950'], 'valid'], ['control [\"9465545449\"]', ['9465545449'], 'valid'], ['control [\"829284466X\"]', ['829284466X'], 'valid'], ['control [\"9379774826\"]', ['9379774826'], 'valid'], ['control [\"2266685686\"]', ['2266685686'], 'valid']], [['regression [\"8-292-84466-X\"]', ['8-292-84466-X'], 'valid'], ['regression [\"9-379-77482-6\"]', ['9-379-77482-6'], 'valid'], ['control [\"2266685686\"]', ['2266685686'], 'valid'], ['control [\"2892681790\"]', ['2892681790'], 'valid'], ['control [\"5900307905\"]', ['5900307905'], 'valid'], ['control [\"3905987139\"]', ['3905987139'], 'valid'], ['control [\"7113753523\"]', ['7113753523'], 'valid'], ['control [\"1475433131\"]', ['1475433131'], 'valid']], [['regression [\"0-306-40615-2\"]', ['0-306-40615-2'], 'valid'], ['regression [\"0-8044-2957-X\"]', ['0-8044-2957-X'], 'valid'], ['control [\"1475433131\"]', ['1475433131'], 'valid'], ['control [\"3407375115\"]', ['3407375115'], 'valid'], ['control [\"8449627923\"]', ['8449627923'], 'valid'], ['control [\"0436178273\"]', ['0436178273'], 'valid'], ['control [\"080442957X\"]', ['080442957X'], 'valid'], ['control [\"0306406152\"]', ['0306406152'], 'valid']], [['regression [\"1-84356-028-3\"]', ['1-84356-028-3'], 'valid'], ['regression [\"5-892-87293-9\"]', ['5-892-87293-9'], 'valid'], ['control [\"0306406152\"]', ['0306406152'], 'valid'], ['control [\"9999999999\"]', ['9999999999'], 'valid'], ['control [\"0000000000\"]', ['0000000000'], 'valid'], ['control [\"123456789X\"]', ['123456789X'], 'valid'], ['control [\"097522980X\"]', ['097522980X'], 'valid'], ['control [\"5892872930\"]', ['5892872930'], 'invalid']], [['regression [\"9-465-54544-9\"]', ['9-465-54544-9'], 'valid'], ['regression [\"8-292-84466-X\"]', ['8-292-84466-X'], 'valid'], ['control [\"5892872930\"]', ['5892872930'], 'invalid'], ['control [\"2399553951\"]', ['2399553951'], 'invalid'], ['control [\"9465545440\"]', ['9465545440'], 'invalid'], ['control [\"8292844660\"]', ['8292844660'], 'invalid'], ['control [\"9379774827\"]', ['9379774827'], 'invalid'], ['control [\"2266685687\"]', ['2266685687'], 'invalid']]]\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-isbn10-validate-hyphen-removal","generated_at":"2026-09-29T14:48:38.429812+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Catalogue and bookstore systems validate legacy ISBN-10 identifiers on intake.","root_cause":"The normalizer calls replace with a count of 1, leaving later group hyphens in place.","sha256":"2dd4f738205792b24c4c49c3b5da099813d0a91d683088a12f098e95f6860345","title":"ISBN-10 removes only the first hyphen · 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":36.197,"exit_code":1,"observations":[{"actual":"malformed","check":"regression [\"5-892-87293-9\"]","expected":"valid","passed":false},{"actual":"malformed","check":"regression [\"2-399-55395-0\"]","expected":"valid","passed":false},{"actual":"valid","check":"control [\"5892872939\"]","expected":"valid","passed":true},{"actual":"valid","check":"control [\"2399553950\"]","expected":"valid","passed":true},{"actual":"valid","check":"control [\"9465545449\"]","expected":"valid","passed":true},{"actual":"valid","check":"control [\"829284466X\"]","expected":"valid","passed":true},{"actual":"valid","check":"control [\"9379774826\"]","expected":"valid","passed":true},{"actual":"valid","check":"control [\"2266685686\"]","expected":"valid","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"5-892-87293-9\\\"]\", \"actual\": \"malformed\", \"expected\": \"valid\", \"passed\": false}, {\"check\": \"regression [\\\"2-399-55395-0\\\"]\", \"actual\": \"malformed\", \"expected\": \"valid\", \"passed\": false}, {\"check\": \"control [\\\"5892872939\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"check\": \"control [\\\"2399553950\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"check\": \"control [\\\"9465545449\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"check\": \"control [\\\"829284466X\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"check\": \"control [\\\"9379774826\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"check\": \"control [\\\"2266685686\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.737,"exit_code":1,"observations":[{"actual":"malformed","check":"regression [\"5-892-87293-9\"]","expected":"valid","passed":false},{"actual":"malformed","check":"regression [\"2-399-55395-0\"]","expected":"valid","passed":false},{"actual":"valid","check":"control [\"5892872939\"]","expected":"valid","passed":true},{"actual":"valid","check":"control [\"2399553950\"]","expected":"valid","passed":true},{"actual":"valid","check":"control [\"9465545449\"]","expected":"valid","passed":true},{"actual":"valid","check":"control [\"829284466X\"]","expected":"valid","passed":true},{"actual":"valid","check":"control [\"9379774826\"]","expected":"valid","passed":true},{"actual":"valid","check":"control [\"2266685686\"]","expected":"valid","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"5-892-87293-9\\\"]\", \"actual\": \"malformed\", \"expected\": \"valid\", \"passed\": false}, {\"check\": \"regression [\\\"2-399-55395-0\\\"]\", \"actual\": \"malformed\", \"expected\": \"valid\", \"passed\": false}, {\"check\": \"control [\\\"5892872939\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"check\": \"control [\\\"2399553950\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"check\": \"control [\\\"9465545449\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"check\": \"control [\\\"829284466X\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"check\": \"control [\\\"9379774826\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"check\": \"control [\\\"2266685686\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"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."}}