{"abstract":"G#9 and Ab9 are returned as key 128 instead of being rejected as out of range.","category":"Music interval and transposition theory","checks":8,"contract":"Input a spelled pitch string: uppercase letter A-G, any run of accidentals (# = +1, b = -1, x = +2), then a signed integer octave where C4 = 60 and C-1 = 0. Return the MIDI key number, or None for malformed text or results outside 0..127.","evaluation_group":"w2-music-interval-spelled-midi","failed_approach":"Flipping to a non-strict comparison now rejects G9, the valid top key 127.","family":"w2-music-interval-spelled-midi-upper-midi-bound","id":"FA-80856","implementations":{"attempt":{"sha256":"b7944429578c35b6d207540941b1dcf620b20b34bc34602b49129c51d91db6b9","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    names = {'C': 0, 'D': 2, 'E': 4, 'F': 5, 'G': 7, 'A': 9, 'B': 11}\n    if not isinstance(x, str) or len(x) < 2 or x[0] not in names:\n        return None\n    i = 1\n    acc = 0\n    while i < len(x) and x[i] in '#bx':\n        acc += {'#': 1, 'b': -1, 'x': 2}[x[i]]\n        i += 1\n    tail = x[i:]\n    neg = tail.startswith('-')\n    digits = tail[1:] if neg else tail\n    if not digits.isdigit():\n        return None\n    octave = -int(digits) if neg else int(digits)\n    midi = (octave + 1) * 12 + names[x[0]] + acc\n    if midi < 0 or midi >= 127:\n        return None\n    return midi\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('C4', 60), ('A4', 69), ('C-1', 0), ('G9', 127), ('G#9', None), ('B#3', 60), ('Cb4', 59), ('Fx4', 67)], [('G9', 127), ('Ab9', None), ('B#3', 60), ('Cb4', 59), ('Fx4', 67), ('Ebb4', 62), ('Dbbb4', 59), ('Cb-1', None)], [('G9', 127), ('G#9', None), ('Ebb4', 62), ('Dbbb4', 59), ('Cb-1', None), ('B-1', 11), ('E4', 64), ('F4', 65)], [('G9', 127), ('Ab9', None), ('B-1', 11), ('E4', 64), ('F4', 65), ('B4', 71), ('Bb3', 58), ('C0', 12)], [('G9', 127), ('G#9', None), ('B4', 71), ('Bb3', 58), ('C0', 12), ('D#0', 15), ('Cx-1', 2), ('H4', 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":"a734493f3d512b799eb453acd0c83fd5e524607d951d0d465a82eb009d71df53","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    names = {'C': 0, 'D': 2, 'E': 4, 'F': 5, 'G': 7, 'A': 9, 'B': 11}\n    if not isinstance(x, str) or len(x) < 2 or x[0] not in names:\n        return None\n    i = 1\n    acc = 0\n    while i < len(x) and x[i] in '#bx':\n        acc += {'#': 1, 'b': -1, 'x': 2}[x[i]]\n        i += 1\n    tail = x[i:]\n    neg = tail.startswith('-')\n    digits = tail[1:] if neg else tail\n    if not digits.isdigit():\n        return None\n    octave = -int(digits) if neg else int(digits)\n    midi = (octave + 1) * 12 + names[x[0]] + acc\n    if midi < 0 or midi > 128:\n        return None\n    return midi\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('C4', 60), ('A4', 69), ('C-1', 0), ('G9', 127), ('G#9', None), ('B#3', 60), ('Cb4', 59), ('Fx4', 67)], [('G9', 127), ('Ab9', None), ('B#3', 60), ('Cb4', 59), ('Fx4', 67), ('Ebb4', 62), ('Dbbb4', 59), ('Cb-1', None)], [('G9', 127), ('G#9', None), ('Ebb4', 62), ('Dbbb4', 59), ('Cb-1', None), ('B-1', 11), ('E4', 64), ('F4', 65)], [('G9', 127), ('Ab9', None), ('B-1', 11), ('E4', 64), ('F4', 65), ('B4', 71), ('Bb3', 58), ('C0', 12)], [('G9', 127), ('G#9', None), ('B4', 71), ('Bb3', 58), ('C0', 12), ('D#0', 15), ('Cx-1', 2), ('H4', 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"},"fixed":{"sha256":"fcddd08d58191439a871a7f80c610f8a9e2d4e59feb82aa29f3f0f02d449bb47","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    names = {'C': 0, 'D': 2, 'E': 4, 'F': 5, 'G': 7, 'A': 9, 'B': 11}\n    if not isinstance(x, str) or len(x) < 2 or x[0] not in names:\n        return None\n    i = 1\n    acc = 0\n    while i < len(x) and x[i] in '#bx':\n        acc += {'#': 1, 'b': -1, 'x': 2}[x[i]]\n        i += 1\n    tail = x[i:]\n    neg = tail.startswith('-')\n    digits = tail[1:] if neg else tail\n    if not digits.isdigit():\n        return None\n    octave = -int(digits) if neg else int(digits)\n    midi = (octave + 1) * 12 + names[x[0]] + acc\n    if midi < 0 or midi > 127:\n        return None\n    return midi\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('C4', 60), ('A4', 69), ('C-1', 0), ('G9', 127), ('G#9', None), ('B#3', 60), ('Cb4', 59), ('Fx4', 67)], [('G9', 127), ('Ab9', None), ('B#3', 60), ('Cb4', 59), ('Fx4', 67), ('Ebb4', 62), ('Dbbb4', 59), ('Cb-1', None)], [('G9', 127), ('G#9', None), ('Ebb4', 62), ('Dbbb4', 59), ('Cb-1', None), ('B-1', 11), ('E4', 64), ('F4', 65)], [('G9', 127), ('Ab9', None), ('B-1', 11), ('E4', 64), ('F4', 65), ('B4', 71), ('Bb3', 58), ('C0', 12)], [('G9', 127), ('G#9', None), ('B4', 71), ('Bb3', 58), ('C0', 12), ('D#0', 15), ('Cx-1', 2), ('H4', 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-spelled-midi-upper-midi-bound","generated_at":"2026-09-29T14:49:57.652195+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Pitch spelling and interval arithmetic decide the notes that notation, transposition and analysis tools display or play.","repair":"Restore the upper MIDI bound step so that it reads `midi > 127`.","root_cause":"The upper range check compares against 128, one past the last valid seven-bit key number.","sha256":"35b6d7158a8384bffec920364ddb6b5d233671e3cd01a48a9a0cdbe26925c773","title":"Spelled pitch to MIDI key number: range check admits key 128 · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.764,"exit_code":1,"observations":[{"actual":60,"check":"oracle 0","expected":60,"passed":true},{"actual":69,"check":"oracle 1","expected":69,"passed":true},{"actual":0,"check":"oracle 2","expected":0,"passed":true},{"actual":null,"check":"oracle 3","expected":127,"passed":false},{"actual":null,"check":"oracle 4","expected":null,"passed":true},{"actual":60,"check":"oracle 5","expected":60,"passed":true},{"actual":59,"check":"oracle 6","expected":59,"passed":true},{"actual":67,"check":"oracle 7","expected":67,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": 60, \"expected\": 60, \"passed\": true}, {\"check\": \"oracle 1\", \"actual\": 69, \"expected\": 69, \"passed\": true}, {\"check\": \"oracle 2\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": null, \"expected\": 127, \"passed\": false}, {\"check\": \"oracle 4\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 5\", \"actual\": 60, \"expected\": 60, \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": 59, \"expected\": 59, \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": 67, \"expected\": 67, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.577,"exit_code":1,"observations":[{"actual":60,"check":"oracle 0","expected":60,"passed":true},{"actual":69,"check":"oracle 1","expected":69,"passed":true},{"actual":0,"check":"oracle 2","expected":0,"passed":true},{"actual":127,"check":"oracle 3","expected":127,"passed":true},{"actual":128,"check":"oracle 4","expected":null,"passed":false},{"actual":60,"check":"oracle 5","expected":60,"passed":true},{"actual":59,"check":"oracle 6","expected":59,"passed":true},{"actual":67,"check":"oracle 7","expected":67,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": 60, \"expected\": 60, \"passed\": true}, {\"check\": \"oracle 1\", \"actual\": 69, \"expected\": 69, \"passed\": true}, {\"check\": \"oracle 2\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": 127, \"expected\": 127, \"passed\": true}, {\"check\": \"oracle 4\", \"actual\": 128, \"expected\": null, \"passed\": false}, {\"check\": \"oracle 5\", \"actual\": 60, \"expected\": 60, \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": 59, \"expected\": 59, \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": 67, \"expected\": 67, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.662,"exit_code":0,"observations":[{"actual":60,"check":"oracle 0","expected":60,"passed":true},{"actual":69,"check":"oracle 1","expected":69,"passed":true},{"actual":0,"check":"oracle 2","expected":0,"passed":true},{"actual":127,"check":"oracle 3","expected":127,"passed":true},{"actual":null,"check":"oracle 4","expected":null,"passed":true},{"actual":60,"check":"oracle 5","expected":60,"passed":true},{"actual":59,"check":"oracle 6","expected":59,"passed":true},{"actual":67,"check":"oracle 7","expected":67,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": 60, \"expected\": 60, \"passed\": true}, {\"check\": \"oracle 1\", \"actual\": 69, \"expected\": 69, \"passed\": true}, {\"check\": \"oracle 2\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": 127, \"expected\": 127, \"passed\": true}, {\"check\": \"oracle 4\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 5\", \"actual\": 60, \"expected\": 60, \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": 59, \"expected\": 59, \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": 67, \"expected\": 67, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}