{"abstract":"A swing of exactly 50% (straight eighths) is rejected instead of returning the input unchanged.","category":"MIDI event timing","checks":8,"contract":"Input [ticks, ppq, swing] with even ppq > 0 and swing 50..75 percent. Within each beat, positions in the first half [0, ppq/2) scale linearly onto [0, split) and positions in the second half onto [split, ppq), where split = ppq*swing/100. The remapped position is floored. Invalid parameters return None.","evaluation_group":"w2-midi-event-timing-swing-remap","failed_approach":"Dropping the lower bound accepts swing below 50%, which rushes offbeats.","family":"w2-midi-event-timing-swing-remap-swing-range","id":"FA-81566","implementations":{"attempt":{"sha256":"f285390de350c5c780d9be3df147d81649e4ccd48edc46ab4af223b2e2e7c51f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    if not isinstance(x, list) or len(x) != 3:\n        return None\n    ticks, ppq, swing = x\n    if ppq <= 0 or ppq % 2 or not swing <= 75:\n        return None\n    half = ppq // 2\n    split = Fraction(ppq * swing, 100)\n    out = []\n    for t in ticks:\n        beat, pos = divmod(t, ppq)\n        if pos < half:\n            new = pos * split / half\n        else:\n            new = split + (pos - half) * (ppq - split) / half\n        out.append(beat * ppq + int(new))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[([[0, 240, 480, 720], 480, 50], [0, 240, 480, 720]), ([[0, 240, 480, 720], 480, 66], [0, 316, 480, 796]), ([[240, 300, 479], 480, 66], [316, 357, 479]), ([[120, 360], 480, 60], [144, 384]), ([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[0, 60], 120, 58], [0, 69]), ([[0, 240], 480, 49], None)], [([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[0, 60], 120, 58], [0, 69]), ([[0, 240], 480, 49], None), ([[0, 240], 480, 76], None), ([[0, 240], 481, 60], None), ([[100, 300], 480, 55], [110, 318]), ([[250, 470], 480, 50], [250, 470])], [([[0, 240, 480, 720], 480, 50], [0, 240, 480, 720]), ([[0, 240], 480, 49], None), ([[0, 240], 480, 76], None), ([[0, 240], 481, 60], None), ([[100, 300], 480, 55], [110, 318]), ([[90], 120, 62], [97]), ([[5, 55], 100, 64], [6, 67]), ([[30, 100], 120, 67], [40, 106])], [([[0, 240, 480, 720], 480, 50], [0, 240, 480, 720]), ([[0, 240, 480, 720], 480, 66], [0, 316, 480, 796]), ([[240, 300, 479], 480, 66], [316, 357, 479]), ([[0, 240], 480, 49], None), ([[90], 120, 62], [97]), ([[5, 55], 100, 64], [6, 67]), ([[250, 470], 480, 50], [250, 470]), ([[30, 100], 120, 67], [40, 106])], [([[0, 240, 480, 720], 480, 50], [0, 240, 480, 720]), ([[0, 240, 480, 720], 480, 66], [0, 316, 480, 796]), ([[240, 300, 479], 480, 66], [316, 357, 479]), ([[120, 360], 480, 60], [144, 384]), ([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[0, 240], 480, 49], None), ([[250, 470], 480, 50], [250, 470])]]\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":"9814accb04408542a160ac29984a159dda9ce92ae3b9659ff968297ce4207827","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    if not isinstance(x, list) or len(x) != 3:\n        return None\n    ticks, ppq, swing = x\n    if ppq <= 0 or ppq % 2 or not 50 < swing <= 75:\n        return None\n    half = ppq // 2\n    split = Fraction(ppq * swing, 100)\n    out = []\n    for t in ticks:\n        beat, pos = divmod(t, ppq)\n        if pos < half:\n            new = pos * split / half\n        else:\n            new = split + (pos - half) * (ppq - split) / half\n        out.append(beat * ppq + int(new))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[([[0, 240, 480, 720], 480, 50], [0, 240, 480, 720]), ([[0, 240, 480, 720], 480, 66], [0, 316, 480, 796]), ([[240, 300, 479], 480, 66], [316, 357, 479]), ([[120, 360], 480, 60], [144, 384]), ([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[0, 60], 120, 58], [0, 69]), ([[0, 240], 480, 49], None)], [([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[0, 60], 120, 58], [0, 69]), ([[0, 240], 480, 49], None), ([[0, 240], 480, 76], None), ([[0, 240], 481, 60], None), ([[100, 300], 480, 55], [110, 318]), ([[250, 470], 480, 50], [250, 470])], [([[0, 240, 480, 720], 480, 50], [0, 240, 480, 720]), ([[0, 240], 480, 49], None), ([[0, 240], 480, 76], None), ([[0, 240], 481, 60], None), ([[100, 300], 480, 55], [110, 318]), ([[90], 120, 62], [97]), ([[5, 55], 100, 64], [6, 67]), ([[30, 100], 120, 67], [40, 106])], [([[0, 240, 480, 720], 480, 50], [0, 240, 480, 720]), ([[0, 240, 480, 720], 480, 66], [0, 316, 480, 796]), ([[240, 300, 479], 480, 66], [316, 357, 479]), ([[0, 240], 480, 49], None), ([[90], 120, 62], [97]), ([[5, 55], 100, 64], [6, 67]), ([[250, 470], 480, 50], [250, 470]), ([[30, 100], 120, 67], [40, 106])], [([[0, 240, 480, 720], 480, 50], [0, 240, 480, 720]), ([[0, 240, 480, 720], 480, 66], [0, 316, 480, 796]), ([[240, 300, 479], 480, 66], [316, 357, 479]), ([[120, 360], 480, 60], [144, 384]), ([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[0, 240], 480, 49], None), ([[250, 470], 480, 50], [250, 470])]]\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":"2d7f6902aa0b8912657d91ace208cc89d18a3cf23395cfbb19e47f3e035dfc35","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    if not isinstance(x, list) or len(x) != 3:\n        return None\n    ticks, ppq, swing = x\n    if ppq <= 0 or ppq % 2 or not 50 <= swing <= 75:\n        return None\n    half = ppq // 2\n    split = Fraction(ppq * swing, 100)\n    out = []\n    for t in ticks:\n        beat, pos = divmod(t, ppq)\n        if pos < half:\n            new = pos * split / half\n        else:\n            new = split + (pos - half) * (ppq - split) / half\n        out.append(beat * ppq + int(new))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[([[0, 240, 480, 720], 480, 50], [0, 240, 480, 720]), ([[0, 240, 480, 720], 480, 66], [0, 316, 480, 796]), ([[240, 300, 479], 480, 66], [316, 357, 479]), ([[120, 360], 480, 60], [144, 384]), ([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[0, 60], 120, 58], [0, 69]), ([[0, 240], 480, 49], None)], [([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[0, 60], 120, 58], [0, 69]), ([[0, 240], 480, 49], None), ([[0, 240], 480, 76], None), ([[0, 240], 481, 60], None), ([[100, 300], 480, 55], [110, 318]), ([[250, 470], 480, 50], [250, 470])], [([[0, 240, 480, 720], 480, 50], [0, 240, 480, 720]), ([[0, 240], 480, 49], None), ([[0, 240], 480, 76], None), ([[0, 240], 481, 60], None), ([[100, 300], 480, 55], [110, 318]), ([[90], 120, 62], [97]), ([[5, 55], 100, 64], [6, 67]), ([[30, 100], 120, 67], [40, 106])], [([[0, 240, 480, 720], 480, 50], [0, 240, 480, 720]), ([[0, 240, 480, 720], 480, 66], [0, 316, 480, 796]), ([[240, 300, 479], 480, 66], [316, 357, 479]), ([[0, 240], 480, 49], None), ([[90], 120, 62], [97]), ([[5, 55], 100, 64], [6, 67]), ([[250, 470], 480, 50], [250, 470]), ([[30, 100], 120, 67], [40, 106])], [([[0, 240, 480, 720], 480, 50], [0, 240, 480, 720]), ([[0, 240, 480, 720], 480, 66], [0, 316, 480, 796]), ([[240, 300, 479], 480, 66], [316, 357, 479]), ([[120, 360], 480, 60], [144, 384]), ([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[0, 240], 480, 49], None), ([[250, 470], 480, 50], [250, 470])]]\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 Standard MIDI File or MIDI 1.0/2.0 implementation. 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-midi-event-timing-swing-remap-swing-range","generated_at":"2026-09-29T14:50:04.269425+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"MIDI sequencers, file readers and synth drivers depend on exact event ordering and tick/time arithmetic.","repair":"Restore the swing range step so that it reads `50 <= swing <= 75`.","root_cause":"The lower bound of the swing range is exclusive.","sha256":"74318e06a14023907828376d6d5cfce32db350fb488409f7acf1190719c25802","title":"Eighth-note swing time remapping: straight timing rejected · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.241,"exit_code":1,"observations":[{"actual":[0,240,480,720],"check":"oracle 0","expected":[0,240,480,720],"passed":true},{"actual":[0,316,480,796],"check":"oracle 1","expected":[0,316,480,796],"passed":true},{"actual":[316,357,479],"check":"oracle 2","expected":[316,357,479],"passed":true},{"actual":[144,384],"check":"oracle 3","expected":[144,384],"passed":true},{"actual":[960,1320,1380],"check":"oracle 4","expected":[960,1320,1380],"passed":true},{"actual":[1,334,336],"check":"oracle 5","expected":[1,334,336],"passed":true},{"actual":[0,69],"check":"oracle 6","expected":[0,69],"passed":true},{"actual":[0,235],"check":"oracle 7","expected":null,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": [0, 240, 480, 720], \"expected\": [0, 240, 480, 720], \"passed\": true}, {\"check\": \"oracle 1\", \"actual\": [0, 316, 480, 796], \"expected\": [0, 316, 480, 796], \"passed\": true}, {\"check\": \"oracle 2\", \"actual\": [316, 357, 479], \"expected\": [316, 357, 479], \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": [144, 384], \"expected\": [144, 384], \"passed\": true}, {\"check\": \"oracle 4\", \"actual\": [960, 1320, 1380], \"expected\": [960, 1320, 1380], \"passed\": true}, {\"check\": \"oracle 5\", \"actual\": [1, 334, 336], \"expected\": [1, 334, 336], \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": [0, 69], \"expected\": [0, 69], \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": [0, 235], \"expected\": null, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.925,"exit_code":1,"observations":[{"actual":null,"check":"oracle 0","expected":[0,240,480,720],"passed":false},{"actual":[0,316,480,796],"check":"oracle 1","expected":[0,316,480,796],"passed":true},{"actual":[316,357,479],"check":"oracle 2","expected":[316,357,479],"passed":true},{"actual":[144,384],"check":"oracle 3","expected":[144,384],"passed":true},{"actual":[960,1320,1380],"check":"oracle 4","expected":[960,1320,1380],"passed":true},{"actual":[1,334,336],"check":"oracle 5","expected":[1,334,336],"passed":true},{"actual":[0,69],"check":"oracle 6","expected":[0,69],"passed":true},{"actual":null,"check":"oracle 7","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": null, \"expected\": [0, 240, 480, 720], \"passed\": false}, {\"check\": \"oracle 1\", \"actual\": [0, 316, 480, 796], \"expected\": [0, 316, 480, 796], \"passed\": true}, {\"check\": \"oracle 2\", \"actual\": [316, 357, 479], \"expected\": [316, 357, 479], \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": [144, 384], \"expected\": [144, 384], \"passed\": true}, {\"check\": \"oracle 4\", \"actual\": [960, 1320, 1380], \"expected\": [960, 1320, 1380], \"passed\": true}, {\"check\": \"oracle 5\", \"actual\": [1, 334, 336], \"expected\": [1, 334, 336], \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": [0, 69], \"expected\": [0, 69], \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.793,"exit_code":0,"observations":[{"actual":[0,240,480,720],"check":"oracle 0","expected":[0,240,480,720],"passed":true},{"actual":[0,316,480,796],"check":"oracle 1","expected":[0,316,480,796],"passed":true},{"actual":[316,357,479],"check":"oracle 2","expected":[316,357,479],"passed":true},{"actual":[144,384],"check":"oracle 3","expected":[144,384],"passed":true},{"actual":[960,1320,1380],"check":"oracle 4","expected":[960,1320,1380],"passed":true},{"actual":[1,334,336],"check":"oracle 5","expected":[1,334,336],"passed":true},{"actual":[0,69],"check":"oracle 6","expected":[0,69],"passed":true},{"actual":null,"check":"oracle 7","expected":null,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": [0, 240, 480, 720], \"expected\": [0, 240, 480, 720], \"passed\": true}, {\"check\": \"oracle 1\", \"actual\": [0, 316, 480, 796], \"expected\": [0, 316, 480, 796], \"passed\": true}, {\"check\": \"oracle 2\", \"actual\": [316, 357, 479], \"expected\": [316, 357, 479], \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": [144, 384], \"expected\": [144, 384], \"passed\": true}, {\"check\": \"oracle 4\", \"actual\": [960, 1320, 1380], \"expected\": [960, 1320, 1380], \"passed\": true}, {\"check\": \"oracle 5\", \"actual\": [1, 334, 336], \"expected\": [1, 334, 336], \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": [0, 69], \"expected\": [0, 69], \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}