{"abstract":"Every spelled pitch lands exactly one octave low, so C4 reports 48 and A4 reports 57.","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":"Special-casing only positive octaves collapses octave 0 onto octave -1, so C0 still reports 0 instead of 12.","family":"w2-music-interval-spelled-midi-octave-origin","id":"FA-80841","implementations":{"attempt":{"sha256":"1e32f28208f8c868ba7f5661eff186b9b81b3c5713fc7ffb9e11b79e3f1b444a","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 * 12 + 12 if octave > 0 else 0) + 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), ('C-1', 0), ('Cb-1', None), ('C0', 12), ('H4', None), ('C', None), ('c4', None), ('C-2', None)], [('A4', 69), ('G9', 127), ('C0', 12), ('D#0', 15), ('c4', None), ('C#', None), ('C4x', None), ('C--1', None)], [('C4', 60), ('A4', 69), ('C-1', 0), ('G9', 127), ('G#9', None), ('D#0', 15), ('A0', 21), ('C--1', None)], [('C-1', 0), ('G9', 127), ('G#9', None), ('Ab9', None), ('B#3', 60), ('Cb4', 59), ('A0', 21), ('C-2', None)], [('G#9', None), ('Ab9', None), ('B#3', 60), ('Cb4', 59), ('Fx4', 67), ('Ebb4', 62), ('C0', 12), ('C-2', 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":"6435dbaabd4f9555cadef02a920fedb59c66dda367e79deef9968e2516f09343","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 * 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), ('C-1', 0), ('Cb-1', None), ('C0', 12), ('H4', None), ('C', None), ('c4', None), ('C-2', None)], [('A4', 69), ('G9', 127), ('C0', 12), ('D#0', 15), ('c4', None), ('C#', None), ('C4x', None), ('C--1', None)], [('C4', 60), ('A4', 69), ('C-1', 0), ('G9', 127), ('G#9', None), ('D#0', 15), ('A0', 21), ('C--1', None)], [('C-1', 0), ('G9', 127), ('G#9', None), ('Ab9', None), ('B#3', 60), ('Cb4', 59), ('A0', 21), ('C-2', None)], [('G#9', None), ('Ab9', None), ('B#3', 60), ('Cb4', 59), ('Fx4', 67), ('Ebb4', 62), ('C0', 12), ('C-2', 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":"b0b4bcbd9796f3696068ec2355ca0672698bc1336fdad0355bc52d50ed5a294c","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), ('C-1', 0), ('Cb-1', None), ('C0', 12), ('H4', None), ('C', None), ('c4', None), ('C-2', None)], [('A4', 69), ('G9', 127), ('C0', 12), ('D#0', 15), ('c4', None), ('C#', None), ('C4x', None), ('C--1', None)], [('C4', 60), ('A4', 69), ('C-1', 0), ('G9', 127), ('G#9', None), ('D#0', 15), ('A0', 21), ('C--1', None)], [('C-1', 0), ('G9', 127), ('G#9', None), ('Ab9', None), ('B#3', 60), ('Cb4', 59), ('A0', 21), ('C-2', None)], [('G#9', None), ('Ab9', None), ('B#3', 60), ('Cb4', 59), ('Fx4', 67), ('Ebb4', 62), ('C0', 12), ('C-2', 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-octave-origin","generated_at":"2026-09-29T14:49:57.433633+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 octave origin step so that it reads `(octave + 1) * 12`.","root_cause":"The octave contribution multiplies the spelled octave by twelve without shifting the origin so that C-1 is key zero.","sha256":"e8dc075725e2accef32e024b58f5e9ca791614fc6b83bda783a4a099e96ece65","title":"Spelled pitch to MIDI key number: octave numbered from zero at middle C minus four · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.182,"exit_code":1,"observations":[{"actual":60,"check":"oracle 0","expected":60,"passed":true},{"actual":0,"check":"oracle 1","expected":0,"passed":true},{"actual":null,"check":"oracle 2","expected":null,"passed":true},{"actual":0,"check":"oracle 3","expected":12,"passed":false},{"actual":null,"check":"oracle 4","expected":null,"passed":true},{"actual":null,"check":"oracle 5","expected":null,"passed":true},{"actual":null,"check":"oracle 6","expected":null,"passed":true},{"actual":0,"check":"oracle 7","expected":null,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": 60, \"expected\": 60, \"passed\": true}, {\"check\": \"oracle 1\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"oracle 2\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": 0, \"expected\": 12, \"passed\": false}, {\"check\": \"oracle 4\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 5\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": 0, \"expected\": null, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.203,"exit_code":1,"observations":[{"actual":48,"check":"oracle 0","expected":60,"passed":false},{"actual":null,"check":"oracle 1","expected":0,"passed":false},{"actual":null,"check":"oracle 2","expected":null,"passed":true},{"actual":0,"check":"oracle 3","expected":12,"passed":false},{"actual":null,"check":"oracle 4","expected":null,"passed":true},{"actual":null,"check":"oracle 5","expected":null,"passed":true},{"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\": 48, \"expected\": 60, \"passed\": false}, {\"check\": \"oracle 1\", \"actual\": null, \"expected\": 0, \"passed\": false}, {\"check\": \"oracle 2\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": 0, \"expected\": 12, \"passed\": false}, {\"check\": \"oracle 4\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 5\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.697,"exit_code":0,"observations":[{"actual":60,"check":"oracle 0","expected":60,"passed":true},{"actual":0,"check":"oracle 1","expected":0,"passed":true},{"actual":null,"check":"oracle 2","expected":null,"passed":true},{"actual":12,"check":"oracle 3","expected":12,"passed":true},{"actual":null,"check":"oracle 4","expected":null,"passed":true},{"actual":null,"check":"oracle 5","expected":null,"passed":true},{"actual":null,"check":"oracle 6","expected":null,"passed":true},{"actual":null,"check":"oracle 7","expected":null,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": 60, \"expected\": 60, \"passed\": true}, {\"check\": \"oracle 1\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"oracle 2\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": 12, \"expected\": 12, \"passed\": true}, {\"check\": \"oracle 4\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 5\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}