{"abstract":"Repeats a current track that has been disabled and produces an incorrect media-control or presentation result.","category":"Media playlist lifecycle","checks":9,"contract":"On natural completion, choose the next enabled track in playlist order. repeat=one retains the current track only if it remains enabled; repeat=all wraps once; repeat=none does not wrap. Unknown current starts before the first item. Track IDs are unique strings; disabled is a list of IDs.","evaluation_group":"xplay-playlist-natural-advance","failed_approach":"The alternative still fails because it wraps at playlist end even with repeat disabled.","family":"xplay-playlist-natural-advance-repeat-one-disabled","id":"FA-11281","implementations":{"attempt":{"sha256":"657e0fa3c172c9d8ed402ee5fe1cdd333a7a73ff935e885a38cc5917a33ff4fe","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(tracks, current, repeat, disabled):\n    if not tracks: return None\n    if repeat=='one' and current in tracks and current not in disabled: return current\n    start=tracks.index(current) if current in tracks else -1\n    order=list(range(start+1,len(tracks)))+list(range(0,start+1))\n    for index in order:\n        candidate=tracks[index]\n        if candidate not in disabled: return candidate\n    return None\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('ordinary successor', solve(['a', 'b', 'c'], 'a', 'none', []), 'b')\ncheck('end without repeat', solve(['a', 'b'], 'b', 'none', []), None)\ncheck('repeat all wraps', solve(['a', 'b'], 'b', 'all', []), 'a')\ncheck('repeat one eligible', solve(['a', 'b'], 'a', 'one', []), 'a')\ncheck('repeat one disabled skips', solve(['a', 'b'], 'a', 'one', ['a']), 'b')\ncheck('skip disabled successor', solve(['a', 'b', 'c'], 'a', 'none', ['b']), 'c')\ncheck('all disabled terminates', solve(['a', 'b'], 'b', 'all', ['a', 'b']), None)\ncheck('missing current starts playlist', solve(['a', 'b'], 'gone', 'none', []), 'a')\ncheck('empty playlist', solve([], 'a', 'all', []), None)\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":"c319ec0363aa3b64bb7178b2e22f05c929effc1b7989431f0839b63d92093c27","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(tracks, current, repeat, disabled):\n    if not tracks: return None\n    if repeat=='one' and current in tracks: return current\n    start=tracks.index(current) if current in tracks else -1\n    order=list(range(start+1,len(tracks))) + (list(range(0,start+1)) if repeat=='all' else [])\n    for index in order:\n        candidate=tracks[index]\n        if candidate not in disabled: return candidate\n    return None\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('ordinary successor', solve(['a', 'b', 'c'], 'a', 'none', []), 'b')\ncheck('end without repeat', solve(['a', 'b'], 'b', 'none', []), None)\ncheck('repeat all wraps', solve(['a', 'b'], 'b', 'all', []), 'a')\ncheck('repeat one eligible', solve(['a', 'b'], 'a', 'one', []), 'a')\ncheck('repeat one disabled skips', solve(['a', 'b'], 'a', 'one', ['a']), 'b')\ncheck('skip disabled successor', solve(['a', 'b', 'c'], 'a', 'none', ['b']), 'c')\ncheck('all disabled terminates', solve(['a', 'b'], 'b', 'all', ['a', 'b']), None)\ncheck('missing current starts playlist', solve(['a', 'b'], 'gone', 'none', []), 'a')\ncheck('empty playlist', solve([], 'a', 'all', []), None)\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":"687f0b46b4bdcc8eba2ccb9d605f785982929cf79efb89bb1727d9501fc2177d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(tracks, current, repeat, disabled):\n    if not tracks: return None\n    if repeat=='one' and current in tracks and current not in disabled: return current\n    start=tracks.index(current) if current in tracks else -1\n    order=list(range(start+1,len(tracks))) + (list(range(0,start+1)) if repeat=='all' else [])\n    for index in order:\n        candidate=tracks[index]\n        if candidate not in disabled: return candidate\n    return None\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('ordinary successor', solve(['a', 'b', 'c'], 'a', 'none', []), 'b')\ncheck('end without repeat', solve(['a', 'b'], 'b', 'none', []), None)\ncheck('repeat all wraps', solve(['a', 'b'], 'b', 'all', []), 'a')\ncheck('repeat one eligible', solve(['a', 'b'], 'a', 'one', []), 'a')\ncheck('repeat one disabled skips', solve(['a', 'b'], 'a', 'one', ['a']), 'b')\ncheck('skip disabled successor', solve(['a', 'b', 'c'], 'a', 'none', ['b']), 'c')\ncheck('all disabled terminates', solve(['a', 'b'], 'b', 'all', ['a', 'b']), None)\ncheck('missing current starts playlist', solve(['a', 'b'], 'gone', 'none', []), 'a')\ncheck('empty playlist', solve([], 'a', 'all', []), None)\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":" 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":"xplay-playlist-natural-advance-repeat-one-disabled","generated_at":"2026-09-29T14:38:46.581779+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"A deterministic in-memory media application model with explicit playlist, timeline or synchronization semantics. Does not implement codecs, transport protocols, rendering hardware or concurrent playback.","repair":"On natural completion, choose the next enabled track in playlist order. repeat=one retains the current track only if it remains enabled; repeat=all wraps once; repeat=none does not wrap. Unknown current starts before the first item. Track IDs are unique strings; disabled is a list of IDs.","root_cause":"Repeats a current track that has been disabled. The fixture suite isolates this decision from network delivery and codec details.","sha256":"30771f4a6ba5aad809099ec6866b83ee4641571bdde22f31e6f5d46dd2623338","title":"Playlist natural advance: Repeats a current track that has been disabled · case 01","variant":1,"variant_policy":"Numbered cases repeat the same authored boundary fixtures as reproducibility runs, not independent input variants.","verification":{"attempt":{"elapsed_ms":39.208,"exit_code":1,"observations":[{"actual":"b","check":"ordinary successor","expected":"b","passed":true},{"actual":"a","check":"end without repeat","expected":null,"passed":false},{"actual":"a","check":"repeat all wraps","expected":"a","passed":true},{"actual":"a","check":"repeat one eligible","expected":"a","passed":true},{"actual":"b","check":"repeat one disabled skips","expected":"b","passed":true},{"actual":"c","check":"skip disabled successor","expected":"c","passed":true},{"actual":null,"check":"all disabled terminates","expected":null,"passed":true},{"actual":"a","check":"missing current starts playlist","expected":"a","passed":true},{"actual":null,"check":"empty playlist","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"ordinary successor\", \"actual\": \"b\", \"expected\": \"b\", \"passed\": true}, {\"check\": \"end without repeat\", \"actual\": \"a\", \"expected\": null, \"passed\": false}, {\"check\": \"repeat all wraps\", \"actual\": \"a\", \"expected\": \"a\", \"passed\": true}, {\"check\": \"repeat one eligible\", \"actual\": \"a\", \"expected\": \"a\", \"passed\": true}, {\"check\": \"repeat one disabled skips\", \"actual\": \"b\", \"expected\": \"b\", \"passed\": true}, {\"check\": \"skip disabled successor\", \"actual\": \"c\", \"expected\": \"c\", \"passed\": true}, {\"check\": \"all disabled terminates\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"missing current starts playlist\", \"actual\": \"a\", \"expected\": \"a\", \"passed\": true}, {\"check\": \"empty playlist\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.852,"exit_code":1,"observations":[{"actual":"b","check":"ordinary successor","expected":"b","passed":true},{"actual":null,"check":"end without repeat","expected":null,"passed":true},{"actual":"a","check":"repeat all wraps","expected":"a","passed":true},{"actual":"a","check":"repeat one eligible","expected":"a","passed":true},{"actual":"a","check":"repeat one disabled skips","expected":"b","passed":false},{"actual":"c","check":"skip disabled successor","expected":"c","passed":true},{"actual":null,"check":"all disabled terminates","expected":null,"passed":true},{"actual":"a","check":"missing current starts playlist","expected":"a","passed":true},{"actual":null,"check":"empty playlist","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"ordinary successor\", \"actual\": \"b\", \"expected\": \"b\", \"passed\": true}, {\"check\": \"end without repeat\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"repeat all wraps\", \"actual\": \"a\", \"expected\": \"a\", \"passed\": true}, {\"check\": \"repeat one eligible\", \"actual\": \"a\", \"expected\": \"a\", \"passed\": true}, {\"check\": \"repeat one disabled skips\", \"actual\": \"a\", \"expected\": \"b\", \"passed\": false}, {\"check\": \"skip disabled successor\", \"actual\": \"c\", \"expected\": \"c\", \"passed\": true}, {\"check\": \"all disabled terminates\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"missing current starts playlist\", \"actual\": \"a\", \"expected\": \"a\", \"passed\": true}, {\"check\": \"empty playlist\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.268,"exit_code":0,"observations":[{"actual":"b","check":"ordinary successor","expected":"b","passed":true},{"actual":null,"check":"end without repeat","expected":null,"passed":true},{"actual":"a","check":"repeat all wraps","expected":"a","passed":true},{"actual":"a","check":"repeat one eligible","expected":"a","passed":true},{"actual":"b","check":"repeat one disabled skips","expected":"b","passed":true},{"actual":"c","check":"skip disabled successor","expected":"c","passed":true},{"actual":null,"check":"all disabled terminates","expected":null,"passed":true},{"actual":"a","check":"missing current starts playlist","expected":"a","passed":true},{"actual":null,"check":"empty playlist","expected":null,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"ordinary successor\", \"actual\": \"b\", \"expected\": \"b\", \"passed\": true}, {\"check\": \"end without repeat\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"repeat all wraps\", \"actual\": \"a\", \"expected\": \"a\", \"passed\": true}, {\"check\": \"repeat one eligible\", \"actual\": \"a\", \"expected\": \"a\", \"passed\": true}, {\"check\": \"repeat one disabled skips\", \"actual\": \"b\", \"expected\": \"b\", \"passed\": true}, {\"check\": \"skip disabled successor\", \"actual\": \"c\", \"expected\": \"c\", \"passed\": true}, {\"check\": \"all disabled terminates\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"missing current starts playlist\", \"actual\": \"a\", \"expected\": \"a\", \"passed\": true}, {\"check\": \"empty playlist\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}