{"abstract":"An unknown spelling such as \"weird\" yields flat syllables instead of None.","category":"Music interval and transposition theory","checks":8,"contract":"Input [tonic_pc, pitch, spelling] with integer pitch values and spelling sharp or flat. The relative pitch class (pitch - tonic) mod 12 maps diatonic degrees to do re mi fa sol la ti; chromatic degrees use di ri fi si li for sharp spelling and ra me se le te for flat spelling. Invalid input returns None.","evaluation_group":"w2-music-interval-movable-do","failed_approach":"Checking only for a string type still accepts arbitrary spelling names.","family":"w2-music-interval-movable-do-spelling-validation","id":"FA-81316","implementations":{"attempt":{"sha256":"8a83e14e4a30f268b487b510c3cd68d6db419601dc4449b369b62fd06aabf6b4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    if not isinstance(x, list) or len(x) != 3:\n        return None\n    tonic, pitch, spelling = x\n    if not isinstance(tonic, int) or not isinstance(pitch, int) or not isinstance(spelling, str):\n        return None\n    rel = (pitch - tonic) % 12\n    diatonic = {0: 'do', 2: 're', 4: 'mi', 5: 'fa', 7: 'sol', 9: 'la', 11: 'ti'}\n    if rel in diatonic:\n        return diatonic[rel]\n    if spelling == 'sharp':\n        return {1: 'di', 3: 'ri', 6: 'fi', 8: 'si', 10: 'li'}[rel]\n    return {1: 'ra', 3: 'me', 6: 'se', 8: 'le', 10: 'te'}[rel]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[([0, 60, 'sharp'], 'do'), ([0, 62, 'flat'], 're'), ([0, 67, 'sharp'], 'sol'), ([0, 71, 'flat'], 'ti'), ([0, 61, 'sharp'], 'di'), ([0, 61, 'flat'], 'ra'), ([0, 66, 'sharp'], 'fi'), ([0, 65, 'weird'], None)], [([0, 71, 'flat'], 'ti'), ([0, 61, 'sharp'], 'di'), ([0, 61, 'flat'], 'ra'), ([0, 66, 'sharp'], 'fi'), ([0, 66, 'flat'], 'se'), ([0, 70, 'flat'], 'te'), ([0, 70, 'sharp'], 'li'), ([0, 65, 'weird'], None)], [([0, 66, 'sharp'], 'fi'), ([0, 66, 'flat'], 'se'), ([0, 70, 'flat'], 'te'), ([0, 70, 'sharp'], 'li'), ([7, 66, 'sharp'], 'ti'), ([7, 64, 'flat'], 'la'), ([7, 60, 'sharp'], 'fa'), ([0, 65, 'weird'], None)], [([0, 70, 'sharp'], 'li'), ([7, 66, 'sharp'], 'ti'), ([7, 64, 'flat'], 'la'), ([7, 60, 'sharp'], 'fa'), ([2, 64, 'sharp'], 're'), ([2, 63, 'flat'], 'ra'), ([5, 58, 'flat'], 'fa'), ([0, 65, 'weird'], None)], [([7, 60, 'sharp'], 'fa'), ([2, 64, 'sharp'], 're'), ([2, 63, 'flat'], 'ra'), ([5, 58, 'flat'], 'fa'), ([0, 65, 'weird'], None), ([0, 63, None], None), ([9, 57, 'flat'], 'do'), ([4, 69, 'sharp'], 'fa')]]\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":"835217801696dc98288d7a62b471e44ccec786165b3aad5fe1c0380c112bbbcc","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    if not isinstance(x, list) or len(x) != 3:\n        return None\n    tonic, pitch, spelling = x\n    if not isinstance(tonic, int) or not isinstance(pitch, int) or spelling is None:\n        return None\n    rel = (pitch - tonic) % 12\n    diatonic = {0: 'do', 2: 're', 4: 'mi', 5: 'fa', 7: 'sol', 9: 'la', 11: 'ti'}\n    if rel in diatonic:\n        return diatonic[rel]\n    if spelling == 'sharp':\n        return {1: 'di', 3: 'ri', 6: 'fi', 8: 'si', 10: 'li'}[rel]\n    return {1: 'ra', 3: 'me', 6: 'se', 8: 'le', 10: 'te'}[rel]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[([0, 60, 'sharp'], 'do'), ([0, 62, 'flat'], 're'), ([0, 67, 'sharp'], 'sol'), ([0, 71, 'flat'], 'ti'), ([0, 61, 'sharp'], 'di'), ([0, 61, 'flat'], 'ra'), ([0, 66, 'sharp'], 'fi'), ([0, 65, 'weird'], None)], [([0, 71, 'flat'], 'ti'), ([0, 61, 'sharp'], 'di'), ([0, 61, 'flat'], 'ra'), ([0, 66, 'sharp'], 'fi'), ([0, 66, 'flat'], 'se'), ([0, 70, 'flat'], 'te'), ([0, 70, 'sharp'], 'li'), ([0, 65, 'weird'], None)], [([0, 66, 'sharp'], 'fi'), ([0, 66, 'flat'], 'se'), ([0, 70, 'flat'], 'te'), ([0, 70, 'sharp'], 'li'), ([7, 66, 'sharp'], 'ti'), ([7, 64, 'flat'], 'la'), ([7, 60, 'sharp'], 'fa'), ([0, 65, 'weird'], None)], [([0, 70, 'sharp'], 'li'), ([7, 66, 'sharp'], 'ti'), ([7, 64, 'flat'], 'la'), ([7, 60, 'sharp'], 'fa'), ([2, 64, 'sharp'], 're'), ([2, 63, 'flat'], 'ra'), ([5, 58, 'flat'], 'fa'), ([0, 65, 'weird'], None)], [([7, 60, 'sharp'], 'fa'), ([2, 64, 'sharp'], 're'), ([2, 63, 'flat'], 'ra'), ([5, 58, 'flat'], 'fa'), ([0, 65, 'weird'], None), ([0, 63, None], None), ([9, 57, 'flat'], 'do'), ([4, 69, 'sharp'], 'fa')]]\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":"bf5a8a690205630dfa9eaf200aea6e26b3c6503abe2aca4caeb111a755d8d5d5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    if not isinstance(x, list) or len(x) != 3:\n        return None\n    tonic, pitch, spelling = x\n    if not isinstance(tonic, int) or not isinstance(pitch, int) or spelling not in ('sharp', 'flat'):\n        return None\n    rel = (pitch - tonic) % 12\n    diatonic = {0: 'do', 2: 're', 4: 'mi', 5: 'fa', 7: 'sol', 9: 'la', 11: 'ti'}\n    if rel in diatonic:\n        return diatonic[rel]\n    if spelling == 'sharp':\n        return {1: 'di', 3: 'ri', 6: 'fi', 8: 'si', 10: 'li'}[rel]\n    return {1: 'ra', 3: 'me', 6: 'se', 8: 'le', 10: 'te'}[rel]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[([0, 60, 'sharp'], 'do'), ([0, 62, 'flat'], 're'), ([0, 67, 'sharp'], 'sol'), ([0, 71, 'flat'], 'ti'), ([0, 61, 'sharp'], 'di'), ([0, 61, 'flat'], 'ra'), ([0, 66, 'sharp'], 'fi'), ([0, 65, 'weird'], None)], [([0, 71, 'flat'], 'ti'), ([0, 61, 'sharp'], 'di'), ([0, 61, 'flat'], 'ra'), ([0, 66, 'sharp'], 'fi'), ([0, 66, 'flat'], 'se'), ([0, 70, 'flat'], 'te'), ([0, 70, 'sharp'], 'li'), ([0, 65, 'weird'], None)], [([0, 66, 'sharp'], 'fi'), ([0, 66, 'flat'], 'se'), ([0, 70, 'flat'], 'te'), ([0, 70, 'sharp'], 'li'), ([7, 66, 'sharp'], 'ti'), ([7, 64, 'flat'], 'la'), ([7, 60, 'sharp'], 'fa'), ([0, 65, 'weird'], None)], [([0, 70, 'sharp'], 'li'), ([7, 66, 'sharp'], 'ti'), ([7, 64, 'flat'], 'la'), ([7, 60, 'sharp'], 'fa'), ([2, 64, 'sharp'], 're'), ([2, 63, 'flat'], 'ra'), ([5, 58, 'flat'], 'fa'), ([0, 65, 'weird'], None)], [([7, 60, 'sharp'], 'fa'), ([2, 64, 'sharp'], 're'), ([2, 63, 'flat'], 'ra'), ([5, 58, 'flat'], 'fa'), ([0, 65, 'weird'], None), ([0, 63, None], None), ([9, 57, 'flat'], 'do'), ([4, 69, 'sharp'], 'fa')]]\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-movable-do-spelling-validation","generated_at":"2026-09-29T14:50:01.847114+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Ear-training and sight-singing apps label notes with movable-do syllables relative to the key.","repair":"Restore the spelling validation step so that it reads `spelling not in ('sharp', 'flat')`.","root_cause":"Validation only rejects a missing spelling, so any other value falls through to the flat table.","sha256":"9874d3e1de35303f572922d2c41e9493e9e8d22a2540d91203f29ec6ad18217d","title":"Movable-do chromatic solfege syllables: unknown spelling defaults to flats · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.759,"exit_code":1,"observations":[{"actual":"do","check":"oracle 0","expected":"do","passed":true},{"actual":"re","check":"oracle 1","expected":"re","passed":true},{"actual":"sol","check":"oracle 2","expected":"sol","passed":true},{"actual":"ti","check":"oracle 3","expected":"ti","passed":true},{"actual":"di","check":"oracle 4","expected":"di","passed":true},{"actual":"ra","check":"oracle 5","expected":"ra","passed":true},{"actual":"fi","check":"oracle 6","expected":"fi","passed":true},{"actual":"fa","check":"oracle 7","expected":null,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": \"do\", \"expected\": \"do\", \"passed\": true}, {\"check\": \"oracle 1\", \"actual\": \"re\", \"expected\": \"re\", \"passed\": true}, {\"check\": \"oracle 2\", \"actual\": \"sol\", \"expected\": \"sol\", \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": \"ti\", \"expected\": \"ti\", \"passed\": true}, {\"check\": \"oracle 4\", \"actual\": \"di\", \"expected\": \"di\", \"passed\": true}, {\"check\": \"oracle 5\", \"actual\": \"ra\", \"expected\": \"ra\", \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": \"fi\", \"expected\": \"fi\", \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": \"fa\", \"expected\": null, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.876,"exit_code":1,"observations":[{"actual":"do","check":"oracle 0","expected":"do","passed":true},{"actual":"re","check":"oracle 1","expected":"re","passed":true},{"actual":"sol","check":"oracle 2","expected":"sol","passed":true},{"actual":"ti","check":"oracle 3","expected":"ti","passed":true},{"actual":"di","check":"oracle 4","expected":"di","passed":true},{"actual":"ra","check":"oracle 5","expected":"ra","passed":true},{"actual":"fi","check":"oracle 6","expected":"fi","passed":true},{"actual":"fa","check":"oracle 7","expected":null,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": \"do\", \"expected\": \"do\", \"passed\": true}, {\"check\": \"oracle 1\", \"actual\": \"re\", \"expected\": \"re\", \"passed\": true}, {\"check\": \"oracle 2\", \"actual\": \"sol\", \"expected\": \"sol\", \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": \"ti\", \"expected\": \"ti\", \"passed\": true}, {\"check\": \"oracle 4\", \"actual\": \"di\", \"expected\": \"di\", \"passed\": true}, {\"check\": \"oracle 5\", \"actual\": \"ra\", \"expected\": \"ra\", \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": \"fi\", \"expected\": \"fi\", \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": \"fa\", \"expected\": null, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.785,"exit_code":0,"observations":[{"actual":"do","check":"oracle 0","expected":"do","passed":true},{"actual":"re","check":"oracle 1","expected":"re","passed":true},{"actual":"sol","check":"oracle 2","expected":"sol","passed":true},{"actual":"ti","check":"oracle 3","expected":"ti","passed":true},{"actual":"di","check":"oracle 4","expected":"di","passed":true},{"actual":"ra","check":"oracle 5","expected":"ra","passed":true},{"actual":"fi","check":"oracle 6","expected":"fi","passed":true},{"actual":null,"check":"oracle 7","expected":null,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": \"do\", \"expected\": \"do\", \"passed\": true}, {\"check\": \"oracle 1\", \"actual\": \"re\", \"expected\": \"re\", \"passed\": true}, {\"check\": \"oracle 2\", \"actual\": \"sol\", \"expected\": \"sol\", \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": \"ti\", \"expected\": \"ti\", \"passed\": true}, {\"check\": \"oracle 4\", \"actual\": \"di\", \"expected\": \"di\", \"passed\": true}, {\"check\": \"oracle 5\", \"actual\": \"ra\", \"expected\": \"ra\", \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": \"fi\", \"expected\": \"fi\", \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}