{"abstract":"Doubly augmented and doubly diminished intervals such as AA4 are rejected.","category":"Music interval and transposition theory","checks":8,"contract":"Input an interval string: quality from P, M, m, A, d, AA, dd followed by a positive integer. Compound numbers above 8 reduce by 7 until <= 8. P is valid only for 1, 4, 5, 8; M and m only for 2, 3, 6, 7. Inversion maps M<->m, A<->d, AA<->dd, P->P and number n -> 9-n. Invalid input returns None.","evaluation_group":"w2-music-interval-interval-inversion","failed_approach":"Taking everything but the last character breaks two-digit numbers such as M10.","family":"w2-music-interval-interval-inversion-quality-token-split","id":"FA-81256","implementations":{"attempt":{"sha256":"15a9a71b5d2c297eb388dd324eb77c12d513c9b3e29e72a97c6fa5991d5b3cbb","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    swap = {'M': 'm', 'm': 'M', 'A': 'd', 'd': 'A', 'AA': 'dd', 'dd': 'AA', 'P': 'P'}\n    if not isinstance(x, str):\n        return None\n    q = x[:-1]\n    digits = x[len(q):]\n    if q not in swap or not digits.isdigit() or int(digits) < 1:\n        return None\n    n = int(digits)\n    while n > 8:\n        n -= 7\n    perfect = n in (1, 4, 5, 8)\n    if (q == 'P' and not perfect) or (q in ('M', 'm') and perfect):\n        return None\n    return swap[q] + str(9 - n)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('M3', 'm6'), ('m3', 'M6'), ('P5', 'P4'), ('P4', 'P5'), ('M10', 'm6'), ('AA4', 'dd5'), ('A11', 'd5'), ('dd7', 'AA2')], [('P4', 'P5'), ('P1', 'P8'), ('P8', 'P1'), ('A4', 'd5'), ('P15', 'P1'), ('dd5', 'AA4'), ('AA6', 'dd3'), ('m14', 'M2')], [('A4', 'd5'), ('d5', 'A4'), ('M2', 'm7'), ('m7', 'M2'), ('P12', 'P4'), ('AA4', 'dd5'), ('dd7', 'AA2'), ('P22', 'P1')], [('m7', 'M2'), ('M10', 'm6'), ('dd5', 'AA4'), ('A1', 'd8'), ('d8', 'A1'), ('M6', 'm3'), ('A11', 'd5'), ('AA6', 'dd3')], [('P15', 'P1'), ('AA4', 'dd5'), ('M6', 'm3'), ('m9', 'M7'), ('P3', None), ('M4', None), ('dd7', 'AA2'), ('m14', 'M2')]]\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":"5682edbb0faba2f580c09a15ef5004cfd82a7175987b7340877da6a7eaeb946d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    swap = {'M': 'm', 'm': 'M', 'A': 'd', 'd': 'A', 'AA': 'dd', 'dd': 'AA', 'P': 'P'}\n    if not isinstance(x, str):\n        return None\n    q = x[0]\n    digits = x[len(q):]\n    if q not in swap or not digits.isdigit() or int(digits) < 1:\n        return None\n    n = int(digits)\n    while n > 8:\n        n -= 7\n    perfect = n in (1, 4, 5, 8)\n    if (q == 'P' and not perfect) or (q in ('M', 'm') and perfect):\n        return None\n    return swap[q] + str(9 - n)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('M3', 'm6'), ('m3', 'M6'), ('P5', 'P4'), ('P4', 'P5'), ('M10', 'm6'), ('AA4', 'dd5'), ('A11', 'd5'), ('dd7', 'AA2')], [('P4', 'P5'), ('P1', 'P8'), ('P8', 'P1'), ('A4', 'd5'), ('P15', 'P1'), ('dd5', 'AA4'), ('AA6', 'dd3'), ('m14', 'M2')], [('A4', 'd5'), ('d5', 'A4'), ('M2', 'm7'), ('m7', 'M2'), ('P12', 'P4'), ('AA4', 'dd5'), ('dd7', 'AA2'), ('P22', 'P1')], [('m7', 'M2'), ('M10', 'm6'), ('dd5', 'AA4'), ('A1', 'd8'), ('d8', 'A1'), ('M6', 'm3'), ('A11', 'd5'), ('AA6', 'dd3')], [('P15', 'P1'), ('AA4', 'dd5'), ('M6', 'm3'), ('m9', 'M7'), ('P3', None), ('M4', None), ('dd7', 'AA2'), ('m14', 'M2')]]\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":"979bdce485a8936851f0762ca20a445c680c60567839dea2f8433f4506e6ce1a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    swap = {'M': 'm', 'm': 'M', 'A': 'd', 'd': 'A', 'AA': 'dd', 'dd': 'AA', 'P': 'P'}\n    if not isinstance(x, str):\n        return None\n    q = x.rstrip('0123456789')\n    digits = x[len(q):]\n    if q not in swap or not digits.isdigit() or int(digits) < 1:\n        return None\n    n = int(digits)\n    while n > 8:\n        n -= 7\n    perfect = n in (1, 4, 5, 8)\n    if (q == 'P' and not perfect) or (q in ('M', 'm') and perfect):\n        return None\n    return swap[q] + str(9 - n)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('M3', 'm6'), ('m3', 'M6'), ('P5', 'P4'), ('P4', 'P5'), ('M10', 'm6'), ('AA4', 'dd5'), ('A11', 'd5'), ('dd7', 'AA2')], [('P4', 'P5'), ('P1', 'P8'), ('P8', 'P1'), ('A4', 'd5'), ('P15', 'P1'), ('dd5', 'AA4'), ('AA6', 'dd3'), ('m14', 'M2')], [('A4', 'd5'), ('d5', 'A4'), ('M2', 'm7'), ('m7', 'M2'), ('P12', 'P4'), ('AA4', 'dd5'), ('dd7', 'AA2'), ('P22', 'P1')], [('m7', 'M2'), ('M10', 'm6'), ('dd5', 'AA4'), ('A1', 'd8'), ('d8', 'A1'), ('M6', 'm3'), ('A11', 'd5'), ('AA6', 'dd3')], [('P15', 'P1'), ('AA4', 'dd5'), ('M6', 'm3'), ('m9', 'M7'), ('P3', None), ('M4', None), ('dd7', 'AA2'), ('m14', 'M2')]]\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-interval-inversion-quality-token-split","generated_at":"2026-09-29T14:50:01.252877+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 quality token split step so that it reads `x.rstrip('0123456789')`.","root_cause":"The quality is taken to be the first character only.","sha256":"c2a83c08e7fa95826c3850797daa0356cacac854d2ead00cdd73e580a09cc333","title":"Interval inversion by quality and number: multi-letter qualities not parsed · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.064,"exit_code":1,"observations":[{"actual":"m6","check":"oracle 0","expected":"m6","passed":true},{"actual":"M6","check":"oracle 1","expected":"M6","passed":true},{"actual":"P4","check":"oracle 2","expected":"P4","passed":true},{"actual":"P5","check":"oracle 3","expected":"P5","passed":true},{"actual":null,"check":"oracle 4","expected":"m6","passed":false},{"actual":"dd5","check":"oracle 5","expected":"dd5","passed":true},{"actual":null,"check":"oracle 6","expected":"d5","passed":false},{"actual":"AA2","check":"oracle 7","expected":"AA2","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": \"m6\", \"expected\": \"m6\", \"passed\": true}, {\"check\": \"oracle 1\", \"actual\": \"M6\", \"expected\": \"M6\", \"passed\": true}, {\"check\": \"oracle 2\", \"actual\": \"P4\", \"expected\": \"P4\", \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": \"P5\", \"expected\": \"P5\", \"passed\": true}, {\"check\": \"oracle 4\", \"actual\": null, \"expected\": \"m6\", \"passed\": false}, {\"check\": \"oracle 5\", \"actual\": \"dd5\", \"expected\": \"dd5\", \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": null, \"expected\": \"d5\", \"passed\": false}, {\"check\": \"oracle 7\", \"actual\": \"AA2\", \"expected\": \"AA2\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.765,"exit_code":1,"observations":[{"actual":"m6","check":"oracle 0","expected":"m6","passed":true},{"actual":"M6","check":"oracle 1","expected":"M6","passed":true},{"actual":"P4","check":"oracle 2","expected":"P4","passed":true},{"actual":"P5","check":"oracle 3","expected":"P5","passed":true},{"actual":"m6","check":"oracle 4","expected":"m6","passed":true},{"actual":null,"check":"oracle 5","expected":"dd5","passed":false},{"actual":"d5","check":"oracle 6","expected":"d5","passed":true},{"actual":null,"check":"oracle 7","expected":"AA2","passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": \"m6\", \"expected\": \"m6\", \"passed\": true}, {\"check\": \"oracle 1\", \"actual\": \"M6\", \"expected\": \"M6\", \"passed\": true}, {\"check\": \"oracle 2\", \"actual\": \"P4\", \"expected\": \"P4\", \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": \"P5\", \"expected\": \"P5\", \"passed\": true}, {\"check\": \"oracle 4\", \"actual\": \"m6\", \"expected\": \"m6\", \"passed\": true}, {\"check\": \"oracle 5\", \"actual\": null, \"expected\": \"dd5\", \"passed\": false}, {\"check\": \"oracle 6\", \"actual\": \"d5\", \"expected\": \"d5\", \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": null, \"expected\": \"AA2\", \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.428,"exit_code":0,"observations":[{"actual":"m6","check":"oracle 0","expected":"m6","passed":true},{"actual":"M6","check":"oracle 1","expected":"M6","passed":true},{"actual":"P4","check":"oracle 2","expected":"P4","passed":true},{"actual":"P5","check":"oracle 3","expected":"P5","passed":true},{"actual":"m6","check":"oracle 4","expected":"m6","passed":true},{"actual":"dd5","check":"oracle 5","expected":"dd5","passed":true},{"actual":"d5","check":"oracle 6","expected":"d5","passed":true},{"actual":"AA2","check":"oracle 7","expected":"AA2","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": \"m6\", \"expected\": \"m6\", \"passed\": true}, {\"check\": \"oracle 1\", \"actual\": \"M6\", \"expected\": \"M6\", \"passed\": true}, {\"check\": \"oracle 2\", \"actual\": \"P4\", \"expected\": \"P4\", \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": \"P5\", \"expected\": \"P5\", \"passed\": true}, {\"check\": \"oracle 4\", \"actual\": \"m6\", \"expected\": \"m6\", \"passed\": true}, {\"check\": \"oracle 5\", \"actual\": \"dd5\", \"expected\": \"dd5\", \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": \"d5\", \"expected\": \"d5\", \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": \"AA2\", \"expected\": \"AA2\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}