{"abstract":"Channel 16 is rejected and channel 0 is accepted, producing a negative status value.","category":"MIDI event timing","checks":8,"contract":"Input [events, running_status] with events [kind, channel 1..16, note, velocity]. A note-on with velocity > 0 encodes as 0x90|(channel-1), note, velocity. A note-off (or note-on with velocity 0) encodes as 0x90|(channel-1), note, 0 when running status is enabled; otherwise as 0x80|(channel-1), note, velocity for an off and note, 64 for a velocity-0 on. With running status enabled, a status byte equal to the previous one is omitted. Invalid values return None.","contract_signature":"x","evaluation_group":"w2-midi-event-timing-note-message-encode","failed_approach":"Tightening the upper bound to 15 still rejects channel 16.","family":"w2-midi-event-timing-note-message-encode-channel-numbering","id":"FA-81776","implementations":{"attempt":{"sha256":"52660e3266bf2105d1ff5e6c1dc07c6daa730c31db446c3ac17f44d9b2224236","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) != 2:\n        return None\n    events, rs = x\n    out = []\n    last = None\n    for kind, ch, note, vel in events:\n        if not 1 <= ch <= 15 or not 0 <= note <= 127 or not 0 <= vel <= 127:\n            return None\n        if kind == 'on' and vel > 0:\n            status, data = 0x90 | (ch - 1), [note, vel]\n        elif kind in ('on', 'off'):\n            if rs:\n                status, data = 0x90 | (ch - 1), [note, 0]\n            else:\n                status, data = 0x80 | (ch - 1), [note, vel if kind == 'off' else 64]\n        else:\n            return None\n        if not (rs and status == last):\n            out.append(status)\n        out.extend(data)\n        last = status\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[([[['on', 1, 60, 100], ['off', 1, 60, 40]], False], [144, 60, 100, 128, 60, 40]), ([[['on', 1, 60, 100], ['off', 1, 60, 40]], True], [144, 60, 100, 60, 0]), ([[['on', 1, 60, 100], ['on', 1, 64, 90]], True], [144, 60, 100, 64, 90]), ([[['on', 1, 60, 100], ['on', 1, 64, 90]], False], [144, 60, 100, 144, 64, 90]), ([[['on', 16, 60, 100]], False], [159, 60, 100]), ([[['on', 17, 60, 100]], False], None), ([[['on', 2, 60, 0]], False], [129, 60, 64]), ([[['on', 2, 60, 0]], True], [145, 60, 0])], [([[['on', 1, 60, 100], ['on', 1, 64, 90]], False], [144, 60, 100, 144, 64, 90]), ([[['on', 16, 60, 100]], False], [159, 60, 100]), ([[['on', 0, 60, 100]], False], None), ([[['on', 17, 60, 100]], False], None), ([[['on', 2, 60, 0]], False], [129, 60, 64]), ([[['on', 2, 60, 0]], True], [145, 60, 0]), ([[['off', 3, 60, 0]], False], [130, 60, 0]), ([[['on', 1, 60, 100], ['on', 2, 60, 100]], True], [144, 60, 100, 145, 60, 100])], [([[['on', 16, 60, 100]], False], [159, 60, 100]), ([[['on', 2, 60, 0]], True], [145, 60, 0]), ([[['off', 3, 60, 0]], False], [130, 60, 0]), ([[['on', 1, 60, 100], ['on', 2, 60, 100]], True], [144, 60, 100, 145, 60, 100]), ([[['on', 1, 128, 100]], False], None), ([[['cc', 1, 7, 100]], False], None), ([[['on', 10, 36, 127], ['off', 10, 36, 0], ['on', 10, 38, 127]], True], [153, 36, 127, 36, 0, 38, 127]), ([[['on', 1, 60, 1]], True], [144, 60, 1])], [([[['on', 1, 60, 100], ['off', 1, 60, 40]], False], [144, 60, 100, 128, 60, 40]), ([[['on', 16, 60, 100]], False], [159, 60, 100]), ([[['on', 0, 60, 100]], False], None), ([[['on', 1, 128, 100]], False], None), ([[['cc', 1, 7, 100]], False], None), ([[['on', 10, 36, 127], ['off', 10, 36, 0], ['on', 10, 38, 127]], True], [153, 36, 127, 36, 0, 38, 127]), ([[['on', 1, 60, 1]], True], [144, 60, 1]), ([[['off', 5, 70, 90], ['off', 5, 71, 90]], True], [148, 70, 0, 71, 0])], [([[['on', 1, 60, 100], ['off', 1, 60, 40]], False], [144, 60, 100, 128, 60, 40]), ([[['on', 1, 60, 100], ['off', 1, 60, 40]], True], [144, 60, 100, 60, 0]), ([[['on', 1, 60, 100], ['on', 1, 64, 90]], True], [144, 60, 100, 64, 90]), ([[['on', 1, 60, 100], ['on', 1, 64, 90]], False], [144, 60, 100, 144, 64, 90]), ([[['on', 16, 60, 100]], False], [159, 60, 100]), ([[['on', 0, 60, 100]], False], None), ([[['on', 1, 60, 1]], True], [144, 60, 1]), ([[['off', 5, 70, 90], ['off', 5, 71, 90]], True], [148, 70, 0, 71, 0])]]\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":"eba8997af2a0ae0efb14b012d7fc5a182d0eba79e65fd9d8c06d66b7168d8a39","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) != 2:\n        return None\n    events, rs = x\n    out = []\n    last = None\n    for kind, ch, note, vel in events:\n        if not 0 <= ch <= 15 or not 0 <= note <= 127 or not 0 <= vel <= 127:\n            return None\n        if kind == 'on' and vel > 0:\n            status, data = 0x90 | (ch - 1), [note, vel]\n        elif kind in ('on', 'off'):\n            if rs:\n                status, data = 0x90 | (ch - 1), [note, 0]\n            else:\n                status, data = 0x80 | (ch - 1), [note, vel if kind == 'off' else 64]\n        else:\n            return None\n        if not (rs and status == last):\n            out.append(status)\n        out.extend(data)\n        last = status\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[([[['on', 1, 60, 100], ['off', 1, 60, 40]], False], [144, 60, 100, 128, 60, 40]), ([[['on', 1, 60, 100], ['off', 1, 60, 40]], True], [144, 60, 100, 60, 0]), ([[['on', 1, 60, 100], ['on', 1, 64, 90]], True], [144, 60, 100, 64, 90]), ([[['on', 1, 60, 100], ['on', 1, 64, 90]], False], [144, 60, 100, 144, 64, 90]), ([[['on', 16, 60, 100]], False], [159, 60, 100]), ([[['on', 17, 60, 100]], False], None), ([[['on', 2, 60, 0]], False], [129, 60, 64]), ([[['on', 2, 60, 0]], True], [145, 60, 0])], [([[['on', 1, 60, 100], ['on', 1, 64, 90]], False], [144, 60, 100, 144, 64, 90]), ([[['on', 16, 60, 100]], False], [159, 60, 100]), ([[['on', 0, 60, 100]], False], None), ([[['on', 17, 60, 100]], False], None), ([[['on', 2, 60, 0]], False], [129, 60, 64]), ([[['on', 2, 60, 0]], True], [145, 60, 0]), ([[['off', 3, 60, 0]], False], [130, 60, 0]), ([[['on', 1, 60, 100], ['on', 2, 60, 100]], True], [144, 60, 100, 145, 60, 100])], [([[['on', 16, 60, 100]], False], [159, 60, 100]), ([[['on', 2, 60, 0]], True], [145, 60, 0]), ([[['off', 3, 60, 0]], False], [130, 60, 0]), ([[['on', 1, 60, 100], ['on', 2, 60, 100]], True], [144, 60, 100, 145, 60, 100]), ([[['on', 1, 128, 100]], False], None), ([[['cc', 1, 7, 100]], False], None), ([[['on', 10, 36, 127], ['off', 10, 36, 0], ['on', 10, 38, 127]], True], [153, 36, 127, 36, 0, 38, 127]), ([[['on', 1, 60, 1]], True], [144, 60, 1])], [([[['on', 1, 60, 100], ['off', 1, 60, 40]], False], [144, 60, 100, 128, 60, 40]), ([[['on', 16, 60, 100]], False], [159, 60, 100]), ([[['on', 0, 60, 100]], False], None), ([[['on', 1, 128, 100]], False], None), ([[['cc', 1, 7, 100]], False], None), ([[['on', 10, 36, 127], ['off', 10, 36, 0], ['on', 10, 38, 127]], True], [153, 36, 127, 36, 0, 38, 127]), ([[['on', 1, 60, 1]], True], [144, 60, 1]), ([[['off', 5, 70, 90], ['off', 5, 71, 90]], True], [148, 70, 0, 71, 0])], [([[['on', 1, 60, 100], ['off', 1, 60, 40]], False], [144, 60, 100, 128, 60, 40]), ([[['on', 1, 60, 100], ['off', 1, 60, 40]], True], [144, 60, 100, 60, 0]), ([[['on', 1, 60, 100], ['on', 1, 64, 90]], True], [144, 60, 100, 64, 90]), ([[['on', 1, 60, 100], ['on', 1, 64, 90]], False], [144, 60, 100, 144, 64, 90]), ([[['on', 16, 60, 100]], False], [159, 60, 100]), ([[['on', 0, 60, 100]], False], None), ([[['on', 1, 60, 1]], True], [144, 60, 1]), ([[['off', 5, 70, 90], ['off', 5, 71, 90]], True], [148, 70, 0, 71, 0])]]\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-note-message-encode-channel-numbering","generated_at":"2026-09-29T14:50:06.180478+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.","root_cause":"The channel range check uses zero-based bounds while the encoder subtracts one from a one-based channel.","sha256":"cc0513fe958f718b86ddd352f1b3060f3f6c46ee74ed91a1da740c6887fea259","title":"Channel note message encoder with running status: channel range validated as zero-based · 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":41.033,"exit_code":1,"observations":[{"actual":[144,60,100,128,60,40],"check":"oracle 0","expected":[144,60,100,128,60,40],"passed":true},{"actual":[144,60,100,60,0],"check":"oracle 1","expected":[144,60,100,60,0],"passed":true},{"actual":[144,60,100,64,90],"check":"oracle 2","expected":[144,60,100,64,90],"passed":true},{"actual":[144,60,100,144,64,90],"check":"oracle 3","expected":[144,60,100,144,64,90],"passed":true},{"actual":null,"check":"oracle 4","expected":[159,60,100],"passed":false},{"actual":null,"check":"oracle 5","expected":null,"passed":true},{"actual":[129,60,64],"check":"oracle 6","expected":[129,60,64],"passed":true},{"actual":[145,60,0],"check":"oracle 7","expected":[145,60,0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": [144, 60, 100, 128, 60, 40], \"expected\": [144, 60, 100, 128, 60, 40], \"passed\": true}, {\"check\": \"oracle 1\", \"actual\": [144, 60, 100, 60, 0], \"expected\": [144, 60, 100, 60, 0], \"passed\": true}, {\"check\": \"oracle 2\", \"actual\": [144, 60, 100, 64, 90], \"expected\": [144, 60, 100, 64, 90], \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": [144, 60, 100, 144, 64, 90], \"expected\": [144, 60, 100, 144, 64, 90], \"passed\": true}, {\"check\": \"oracle 4\", \"actual\": null, \"expected\": [159, 60, 100], \"passed\": false}, {\"check\": \"oracle 5\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": [129, 60, 64], \"expected\": [129, 60, 64], \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": [145, 60, 0], \"expected\": [145, 60, 0], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.02,"exit_code":1,"observations":[{"actual":[144,60,100,128,60,40],"check":"oracle 0","expected":[144,60,100,128,60,40],"passed":true},{"actual":[144,60,100,60,0],"check":"oracle 1","expected":[144,60,100,60,0],"passed":true},{"actual":[144,60,100,64,90],"check":"oracle 2","expected":[144,60,100,64,90],"passed":true},{"actual":[144,60,100,144,64,90],"check":"oracle 3","expected":[144,60,100,144,64,90],"passed":true},{"actual":null,"check":"oracle 4","expected":[159,60,100],"passed":false},{"actual":null,"check":"oracle 5","expected":null,"passed":true},{"actual":[129,60,64],"check":"oracle 6","expected":[129,60,64],"passed":true},{"actual":[145,60,0],"check":"oracle 7","expected":[145,60,0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": [144, 60, 100, 128, 60, 40], \"expected\": [144, 60, 100, 128, 60, 40], \"passed\": true}, {\"check\": \"oracle 1\", \"actual\": [144, 60, 100, 60, 0], \"expected\": [144, 60, 100, 60, 0], \"passed\": true}, {\"check\": \"oracle 2\", \"actual\": [144, 60, 100, 64, 90], \"expected\": [144, 60, 100, 64, 90], \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": [144, 60, 100, 144, 64, 90], \"expected\": [144, 60, 100, 144, 64, 90], \"passed\": true}, {\"check\": \"oracle 4\", \"actual\": null, \"expected\": [159, 60, 100], \"passed\": false}, {\"check\": \"oracle 5\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": [129, 60, 64], \"expected\": [129, 60, 64], \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": [145, 60, 0], \"expected\": [145, 60, 0], \"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."}}