{"abstract":"Symbols like C/Ebm or C/E/G are accepted as if the bass were plain Eb or E.","category":"Music interval and transposition theory","checks":8,"contract":"Input a chord symbol: root letter with optional # or b, a quality from \"\", m, dim, aug, 7, maj7, m7, m7b5, dim7, sus4, mMaj7, 6, and optionally \"/\" plus a bass note (letter with optional # or b and nothing else). Return pitch classes root-first in template order; for a slash chord the bass moves to the front (removed from its old position if it is a chord tone, otherwise added). Unknown or malformed symbols return None.","contract_signature":"x","evaluation_group":"w2-music-interval-chord-symbol","failed_approach":"Checking only the remainder lets an unparseable bass letter through as a null bass.","family":"w2-music-interval-chord-symbol-bass-remainder-validation","id":"FA-81171","implementations":{"attempt":{"sha256":"9af9b90e9b4f4d252db9d9a327acd4e86ad6673b4ae01bcf9b258709d96b847e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    base = {'C': 0, 'D': 2, 'E': 4, 'F': 5, 'G': 7, 'A': 9, 'B': 11}\n    shapes = {'': [0, 4, 7], 'm': [0, 3, 7], 'dim': [0, 3, 6], 'aug': [0, 4, 8], '7': [0, 4, 7, 10], 'maj7': [0, 4, 7, 11], 'm7': [0, 3, 7, 10], 'm7b5': [0, 3, 6, 10], 'dim7': [0, 3, 6, 9], 'sus4': [0, 5, 7], 'mMaj7': [0, 3, 7, 11], '6': [0, 4, 7, 9]}\n    def root(s):\n        if not s or s[0] not in base:\n            return None, s\n        if s[1:2] in ('#', 'b'):\n            return (base[s[0]] + (1 if s[1] == '#' else -1)) % 12, s[2:]\n        return base[s[0]], s[1:]\n    if not isinstance(x, str):\n        return None\n    head, slash, tail = x.partition('/')\n    r, quality = root(head)\n    if r is None or quality not in shapes:\n        return None\n    tones = [(r + i) % 12 for i in shapes[quality]]\n    if slash:\n        b, rest = root(tail)\n        if rest:\n            return None\n        if b in tones:\n            tones.remove(b)\n        tones.insert(0, b)\n    return tones\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('C', [0, 4, 7]), ('Cm', [0, 3, 7]), ('Bb', [10, 2, 5]), ('Bbm7', [10, 1, 5, 8]), ('Bb7', [10, 2, 5, 8]), ('C/E/G', None), ('C/', None), ('Am/', None)], [('Bbm7', [10, 1, 5, 8]), ('Bb7', [10, 2, 5, 8]), ('F#m7b5', [6, 9, 0, 4]), ('Ebmaj7', [3, 7, 10, 2]), ('Gdim7', [7, 10, 1, 4]), ('C/Ebm', None), ('C/', None), ('Am/', None)], [('Ebmaj7', [3, 7, 10, 2]), ('Gdim7', [7, 10, 1, 4]), ('Aaug', [9, 1, 5]), ('Dsus4', [2, 7, 9]), ('C/E', [4, 0, 7]), ('C/E/G', None), ('C/', None), ('Am/', None)], [('Dsus4', [2, 7, 9]), ('C/E', [4, 0, 7]), ('C/G', [7, 0, 4]), ('C/Bb', [10, 0, 4, 7]), ('Am/G', [7, 9, 0, 4]), ('C/Ebm', None), ('C/', None), ('Am/', None)], [('C/Bb', [10, 0, 4, 7]), ('Am/G', [7, 9, 0, 4]), ('F/A', [9, 5, 0]), ('Bb/D', [2, 10, 5]), ('G7/F', [5, 7, 11, 2]), ('C/E/G', None), ('C/', None), ('Am/', None)]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"oracle %d\" % i, 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":"fc3b484c7eafed46f321ff970ad0b43fc7b1fd872ab689b2bed9c5e4e27e72df","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    base = {'C': 0, 'D': 2, 'E': 4, 'F': 5, 'G': 7, 'A': 9, 'B': 11}\n    shapes = {'': [0, 4, 7], 'm': [0, 3, 7], 'dim': [0, 3, 6], 'aug': [0, 4, 8], '7': [0, 4, 7, 10], 'maj7': [0, 4, 7, 11], 'm7': [0, 3, 7, 10], 'm7b5': [0, 3, 6, 10], 'dim7': [0, 3, 6, 9], 'sus4': [0, 5, 7], 'mMaj7': [0, 3, 7, 11], '6': [0, 4, 7, 9]}\n    def root(s):\n        if not s or s[0] not in base:\n            return None, s\n        if s[1:2] in ('#', 'b'):\n            return (base[s[0]] + (1 if s[1] == '#' else -1)) % 12, s[2:]\n        return base[s[0]], s[1:]\n    if not isinstance(x, str):\n        return None\n    head, slash, tail = x.partition('/')\n    r, quality = root(head)\n    if r is None or quality not in shapes:\n        return None\n    tones = [(r + i) % 12 for i in shapes[quality]]\n    if slash:\n        b, rest = root(tail)\n        if b is None:\n            return None\n        if b in tones:\n            tones.remove(b)\n        tones.insert(0, b)\n    return tones\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('C', [0, 4, 7]), ('Cm', [0, 3, 7]), ('Bb', [10, 2, 5]), ('Bbm7', [10, 1, 5, 8]), ('Bb7', [10, 2, 5, 8]), ('C/E/G', None), ('C/', None), ('Am/', None)], [('Bbm7', [10, 1, 5, 8]), ('Bb7', [10, 2, 5, 8]), ('F#m7b5', [6, 9, 0, 4]), ('Ebmaj7', [3, 7, 10, 2]), ('Gdim7', [7, 10, 1, 4]), ('C/Ebm', None), ('C/', None), ('Am/', None)], [('Ebmaj7', [3, 7, 10, 2]), ('Gdim7', [7, 10, 1, 4]), ('Aaug', [9, 1, 5]), ('Dsus4', [2, 7, 9]), ('C/E', [4, 0, 7]), ('C/E/G', None), ('C/', None), ('Am/', None)], [('Dsus4', [2, 7, 9]), ('C/E', [4, 0, 7]), ('C/G', [7, 0, 4]), ('C/Bb', [10, 0, 4, 7]), ('Am/G', [7, 9, 0, 4]), ('C/Ebm', None), ('C/', None), ('Am/', None)], [('C/Bb', [10, 0, 4, 7]), ('Am/G', [7, 9, 0, 4]), ('F/A', [9, 5, 0]), ('Bb/D', [2, 10, 5]), ('G7/F', [5, 7, 11, 2]), ('C/E/G', None), ('C/', None), ('Am/', None)]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"oracle %d\" % i, 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 with a stipulated toy contract; it is not a complete music notation or theory engine. 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-music-interval-chord-symbol-bass-remainder-validation","generated_at":"2026-09-29T14:50:00.563999+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Lead-sheet, accompaniment and guitar-chart tools expand chord symbols into voicings.","root_cause":"The slash-bass parser does not check that the bass note consumed the whole remainder.","sha256":"597af786367ece15e761e778313f7cd78eb2a9cb466646f59a2ddabf4f50b5be","title":"Chord symbol to pitch classes: trailing text after slash bass ignored · 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":42.166,"exit_code":1,"observations":[{"actual":[0,4,7],"check":"oracle 0","expected":[0,4,7],"passed":true},{"actual":[0,3,7],"check":"oracle 1","expected":[0,3,7],"passed":true},{"actual":[10,2,5],"check":"oracle 2","expected":[10,2,5],"passed":true},{"actual":[10,1,5,8],"check":"oracle 3","expected":[10,1,5,8],"passed":true},{"actual":[10,2,5,8],"check":"oracle 4","expected":[10,2,5,8],"passed":true},{"actual":null,"check":"oracle 5","expected":null,"passed":true},{"actual":[null,0,4,7],"check":"oracle 6","expected":null,"passed":false},{"actual":[null,9,0,4],"check":"oracle 7","expected":null,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": [0, 4, 7], \"expected\": [0, 4, 7], \"passed\": true}, {\"check\": \"oracle 1\", \"actual\": [0, 3, 7], \"expected\": [0, 3, 7], \"passed\": true}, {\"check\": \"oracle 2\", \"actual\": [10, 2, 5], \"expected\": [10, 2, 5], \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": [10, 1, 5, 8], \"expected\": [10, 1, 5, 8], \"passed\": true}, {\"check\": \"oracle 4\", \"actual\": [10, 2, 5, 8], \"expected\": [10, 2, 5, 8], \"passed\": true}, {\"check\": \"oracle 5\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": [null, 0, 4, 7], \"expected\": null, \"passed\": false}, {\"check\": \"oracle 7\", \"actual\": [null, 9, 0, 4], \"expected\": null, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.172,"exit_code":1,"observations":[{"actual":[0,4,7],"check":"oracle 0","expected":[0,4,7],"passed":true},{"actual":[0,3,7],"check":"oracle 1","expected":[0,3,7],"passed":true},{"actual":[10,2,5],"check":"oracle 2","expected":[10,2,5],"passed":true},{"actual":[10,1,5,8],"check":"oracle 3","expected":[10,1,5,8],"passed":true},{"actual":[10,2,5,8],"check":"oracle 4","expected":[10,2,5,8],"passed":true},{"actual":[4,0,7],"check":"oracle 5","expected":null,"passed":false},{"actual":null,"check":"oracle 6","expected":null,"passed":true},{"actual":null,"check":"oracle 7","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": [0, 4, 7], \"expected\": [0, 4, 7], \"passed\": true}, {\"check\": \"oracle 1\", \"actual\": [0, 3, 7], \"expected\": [0, 3, 7], \"passed\": true}, {\"check\": \"oracle 2\", \"actual\": [10, 2, 5], \"expected\": [10, 2, 5], \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": [10, 1, 5, 8], \"expected\": [10, 1, 5, 8], \"passed\": true}, {\"check\": \"oracle 4\", \"actual\": [10, 2, 5, 8], \"expected\": [10, 2, 5, 8], \"passed\": true}, {\"check\": \"oracle 5\", \"actual\": [4, 0, 7], \"expected\": null, \"passed\": false}, {\"check\": \"oracle 6\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": null, \"expected\": null, \"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."}}