{"abstract":"Raised degrees are sung with flat syllables (ra, me) when sharp spelling is requested and vice versa.","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.","contract_signature":"x","evaluation_group":"w2-music-interval-movable-do","failed_approach":"Forcing fi for the tritone regardless of spelling still gives fi instead of se in flat spelling.","family":"w2-music-interval-movable-do-chromatic-spelling-branch","id":"FA-81311","implementations":{"attempt":{"sha256":"0ce81251fbbb82e6ffef7ba1d5e2d65b0c78ef275cde9c89ad282d6ca04d659c","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' or rel == 6:\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, 66, 'sharp'], 'fi'), ([0, 66, 'flat'], 'se'), ([7, 66, 'sharp'], 'ti')], [([0, 71, 'flat'], 'ti'), ([0, 61, 'flat'], 'ra'), ([0, 66, 'flat'], 'se'), ([7, 66, 'sharp'], 'ti'), ([7, 64, 'flat'], 'la'), ([7, 60, 'sharp'], 'fa'), ([2, 64, 'sharp'], 're'), ([5, 58, 'flat'], 'fa')], [([0, 66, 'sharp'], 'fi'), ([0, 66, 'flat'], 'se'), ([0, 70, 'flat'], 'te'), ([7, 60, 'sharp'], 'fa'), ([2, 64, 'sharp'], 're'), ([5, 58, 'flat'], 'fa'), ([0, 65, 'weird'], None), ([0, 63, None], None)], [([0, 61, 'sharp'], 'di'), ([0, 61, 'flat'], 'ra'), ([0, 66, 'flat'], 'se'), ([0, 70, 'sharp'], 'li'), ([0, 65, 'weird'], None), ([0, 63, None], None), ([9, 57, 'flat'], 'do'), ([4, 69, 'sharp'], 'fa')], [([0, 61, 'sharp'], 'di'), ([0, 61, 'flat'], 'ra'), ([0, 66, 'sharp'], 'fi'), ([0, 66, 'flat'], 'se'), ([0, 70, 'flat'], 'te'), ([0, 70, 'sharp'], 'li'), ([2, 63, 'flat'], 'ra'), ([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":"16c77fd659468011ab4858544c105b840eabb2bc8c06e9101baa1c55e30b8183","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, 66, 'sharp'], 'fi'), ([0, 66, 'flat'], 'se'), ([7, 66, 'sharp'], 'ti')], [([0, 71, 'flat'], 'ti'), ([0, 61, 'flat'], 'ra'), ([0, 66, 'flat'], 'se'), ([7, 66, 'sharp'], 'ti'), ([7, 64, 'flat'], 'la'), ([7, 60, 'sharp'], 'fa'), ([2, 64, 'sharp'], 're'), ([5, 58, 'flat'], 'fa')], [([0, 66, 'sharp'], 'fi'), ([0, 66, 'flat'], 'se'), ([0, 70, 'flat'], 'te'), ([7, 60, 'sharp'], 'fa'), ([2, 64, 'sharp'], 're'), ([5, 58, 'flat'], 'fa'), ([0, 65, 'weird'], None), ([0, 63, None], None)], [([0, 61, 'sharp'], 'di'), ([0, 61, 'flat'], 'ra'), ([0, 66, 'flat'], 'se'), ([0, 70, 'sharp'], 'li'), ([0, 65, 'weird'], None), ([0, 63, None], None), ([9, 57, 'flat'], 'do'), ([4, 69, 'sharp'], 'fa')], [([0, 61, 'sharp'], 'di'), ([0, 61, 'flat'], 'ra'), ([0, 66, 'sharp'], 'fi'), ([0, 66, 'flat'], 'se'), ([0, 70, 'flat'], 'te'), ([0, 70, 'sharp'], 'li'), ([2, 63, 'flat'], 'ra'), ([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-chromatic-spelling-branch","generated_at":"2026-09-29T14:50:01.847218+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.","root_cause":"The spelling test is negated, selecting the flat syllable table for sharp spelling.","sha256":"e02b41bc389f8ec13b488497b2930a39fb1921dbf6b8a80884124cd7be1b8a75","title":"Movable-do chromatic solfege syllables: sharp and flat syllable sets swapped · 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":40.882,"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":"fi","check":"oracle 5","expected":"fi","passed":true},{"actual":"fi","check":"oracle 6","expected":"se","passed":false},{"actual":"ti","check":"oracle 7","expected":"ti","passed":true}],"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\": \"fi\", \"expected\": \"fi\", \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": \"fi\", \"expected\": \"se\", \"passed\": false}, {\"check\": \"oracle 7\", \"actual\": \"ti\", \"expected\": \"ti\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.868,"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":"ra","check":"oracle 4","expected":"di","passed":false},{"actual":"se","check":"oracle 5","expected":"fi","passed":false},{"actual":"fi","check":"oracle 6","expected":"se","passed":false},{"actual":"ti","check":"oracle 7","expected":"ti","passed":true}],"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\": \"ra\", \"expected\": \"di\", \"passed\": false}, {\"check\": \"oracle 5\", \"actual\": \"se\", \"expected\": \"fi\", \"passed\": false}, {\"check\": \"oracle 6\", \"actual\": \"fi\", \"expected\": \"se\", \"passed\": false}, {\"check\": \"oracle 7\", \"actual\": \"ti\", \"expected\": \"ti\", \"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."}}