{"abstract":"With 66% swing a note late in the beat (tick 479 of a 480-tick beat) lands after the next downbeat.","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":"Using an unscaled second half shifts it by the swing offset without compressing it, overrunning the beat.","family":"w2-midi-event-timing-swing-remap-second-half-scale","id":"FA-81556","implementations":{"attempt":{"sha256":"772afb3888b83081f836b89d2797d1c2eaa93e23d500c77982fc7a3b1776daa7","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 - half) / 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]), ([[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)], [([[240, 300, 479], 480, 66], [316, 357, 479]), ([[120, 360], 480, 60], [144, 384]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[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])], [([[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]), ([[100, 300], 480, 55], [110, 318]), ([[90], 120, 62], [97]), ([[5, 55], 100, 64], [6, 67]), ([[250, 470], 480, 50], [250, 470])], [([[0, 240, 480, 720], 480, 50], [0, 240, 480, 720]), ([[0, 240, 480, 720], 480, 66], [0, 316, 480, 796]), ([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[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]), ([[0, 60], 120, 58], [0, 69]), ([[0, 240], 480, 49], None), ([[100, 300], 480, 55], [110, 318]), ([[90], 120, 62], [97]), ([[5, 55], 100, 64], [6, 67]), ([[30, 100], 120, 67], [40, 106])]]\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":"9429660f5867870e0f68ab85279bca4ae2eea517e1976f79d655725c02e4237d","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) * 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]), ([[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)], [([[240, 300, 479], 480, 66], [316, 357, 479]), ([[120, 360], 480, 60], [144, 384]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[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])], [([[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]), ([[100, 300], 480, 55], [110, 318]), ([[90], 120, 62], [97]), ([[5, 55], 100, 64], [6, 67]), ([[250, 470], 480, 50], [250, 470])], [([[0, 240, 480, 720], 480, 50], [0, 240, 480, 720]), ([[0, 240, 480, 720], 480, 66], [0, 316, 480, 796]), ([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[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]), ([[0, 60], 120, 58], [0, 69]), ([[0, 240], 480, 49], None), ([[100, 300], 480, 55], [110, 318]), ([[90], 120, 62], [97]), ([[5, 55], 100, 64], [6, 67]), ([[30, 100], 120, 67], [40, 106])]]\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":"2d1bbbfb48c68b12b8c9286a896b5caa275c9f43d6980f6c1f5e0a0dac222d26","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]), ([[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)], [([[240, 300, 479], 480, 66], [316, 357, 479]), ([[120, 360], 480, 60], [144, 384]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[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])], [([[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]), ([[100, 300], 480, 55], [110, 318]), ([[90], 120, 62], [97]), ([[5, 55], 100, 64], [6, 67]), ([[250, 470], 480, 50], [250, 470])], [([[0, 240, 480, 720], 480, 50], [0, 240, 480, 720]), ([[0, 240, 480, 720], 480, 66], [0, 316, 480, 796]), ([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[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]), ([[0, 60], 120, 58], [0, 69]), ([[0, 240], 480, 49], None), ([[100, 300], 480, 55], [110, 318]), ([[90], 120, 62], [97]), ([[5, 55], 100, 64], [6, 67]), ([[30, 100], 120, 67], [40, 106])]]\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-second-half-scale","generated_at":"2026-09-29T14:50:04.082891+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 second half scale step so that it reads `(ppq - split) / half`.","root_cause":"The second half of the beat is scaled by the first-half factor split/half instead of (ppq-split)/half.","sha256":"174dced850b17f78953e70c80ef9bda9985c830016cebbb741ab7bff4dd99f37","title":"Eighth-note swing time remapping: offbeat half stretched by the downbeat factor · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":43.83,"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,376,555],"check":"oracle 2","expected":[316,357,479],"passed":false},{"actual":[960,1320,1440],"check":"oracle 3","expected":[960,1320,1380],"passed":false},{"actual":[1,334,337],"check":"oracle 4","expected":[1,334,336],"passed":false},{"actual":[0,69],"check":"oracle 5","expected":[0,69],"passed":true},{"actual":null,"check":"oracle 6","expected":null,"passed":true},{"actual":null,"check":"oracle 7","expected":null,"passed":true}],"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, 376, 555], \"expected\": [316, 357, 479], \"passed\": false}, {\"check\": \"oracle 3\", \"actual\": [960, 1320, 1440], \"expected\": [960, 1320, 1380], \"passed\": false}, {\"check\": \"oracle 4\", \"actual\": [1, 334, 337], \"expected\": [1, 334, 336], \"passed\": false}, {\"check\": \"oracle 5\", \"actual\": [0, 69], \"expected\": [0, 69], \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.4,"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,396,632],"check":"oracle 2","expected":[316,357,479],"passed":false},{"actual":[960,1320,1500],"check":"oracle 3","expected":[960,1320,1380],"passed":false},{"actual":[1,334,337],"check":"oracle 4","expected":[1,334,336],"passed":false},{"actual":[0,69],"check":"oracle 5","expected":[0,69],"passed":true},{"actual":null,"check":"oracle 6","expected":null,"passed":true},{"actual":null,"check":"oracle 7","expected":null,"passed":true}],"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, 396, 632], \"expected\": [316, 357, 479], \"passed\": false}, {\"check\": \"oracle 3\", \"actual\": [960, 1320, 1500], \"expected\": [960, 1320, 1380], \"passed\": false}, {\"check\": \"oracle 4\", \"actual\": [1, 334, 337], \"expected\": [1, 334, 336], \"passed\": false}, {\"check\": \"oracle 5\", \"actual\": [0, 69], \"expected\": [0, 69], \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.994,"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":[960,1320,1380],"check":"oracle 3","expected":[960,1320,1380],"passed":true},{"actual":[1,334,336],"check":"oracle 4","expected":[1,334,336],"passed":true},{"actual":[0,69],"check":"oracle 5","expected":[0,69],"passed":true},{"actual":null,"check":"oracle 6","expected":null,"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\": [960, 1320, 1380], \"expected\": [960, 1320, 1380], \"passed\": true}, {\"check\": \"oracle 4\", \"actual\": [1, 334, 336], \"expected\": [1, 334, 336], \"passed\": true}, {\"check\": \"oracle 5\", \"actual\": [0, 69], \"expected\": [0, 69], \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}