{"abstract":"A four-note triad with a doubled root (C E G C) is labelled with seventh figures (\"7\") instead of root position.","category":"Music interval and transposition theory","checks":8,"contract":"Input 3 or 4 MIDI integers in any order. The pitch-class set must match a template relative to some root (triads 047 037 036 048; sevenths 047t 037t 047e 036t 0369, t=10 e=11); roots are tried in ascending pitch-class order. The bass is the lowest MIDI note. Return [root_pc, figure] with figures \"\", \"6\", \"64\" for triads and \"7\", \"65\", \"43\", \"42\" for sevenths by the bass position in the template; otherwise None.","contract_signature":"x","evaluation_group":"w2-music-interval-figured-bass","failed_approach":"Counting distinct MIDI numbers still treats octave doublings as extra chord members.","family":"w2-music-interval-figured-bass-chord-size-basis","id":"FA-81326","implementations":{"attempt":{"sha256":"f168846a4f74747d45518adc06f4d53e1071265f4da28474b9164af9ced09b73","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 not 3 <= len(x) <= 4 or not all(isinstance(v, int) for v in x):\n        return None\n    bass = min(x)\n    pcs = sorted(set(v % 12 for v in x))\n    for r in pcs:\n        rel = sorted((p - r) % 12 for p in pcs)\n        if rel in ([0, 4, 7], [0, 3, 7], [0, 3, 6], [0, 4, 8], [0, 4, 7, 10], [0, 3, 7, 10], [0, 4, 7, 11], [0, 3, 6, 10], [0, 3, 6, 9]):\n            pos = rel.index((bass - r) % 12)\n            figs = ['', '6', '64'] if len(set(x)) == 3 else ['7', '65', '43', '42']\n            return [r, figs[pos]]\n    return None\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[([60, 64, 67], [0, '']), ([64, 67, 72], [0, '6']), ([67, 72, 76], [0, '64']), ([72, 64, 67], [0, '6']), ([76, 60, 67], [0, '']), ([55, 59, 62, 65], [7, '7']), ([60, 64, 67, 72], [0, '']), ([48, 64, 67, 72], [0, ''])], [([72, 64, 67], [0, '6']), ([76, 60, 67], [0, '']), ([55, 59, 62, 65], [7, '7']), ([59, 62, 65, 67], [7, '65']), ([62, 65, 67, 71], [7, '43']), ([65, 67, 71, 74], [7, '42']), ([60, 64, 67, 72], [0, '']), ([48, 64, 67, 72], [0, ''])], [([59, 62, 65, 67], [7, '65']), ([62, 65, 67, 71], [7, '43']), ([65, 67, 71, 74], [7, '42']), ([60, 64, 67, 72], [0, '']), ([48, 64, 67, 72], [0, '']), ([60, 63, 66, 69], [0, '7']), ([62, 65, 68, 71], [2, '7']), ([59, 62, 65, 69], [11, '7'])], [([60, 64, 67, 72], [0, '']), ([48, 64, 67, 72], [0, '']), ([60, 63, 66, 69], [0, '7']), ([62, 65, 68, 71], [2, '7']), ([59, 62, 65, 69], [11, '7']), ([57, 60, 64], [9, '']), ([60, 62, 67], None), ([60, 64, 68], [0, ''])], [([60, 64, 67, 72], [0, '']), ([48, 64, 67, 72], [0, '']), ([57, 60, 64], [9, '']), ([60, 62, 67], None), ([60, 64, 68], [0, '']), ([64, 60, 67], [0, '']), ([71, 62, 65], [11, '6']), ([60, 61, 62], 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":"774378b3109df7ece77c0293766a0d06df858a5b0f88c41abd2560eaccbce557","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 not 3 <= len(x) <= 4 or not all(isinstance(v, int) for v in x):\n        return None\n    bass = min(x)\n    pcs = sorted(set(v % 12 for v in x))\n    for r in pcs:\n        rel = sorted((p - r) % 12 for p in pcs)\n        if rel in ([0, 4, 7], [0, 3, 7], [0, 3, 6], [0, 4, 8], [0, 4, 7, 10], [0, 3, 7, 10], [0, 4, 7, 11], [0, 3, 6, 10], [0, 3, 6, 9]):\n            pos = rel.index((bass - r) % 12)\n            figs = ['', '6', '64'] if len(x) == 3 else ['7', '65', '43', '42']\n            return [r, figs[pos]]\n    return None\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[([60, 64, 67], [0, '']), ([64, 67, 72], [0, '6']), ([67, 72, 76], [0, '64']), ([72, 64, 67], [0, '6']), ([76, 60, 67], [0, '']), ([55, 59, 62, 65], [7, '7']), ([60, 64, 67, 72], [0, '']), ([48, 64, 67, 72], [0, ''])], [([72, 64, 67], [0, '6']), ([76, 60, 67], [0, '']), ([55, 59, 62, 65], [7, '7']), ([59, 62, 65, 67], [7, '65']), ([62, 65, 67, 71], [7, '43']), ([65, 67, 71, 74], [7, '42']), ([60, 64, 67, 72], [0, '']), ([48, 64, 67, 72], [0, ''])], [([59, 62, 65, 67], [7, '65']), ([62, 65, 67, 71], [7, '43']), ([65, 67, 71, 74], [7, '42']), ([60, 64, 67, 72], [0, '']), ([48, 64, 67, 72], [0, '']), ([60, 63, 66, 69], [0, '7']), ([62, 65, 68, 71], [2, '7']), ([59, 62, 65, 69], [11, '7'])], [([60, 64, 67, 72], [0, '']), ([48, 64, 67, 72], [0, '']), ([60, 63, 66, 69], [0, '7']), ([62, 65, 68, 71], [2, '7']), ([59, 62, 65, 69], [11, '7']), ([57, 60, 64], [9, '']), ([60, 62, 67], None), ([60, 64, 68], [0, ''])], [([60, 64, 67, 72], [0, '']), ([48, 64, 67, 72], [0, '']), ([57, 60, 64], [9, '']), ([60, 62, 67], None), ([60, 64, 68], [0, '']), ([64, 60, 67], [0, '']), ([71, 62, 65], [11, '6']), ([60, 61, 62], 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-figured-bass-chord-size-basis","generated_at":"2026-09-29T14:50:01.890491+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Figured-bass realisation and harmonic analysis depend on identifying chord root and inversion.","root_cause":"Triad versus seventh figures are chosen by the number of input notes rather than distinct pitch classes.","sha256":"d5d69b50a2fb49e9d51367c2f1cd8f6c052286fcd59ee25d11879244b58af7b2","title":"Triad and seventh inversion figures: doubled triad labelled as a seventh chord · 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":37.871,"exit_code":1,"observations":[{"actual":[0,""],"check":"oracle 0","expected":[0,""],"passed":true},{"actual":[0,"6"],"check":"oracle 1","expected":[0,"6"],"passed":true},{"actual":[0,"64"],"check":"oracle 2","expected":[0,"64"],"passed":true},{"actual":[0,"6"],"check":"oracle 3","expected":[0,"6"],"passed":true},{"actual":[0,""],"check":"oracle 4","expected":[0,""],"passed":true},{"actual":[7,"7"],"check":"oracle 5","expected":[7,"7"],"passed":true},{"actual":[0,"7"],"check":"oracle 6","expected":[0,""],"passed":false},{"actual":[0,"7"],"check":"oracle 7","expected":[0,""],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": [0, \"\"], \"expected\": [0, \"\"], \"passed\": true}, {\"check\": \"oracle 1\", \"actual\": [0, \"6\"], \"expected\": [0, \"6\"], \"passed\": true}, {\"check\": \"oracle 2\", \"actual\": [0, \"64\"], \"expected\": [0, \"64\"], \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": [0, \"6\"], \"expected\": [0, \"6\"], \"passed\": true}, {\"check\": \"oracle 4\", \"actual\": [0, \"\"], \"expected\": [0, \"\"], \"passed\": true}, {\"check\": \"oracle 5\", \"actual\": [7, \"7\"], \"expected\": [7, \"7\"], \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": [0, \"7\"], \"expected\": [0, \"\"], \"passed\": false}, {\"check\": \"oracle 7\", \"actual\": [0, \"7\"], \"expected\": [0, \"\"], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.181,"exit_code":1,"observations":[{"actual":[0,""],"check":"oracle 0","expected":[0,""],"passed":true},{"actual":[0,"6"],"check":"oracle 1","expected":[0,"6"],"passed":true},{"actual":[0,"64"],"check":"oracle 2","expected":[0,"64"],"passed":true},{"actual":[0,"6"],"check":"oracle 3","expected":[0,"6"],"passed":true},{"actual":[0,""],"check":"oracle 4","expected":[0,""],"passed":true},{"actual":[7,"7"],"check":"oracle 5","expected":[7,"7"],"passed":true},{"actual":[0,"7"],"check":"oracle 6","expected":[0,""],"passed":false},{"actual":[0,"7"],"check":"oracle 7","expected":[0,""],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": [0, \"\"], \"expected\": [0, \"\"], \"passed\": true}, {\"check\": \"oracle 1\", \"actual\": [0, \"6\"], \"expected\": [0, \"6\"], \"passed\": true}, {\"check\": \"oracle 2\", \"actual\": [0, \"64\"], \"expected\": [0, \"64\"], \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": [0, \"6\"], \"expected\": [0, \"6\"], \"passed\": true}, {\"check\": \"oracle 4\", \"actual\": [0, \"\"], \"expected\": [0, \"\"], \"passed\": true}, {\"check\": \"oracle 5\", \"actual\": [7, \"7\"], \"expected\": [7, \"7\"], \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": [0, \"7\"], \"expected\": [0, \"\"], \"passed\": false}, {\"check\": \"oracle 7\", \"actual\": [0, \"7\"], \"expected\": [0, \"\"], \"passed\": false}], \"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."}}