{"abstract":"Bb, Ebmaj7 and every other flat-rooted symbol is rejected because the b is read as part of the quality.","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":"Requiring more characters after the flat still rejects a bare flat triad such as Bb or Cb.","family":"w2-music-interval-chord-symbol-root-accidental-parsing","id":"FA-81161","implementations":{"attempt":{"sha256":"7d86b96b8c9f60ad09ff5b028a18c433015eb3e3c48469cf6333954c4a3372e7","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') and len(s) > 2:\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 or 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]), ('Bb7', [10, 2, 5, 8]), ('F#m7b5', [6, 9, 0, 4]), ('Gdim7', [7, 10, 1, 4]), ('Aaug', [9, 1, 5]), ('Cb', [11, 3, 6])], [('Bbm7', [10, 1, 5, 8]), ('Ebmaj7', [3, 7, 10, 2]), ('Gdim7', [7, 10, 1, 4]), ('Aaug', [9, 1, 5]), ('Dsus4', [2, 7, 9]), ('C/E', [4, 0, 7]), ('C/Bb', [10, 0, 4, 7]), ('E#', [5, 9, 0])], [('Bb7', [10, 2, 5, 8]), ('C/E', [4, 0, 7]), ('C/G', [7, 0, 4]), ('C/Bb', [10, 0, 4, 7]), ('Am/G', [7, 9, 0, 4]), ('F/A', [9, 5, 0]), ('Bb/D', [2, 10, 5]), ('Bb/Ab', [8, 10, 2, 5])], [('Ebmaj7', [3, 7, 10, 2]), ('F/A', [9, 5, 0]), ('Bb/D', [2, 10, 5]), ('G7/F', [5, 7, 11, 2]), ('Cmaj7/B', [11, 0, 4, 7]), ('Cb', [11, 3, 6]), ('A6', [9, 1, 4, 6]), ('D/F#', [6, 2, 9])], [('C/Bb', [10, 0, 4, 7]), ('Cb', [11, 3, 6]), ('E#', [5, 9, 0]), ('A6', [9, 1, 4, 6]), ('AmMaj7', [9, 0, 4, 8]), ('C/E/G', None), ('C/Ebm', None), ('F#', [6, 10, 1])]]\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":"a9ec91d59f1053adf78fc79b98544a71570a12f2b5359f09868c8410db0529ff","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] == '#':\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 or 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]), ('Bb7', [10, 2, 5, 8]), ('F#m7b5', [6, 9, 0, 4]), ('Gdim7', [7, 10, 1, 4]), ('Aaug', [9, 1, 5]), ('Cb', [11, 3, 6])], [('Bbm7', [10, 1, 5, 8]), ('Ebmaj7', [3, 7, 10, 2]), ('Gdim7', [7, 10, 1, 4]), ('Aaug', [9, 1, 5]), ('Dsus4', [2, 7, 9]), ('C/E', [4, 0, 7]), ('C/Bb', [10, 0, 4, 7]), ('E#', [5, 9, 0])], [('Bb7', [10, 2, 5, 8]), ('C/E', [4, 0, 7]), ('C/G', [7, 0, 4]), ('C/Bb', [10, 0, 4, 7]), ('Am/G', [7, 9, 0, 4]), ('F/A', [9, 5, 0]), ('Bb/D', [2, 10, 5]), ('Bb/Ab', [8, 10, 2, 5])], [('Ebmaj7', [3, 7, 10, 2]), ('F/A', [9, 5, 0]), ('Bb/D', [2, 10, 5]), ('G7/F', [5, 7, 11, 2]), ('Cmaj7/B', [11, 0, 4, 7]), ('Cb', [11, 3, 6]), ('A6', [9, 1, 4, 6]), ('D/F#', [6, 2, 9])], [('C/Bb', [10, 0, 4, 7]), ('Cb', [11, 3, 6]), ('E#', [5, 9, 0]), ('A6', [9, 1, 4, 6]), ('AmMaj7', [9, 0, 4, 8]), ('C/E/G', None), ('C/Ebm', None), ('F#', [6, 10, 1])]]\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-root-accidental-parsing","generated_at":"2026-09-29T14:50:00.553798+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":"Only # is recognised as a root accidental.","sha256":"79efa5201fc45c3758e30a099dc4167c8aef6e6e9854237a11a3e0b58dd68c1c","title":"Chord symbol to pitch classes: flat roots not recognised · 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.177,"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":null,"check":"oracle 2","expected":[10,2,5],"passed":false},{"actual":[10,2,5,8],"check":"oracle 3","expected":[10,2,5,8],"passed":true},{"actual":[6,9,0,4],"check":"oracle 4","expected":[6,9,0,4],"passed":true},{"actual":[7,10,1,4],"check":"oracle 5","expected":[7,10,1,4],"passed":true},{"actual":[9,1,5],"check":"oracle 6","expected":[9,1,5],"passed":true},{"actual":null,"check":"oracle 7","expected":[11,3,6],"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\": null, \"expected\": [10, 2, 5], \"passed\": false}, {\"check\": \"oracle 3\", \"actual\": [10, 2, 5, 8], \"expected\": [10, 2, 5, 8], \"passed\": true}, {\"check\": \"oracle 4\", \"actual\": [6, 9, 0, 4], \"expected\": [6, 9, 0, 4], \"passed\": true}, {\"check\": \"oracle 5\", \"actual\": [7, 10, 1, 4], \"expected\": [7, 10, 1, 4], \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": [9, 1, 5], \"expected\": [9, 1, 5], \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": null, \"expected\": [11, 3, 6], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.258,"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":null,"check":"oracle 2","expected":[10,2,5],"passed":false},{"actual":null,"check":"oracle 3","expected":[10,2,5,8],"passed":false},{"actual":[6,9,0,4],"check":"oracle 4","expected":[6,9,0,4],"passed":true},{"actual":[7,10,1,4],"check":"oracle 5","expected":[7,10,1,4],"passed":true},{"actual":[9,1,5],"check":"oracle 6","expected":[9,1,5],"passed":true},{"actual":null,"check":"oracle 7","expected":[11,3,6],"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\": null, \"expected\": [10, 2, 5], \"passed\": false}, {\"check\": \"oracle 3\", \"actual\": null, \"expected\": [10, 2, 5, 8], \"passed\": false}, {\"check\": \"oracle 4\", \"actual\": [6, 9, 0, 4], \"expected\": [6, 9, 0, 4], \"passed\": true}, {\"check\": \"oracle 5\", \"actual\": [7, 10, 1, 4], \"expected\": [7, 10, 1, 4], \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": [9, 1, 5], \"expected\": [9, 1, 5], \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": null, \"expected\": [11, 3, 6], \"passed\": false}], \"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."}}