{"abstract":"Selects a track even though no current identity existed and produces an incorrect media-control or presentation result.","category":"Media playlist lifecycle","checks":6,"contract":"Remove listed IDs from a playlist with unique string IDs. Keep current identity when it survives. If current is removed, choose the first surviving original successor, otherwise the last survivor. If current was absent, leave selection None. Return [remaining playlist,current ID or None].","evaluation_group":"xplay-playlist-removal-selection","failed_approach":"The alternative still fails because it keeps the old numeric index rather than current identity after preceding removals.","family":"xplay-playlist-removal-selection-selection-created-from-absent","id":"FA-11336","implementations":{"attempt":{"sha256":"1def5f6cfaa171f862a85c8be22914e940728aaef2edf020d75fb263cb9f03e9","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(playlist, current, removed):\n    items=list(playlist)\n    old_index=items.index(current) if current in items else None\n    items=[track for track in items if track not in removed]\n    if current in items:\n        return [items,items[min(old_index,len(items)-1)] if old_index is not None else current]\n    if not items: return [items,None]\n    if old_index is None: return [items,None]\n    old=playlist\n    successors=old[old_index+1:]\n    for track in successors:\n        if track in items: return [items,track]\n    return [items,items[-1]]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('remove preceding item keeps identity', solve(['a', 'b', 'c'], 'b', ['a']), [['b', 'c'], 'b'])\ncheck('current removed selects next', solve(['a', 'b', 'c'], 'b', ['b']), [['a', 'c'], 'c'])\ncheck('skip removed successors', solve(['a', 'b', 'c', 'd'], 'b', ['b', 'c']), [['a', 'd'], 'd'])\ncheck('removed last chooses predecessor', solve(['a', 'b', 'c'], 'c', ['c']), [['a', 'b'], 'b'])\ncheck('absent selection remains absent', solve(['a', 'b'], None, []), [['a', 'b'], None])\ncheck('everything removed', solve(['a'], 'a', ['a']), [[], 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":"7aac1e0a49b86d85a8776764c9070f48dc1898274f3d8f3bd373f99369988832","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(playlist, current, removed):\n    items=list(playlist)\n    old_index=items.index(current) if current in items else None\n    items=[track for track in items if track not in removed]\n    if current in items:\n        return [items,current]\n    if not items: return [items,None]\n    if old_index is None: return [items,items[0]]\n    old=playlist\n    successors=old[old_index+1:]\n    for track in successors:\n        if track in items: return [items,track]\n    return [items,items[-1]]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('remove preceding item keeps identity', solve(['a', 'b', 'c'], 'b', ['a']), [['b', 'c'], 'b'])\ncheck('current removed selects next', solve(['a', 'b', 'c'], 'b', ['b']), [['a', 'c'], 'c'])\ncheck('skip removed successors', solve(['a', 'b', 'c', 'd'], 'b', ['b', 'c']), [['a', 'd'], 'd'])\ncheck('removed last chooses predecessor', solve(['a', 'b', 'c'], 'c', ['c']), [['a', 'b'], 'b'])\ncheck('absent selection remains absent', solve(['a', 'b'], None, []), [['a', 'b'], None])\ncheck('everything removed', solve(['a'], 'a', ['a']), [[], 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":"00305bcf5cbfd6fd2e98cf3f1a34ed504c52d989188a44b792dc25cd307548b6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(playlist, current, removed):\n    items=list(playlist)\n    old_index=items.index(current) if current in items else None\n    items=[track for track in items if track not in removed]\n    if current in items:\n        return [items,current]\n    if not items: return [items,None]\n    if old_index is None: return [items,None]\n    old=playlist\n    successors=old[old_index+1:]\n    for track in successors:\n        if track in items: return [items,track]\n    return [items,items[-1]]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('remove preceding item keeps identity', solve(['a', 'b', 'c'], 'b', ['a']), [['b', 'c'], 'b'])\ncheck('current removed selects next', solve(['a', 'b', 'c'], 'b', ['b']), [['a', 'c'], 'c'])\ncheck('skip removed successors', solve(['a', 'b', 'c', 'd'], 'b', ['b', 'c']), [['a', 'd'], 'd'])\ncheck('removed last chooses predecessor', solve(['a', 'b', 'c'], 'c', ['c']), [['a', 'b'], 'b'])\ncheck('absent selection remains absent', solve(['a', 'b'], None, []), [['a', 'b'], None])\ncheck('everything removed', solve(['a'], 'a', ['a']), [[], 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-removal-selection-selection-created-from-absent","generated_at":"2026-09-29T14:38:47.039115+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":"Remove listed IDs from a playlist with unique string IDs. Keep current identity when it survives. If current is removed, choose the first surviving original successor, otherwise the last survivor. If current was absent, leave selection None. Return [remaining playlist,current ID or None].","root_cause":"Selects a track even though no current identity existed. The fixture suite isolates this decision from network delivery and codec details.","sha256":"ff8329a978432836e0aecbd25eb36bbe3665dc3645d20b05153931cdfcfe3f6c","title":"Playlist removal selection: Selects a track even though no current identity existed · 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.924,"exit_code":1,"observations":[{"actual":[["b","c"],"c"],"check":"remove preceding item keeps identity","expected":[["b","c"],"b"],"passed":false},{"actual":[["a","c"],"c"],"check":"current removed selects next","expected":[["a","c"],"c"],"passed":true},{"actual":[["a","d"],"d"],"check":"skip removed successors","expected":[["a","d"],"d"],"passed":true},{"actual":[["a","b"],"b"],"check":"removed last chooses predecessor","expected":[["a","b"],"b"],"passed":true},{"actual":[["a","b"],null],"check":"absent selection remains absent","expected":[["a","b"],null],"passed":true},{"actual":[[],null],"check":"everything removed","expected":[[],null],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"remove preceding item keeps identity\", \"actual\": [[\"b\", \"c\"], \"c\"], \"expected\": [[\"b\", \"c\"], \"b\"], \"passed\": false}, {\"check\": \"current removed selects next\", \"actual\": [[\"a\", \"c\"], \"c\"], \"expected\": [[\"a\", \"c\"], \"c\"], \"passed\": true}, {\"check\": \"skip removed successors\", \"actual\": [[\"a\", \"d\"], \"d\"], \"expected\": [[\"a\", \"d\"], \"d\"], \"passed\": true}, {\"check\": \"removed last chooses predecessor\", \"actual\": [[\"a\", \"b\"], \"b\"], \"expected\": [[\"a\", \"b\"], \"b\"], \"passed\": true}, {\"check\": \"absent selection remains absent\", \"actual\": [[\"a\", \"b\"], null], \"expected\": [[\"a\", \"b\"], null], \"passed\": true}, {\"check\": \"everything removed\", \"actual\": [[], null], \"expected\": [[], null], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.142,"exit_code":1,"observations":[{"actual":[["b","c"],"b"],"check":"remove preceding item keeps identity","expected":[["b","c"],"b"],"passed":true},{"actual":[["a","c"],"c"],"check":"current removed selects next","expected":[["a","c"],"c"],"passed":true},{"actual":[["a","d"],"d"],"check":"skip removed successors","expected":[["a","d"],"d"],"passed":true},{"actual":[["a","b"],"b"],"check":"removed last chooses predecessor","expected":[["a","b"],"b"],"passed":true},{"actual":[["a","b"],"a"],"check":"absent selection remains absent","expected":[["a","b"],null],"passed":false},{"actual":[[],null],"check":"everything removed","expected":[[],null],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"remove preceding item keeps identity\", \"actual\": [[\"b\", \"c\"], \"b\"], \"expected\": [[\"b\", \"c\"], \"b\"], \"passed\": true}, {\"check\": \"current removed selects next\", \"actual\": [[\"a\", \"c\"], \"c\"], \"expected\": [[\"a\", \"c\"], \"c\"], \"passed\": true}, {\"check\": \"skip removed successors\", \"actual\": [[\"a\", \"d\"], \"d\"], \"expected\": [[\"a\", \"d\"], \"d\"], \"passed\": true}, {\"check\": \"removed last chooses predecessor\", \"actual\": [[\"a\", \"b\"], \"b\"], \"expected\": [[\"a\", \"b\"], \"b\"], \"passed\": true}, {\"check\": \"absent selection remains absent\", \"actual\": [[\"a\", \"b\"], \"a\"], \"expected\": [[\"a\", \"b\"], null], \"passed\": false}, {\"check\": \"everything removed\", \"actual\": [[], null], \"expected\": [[], null], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.503,"exit_code":0,"observations":[{"actual":[["b","c"],"b"],"check":"remove preceding item keeps identity","expected":[["b","c"],"b"],"passed":true},{"actual":[["a","c"],"c"],"check":"current removed selects next","expected":[["a","c"],"c"],"passed":true},{"actual":[["a","d"],"d"],"check":"skip removed successors","expected":[["a","d"],"d"],"passed":true},{"actual":[["a","b"],"b"],"check":"removed last chooses predecessor","expected":[["a","b"],"b"],"passed":true},{"actual":[["a","b"],null],"check":"absent selection remains absent","expected":[["a","b"],null],"passed":true},{"actual":[[],null],"check":"everything removed","expected":[[],null],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"remove preceding item keeps identity\", \"actual\": [[\"b\", \"c\"], \"b\"], \"expected\": [[\"b\", \"c\"], \"b\"], \"passed\": true}, {\"check\": \"current removed selects next\", \"actual\": [[\"a\", \"c\"], \"c\"], \"expected\": [[\"a\", \"c\"], \"c\"], \"passed\": true}, {\"check\": \"skip removed successors\", \"actual\": [[\"a\", \"d\"], \"d\"], \"expected\": [[\"a\", \"d\"], \"d\"], \"passed\": true}, {\"check\": \"removed last chooses predecessor\", \"actual\": [[\"a\", \"b\"], \"b\"], \"expected\": [[\"a\", \"b\"], \"b\"], \"passed\": true}, {\"check\": \"absent selection remains absent\", \"actual\": [[\"a\", \"b\"], null], \"expected\": [[\"a\", \"b\"], null], \"passed\": true}, {\"check\": \"everything removed\", \"actual\": [[], null], \"expected\": [[], null], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}