FAILURE MAP
← Case archive

FA-11301 / Media playlist lifecycle / Open access

Play next queue: Moves the playlist cursor to a queued override · case 01

Moves the playlist cursor to a queued override and produces an incorrect media-control or presentation result.

Verified by executionVariant 1 · 7 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

Moves the playlist cursor to a queued override. The fixture suite isolates this decision from network delivery and codec details.

THE FAILURE

Moves the playlist cursor to a queued override. The fixture suite isolates this decision from network delivery and codec details.

Unsuccessful approach: The alternative still fails because it fails to advance the playlist cursor on ordinary fallback.

Case contract

Consume the first enabled play-next queue occurrence before advancing the playlist. Queue plays do not move the playlist cursor; disabled queued occurrences are discarded. Return [selected ID or None,remaining queue,new playlist cursor]. Queue duplicates are independent requests.

Why this case matters

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.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(playlist, cursor, queue, disabled):
    pending=list(queue)
    while pending:
        candidate=pending.pop(0)
        if candidate in disabled: continue
        return [candidate,pending,candidate]
    start=playlist.index(cursor) if cursor in playlist else -1
    for candidate in playlist[start+1:]:
        if candidate not in disabled:
            return [candidate,pending,candidate]
    return [None,pending,cursor]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('queue has priority', solve(['a', 'b'], 'a', ['x', 'y'], []), ['x', ['y'], 'a'])
check('same track queued twice', solve(['a', 'b'], 'a', ['x', 'x', 'y'], []), ['x', ['x', 'y'], 'a'])
check('disabled queue discarded', solve(['a', 'b'], 'a', ['x', 'y'], ['x']), ['y', [], 'a'])
check('fallback advances cursor', solve(['a', 'b'], 'a', [], []), ['b', [], 'b'])
check('all queued disabled falls back', solve(['a', 'b'], 'a', ['x'], ['x']), ['b', [], 'b'])
check('end has no track', solve(['a'], 'a', [], []), [None, [], 'a'])
check('queue works without playlist', solve([], None, ['x'], []), ['x', [], None])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
queue has priority['x', ['y'], 'x']['x', ['y'], 'a']Failed
same track queued twice['x', ['x', 'y'], 'x']['x', ['x', 'y'], 'a']Failed
disabled queue discarded['y', [], 'y']['y', [], 'a']Failed
fallback advances cursor['b', [], 'b']['b', [], 'b']Passed
all queued disabled falls back['b', [], 'b']['b', [], 'b']Passed
end has no track[None, [], 'a'][None, [], 'a']Passed
queue works without playlist['x', [], 'x']['x', [], None]Failed

SHA-256 / 83f7f8bda879b5d726c81f4579bf72e1d412d30b1faa3b50d1aed59d896a7eb5

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(playlist, cursor, queue, disabled):
    pending=list(queue)
    while pending:
        candidate=pending.pop(0)
        if candidate in disabled: continue
        return [candidate,pending,cursor]
    start=playlist.index(cursor) if cursor in playlist else -1
    for candidate in playlist[start+1:]:
        if candidate not in disabled:
            return [candidate,pending,cursor]
    return [None,pending,cursor]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('queue has priority', solve(['a', 'b'], 'a', ['x', 'y'], []), ['x', ['y'], 'a'])
check('same track queued twice', solve(['a', 'b'], 'a', ['x', 'x', 'y'], []), ['x', ['x', 'y'], 'a'])
check('disabled queue discarded', solve(['a', 'b'], 'a', ['x', 'y'], ['x']), ['y', [], 'a'])
check('fallback advances cursor', solve(['a', 'b'], 'a', [], []), ['b', [], 'b'])
check('all queued disabled falls back', solve(['a', 'b'], 'a', ['x'], ['x']), ['b', [], 'b'])
check('end has no track', solve(['a'], 'a', [], []), [None, [], 'a'])
check('queue works without playlist', solve([], None, ['x'], []), ['x', [], None])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
queue has priority['x', ['y'], 'a']['x', ['y'], 'a']Passed
same track queued twice['x', ['x', 'y'], 'a']['x', ['x', 'y'], 'a']Passed
disabled queue discarded['y', [], 'a']['y', [], 'a']Passed
fallback advances cursor['b', [], 'a']['b', [], 'b']Failed
all queued disabled falls back['b', [], 'a']['b', [], 'b']Failed
end has no track[None, [], 'a'][None, [], 'a']Passed
queue works without playlist['x', [], None]['x', [], None]Passed

SHA-256 / 5975f79860516f865c42cca4de40fa2102dff978e6a6d50ffb43d826df97156c

HELD IN THE MEMBER ARCHIVE

The verified repair and its recorded checks are member-only.

This mechanism has 7 recorded checks per implementation. The open-access tier publishes the failure and the unsuccessful fix; the repaired source that passes every check, and the observations that prove it, are available to members.

Every case sharing this mechanism uses the same contract and the same repair, so this one record is held back for all of them.

Member access is invitation-based. Sign in with your invited account to inspect the repair.

Sign in to the archive ↗

Verification & scope

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.

Observations recorded using Python 3.12.14 at 2026-09-29T14:38:46.798677+00:00.

Case digest / e9de8103aa144cc7c39b0aa595671ae7c6fde513d48fbe24e05cad58a67949b3