FAILURE MAP
← Case archive

FA-51361 / Raster clipping / Open access

Opaque occlusion clip: occlusion preclip · case 01

Occlusion history stores primitive coverage before clip and write masking.

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

ROOT CAUSE

Occlusion history stores primitive coverage before clip and write masking.

VERIFIED REPAIR

Apply the documented state transition at occlusion preclip. Draws are supplied back to front as ID, coverage set, opaque flag, clip set and sample-write-enable set. Visibility traverses front to back, subtracting only front opaque written samples. Transparent draws remain visible but do not occlude. Return every draw in original order, including empty visibility, labeled by ID. Repeated IDs are distinct draws. All coverage is finite-target bounded.

Unsuccessful approach: Target-bounding unmasked coverage still ignores the draw clip and write mask.

Case contract

Draws are supplied back to front as ID, coverage set, opaque flag, clip set and sample-write-enable set. Visibility traverses front to back, subtracting only front opaque written samples. Transparent draws remain visible but do not occlude. Return every draw in original order, including empty visibility, labeled by ID. Repeated IDs are distinct draws. All coverage is finite-target bounded.

Why this case matters

Raster clip state can leak coverage across draws even when every individual region is valid.

1 / The failure

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

N = 1
observations = []
def solve(commands, size):
    full=set(range(size))
    out=[]
    for draws in commands:
        occluded=set()
        visible=[]
        for key,coverage,opaque,clip,writes in reversed(draws):
            effective=set(coverage)&set(clip)&set(writes)&full
            remaining=effective-occluded
            visible.append([key,sorted(remaining)])
            if opaque: occluded |= set(coverage)
        out.append(list(reversed(visible)))
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
    check('explicit sequence 0', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [1], True, [1], [1]]]], 4), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 1', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], False, [0, 1], [0, 1]]]], 4), [[['back', [0, 1]], ['front', [0, 1]]]])
    check('explicit sequence 2', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0], [0, 1]]]], 4), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 3', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0, 1], [0]]]], 4), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 4', solve([[['back', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 4), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 5', solve([[['back', [0, 1, 2], True, [0, 1, 2], [0, 1, 2]], ['middle', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 4), [[['back', [2]], ['middle', [0]], ['front', [1]]]])
    check('explicit sequence 6', solve([[['z', [0], False, [0], [0]], ['a', [1], False, [1], [1]]]], 4), [[['z', [0]], ['a', [1]]]])
    check('explicit sequence 7', solve([[['a', [0], False, [], [0]], ['b', [1], True, [1], [1]]]], 4), [[['a', []], ['b', [1]]]])
    check('explicit sequence 8', solve([[['same', [0], False, [0], [0]], ['same', [1], False, [1], [1]]]], 4), [[['same', [0]], ['same', [1]]]])
    check('explicit sequence 9', solve([[['a', [0], True, [0], []]]], 4), [[['a', []]]])
    check('explicit sequence 10', solve([[['a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], True, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]]], 4), [[['a', [0, 1, 2, 3]]]])
if N == 2:
    check('explicit sequence 0', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [1], True, [1], [1]]]], 5), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 1', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], False, [0, 1], [0, 1]]]], 5), [[['back', [0, 1]], ['front', [0, 1]]]])
    check('explicit sequence 2', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0], [0, 1]]]], 5), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 3', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0, 1], [0]]]], 5), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 4', solve([[['back', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 5), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 5', solve([[['back', [0, 1, 2], True, [0, 1, 2], [0, 1, 2]], ['middle', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 5), [[['back', [2]], ['middle', [0]], ['front', [1]]]])
    check('explicit sequence 6', solve([[['z', [0], False, [0], [0]], ['a', [1], False, [1], [1]]]], 5), [[['z', [0]], ['a', [1]]]])
    check('explicit sequence 7', solve([[['a', [0], False, [], [0]], ['b', [1], True, [1], [1]]]], 5), [[['a', []], ['b', [1]]]])
    check('explicit sequence 8', solve([[['same', [0], False, [0], [0]], ['same', [1], False, [1], [1]]]], 5), [[['same', [0]], ['same', [1]]]])
    check('explicit sequence 9', solve([[['a', [0], True, [0], []]]], 5), [[['a', []]]])
    check('explicit sequence 10', solve([[['a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], True, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]]], 5), [[['a', [0, 1, 2, 3, 4]]]])
if N == 3:
    check('explicit sequence 0', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [1], True, [1], [1]]]], 6), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 1', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], False, [0, 1], [0, 1]]]], 6), [[['back', [0, 1]], ['front', [0, 1]]]])
    check('explicit sequence 2', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0], [0, 1]]]], 6), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 3', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0, 1], [0]]]], 6), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 4', solve([[['back', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 6), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 5', solve([[['back', [0, 1, 2], True, [0, 1, 2], [0, 1, 2]], ['middle', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 6), [[['back', [2]], ['middle', [0]], ['front', [1]]]])
    check('explicit sequence 6', solve([[['z', [0], False, [0], [0]], ['a', [1], False, [1], [1]]]], 6), [[['z', [0]], ['a', [1]]]])
    check('explicit sequence 7', solve([[['a', [0], False, [], [0]], ['b', [1], True, [1], [1]]]], 6), [[['a', []], ['b', [1]]]])
    check('explicit sequence 8', solve([[['same', [0], False, [0], [0]], ['same', [1], False, [1], [1]]]], 6), [[['same', [0]], ['same', [1]]]])
    check('explicit sequence 9', solve([[['a', [0], True, [0], []]]], 6), [[['a', []]]])
    check('explicit sequence 10', solve([[['a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], True, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]]], 6), [[['a', [0, 1, 2, 3, 4, 5]]]])
if N == 4:
    check('explicit sequence 0', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [1], True, [1], [1]]]], 7), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 1', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], False, [0, 1], [0, 1]]]], 7), [[['back', [0, 1]], ['front', [0, 1]]]])
    check('explicit sequence 2', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0], [0, 1]]]], 7), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 3', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0, 1], [0]]]], 7), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 4', solve([[['back', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 7), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 5', solve([[['back', [0, 1, 2], True, [0, 1, 2], [0, 1, 2]], ['middle', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 7), [[['back', [2]], ['middle', [0]], ['front', [1]]]])
    check('explicit sequence 6', solve([[['z', [0], False, [0], [0]], ['a', [1], False, [1], [1]]]], 7), [[['z', [0]], ['a', [1]]]])
    check('explicit sequence 7', solve([[['a', [0], False, [], [0]], ['b', [1], True, [1], [1]]]], 7), [[['a', []], ['b', [1]]]])
    check('explicit sequence 8', solve([[['same', [0], False, [0], [0]], ['same', [1], False, [1], [1]]]], 7), [[['same', [0]], ['same', [1]]]])
    check('explicit sequence 9', solve([[['a', [0], True, [0], []]]], 7), [[['a', []]]])
    check('explicit sequence 10', solve([[['a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], True, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]]], 7), [[['a', [0, 1, 2, 3, 4, 5, 6]]]])
if N == 5:
    check('explicit sequence 0', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [1], True, [1], [1]]]], 8), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 1', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], False, [0, 1], [0, 1]]]], 8), [[['back', [0, 1]], ['front', [0, 1]]]])
    check('explicit sequence 2', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0], [0, 1]]]], 8), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 3', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0, 1], [0]]]], 8), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 4', solve([[['back', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 8), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 5', solve([[['back', [0, 1, 2], True, [0, 1, 2], [0, 1, 2]], ['middle', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 8), [[['back', [2]], ['middle', [0]], ['front', [1]]]])
    check('explicit sequence 6', solve([[['z', [0], False, [0], [0]], ['a', [1], False, [1], [1]]]], 8), [[['z', [0]], ['a', [1]]]])
    check('explicit sequence 7', solve([[['a', [0], False, [], [0]], ['b', [1], True, [1], [1]]]], 8), [[['a', []], ['b', [1]]]])
    check('explicit sequence 8', solve([[['same', [0], False, [0], [0]], ['same', [1], False, [1], [1]]]], 8), [[['same', [0]], ['same', [1]]]])
    check('explicit sequence 9', solve([[['a', [0], True, [0], []]]], 8), [[['a', []]]])
    check('explicit sequence 10', solve([[['a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], True, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]]], 8), [[['a', [0, 1, 2, 3, 4, 5, 6, 7]]]])
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
explicit sequence 0[[['back', [0]], ['front', [1]]]][[['back', [0]], ['front', [1]]]]Passed
explicit sequence 1[[['back', [0, 1]], ['front', [0, 1]]]][[['back', [0, 1]], ['front', [0, 1]]]]Passed
explicit sequence 2[[['back', []], ['front', [0]]]][[['back', [1]], ['front', [0]]]]Failed
explicit sequence 3[[['back', []], ['front', [0]]]][[['back', [1]], ['front', [0]]]]Failed
explicit sequence 4[[['back', [0]], ['front', [1]]]][[['back', [0]], ['front', [1]]]]Passed
explicit sequence 5[[['back', [2]], ['middle', [0]], ['front', [1]]]][[['back', [2]], ['middle', [0]], ['front', [1]]]]Passed
explicit sequence 6[[['z', [0]], ['a', [1]]]][[['z', [0]], ['a', [1]]]]Passed
explicit sequence 7[[['a', []], ['b', [1]]]][[['a', []], ['b', [1]]]]Passed
explicit sequence 8[[['same', [0]], ['same', [1]]]][[['same', [0]], ['same', [1]]]]Passed
explicit sequence 9[[['a', []]]][[['a', []]]]Passed
explicit sequence 10[[['a', [0, 1, 2, 3]]]][[['a', [0, 1, 2, 3]]]]Passed

SHA-256 / bfac935b097cab60b6e43ce8e0b4e349981ec21aa4958f536cb97b30f8ec123b

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(commands, size):
    full=set(range(size))
    out=[]
    for draws in commands:
        occluded=set()
        visible=[]
        for key,coverage,opaque,clip,writes in reversed(draws):
            effective=set(coverage)&set(clip)&set(writes)&full
            remaining=effective-occluded
            visible.append([key,sorted(remaining)])
            if opaque: occluded |= set(coverage)&full
        out.append(list(reversed(visible)))
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
    check('explicit sequence 0', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [1], True, [1], [1]]]], 4), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 1', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], False, [0, 1], [0, 1]]]], 4), [[['back', [0, 1]], ['front', [0, 1]]]])
    check('explicit sequence 2', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0], [0, 1]]]], 4), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 3', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0, 1], [0]]]], 4), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 4', solve([[['back', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 4), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 5', solve([[['back', [0, 1, 2], True, [0, 1, 2], [0, 1, 2]], ['middle', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 4), [[['back', [2]], ['middle', [0]], ['front', [1]]]])
    check('explicit sequence 6', solve([[['z', [0], False, [0], [0]], ['a', [1], False, [1], [1]]]], 4), [[['z', [0]], ['a', [1]]]])
    check('explicit sequence 7', solve([[['a', [0], False, [], [0]], ['b', [1], True, [1], [1]]]], 4), [[['a', []], ['b', [1]]]])
    check('explicit sequence 8', solve([[['same', [0], False, [0], [0]], ['same', [1], False, [1], [1]]]], 4), [[['same', [0]], ['same', [1]]]])
    check('explicit sequence 9', solve([[['a', [0], True, [0], []]]], 4), [[['a', []]]])
    check('explicit sequence 10', solve([[['a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], True, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]]], 4), [[['a', [0, 1, 2, 3]]]])
if N == 2:
    check('explicit sequence 0', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [1], True, [1], [1]]]], 5), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 1', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], False, [0, 1], [0, 1]]]], 5), [[['back', [0, 1]], ['front', [0, 1]]]])
    check('explicit sequence 2', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0], [0, 1]]]], 5), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 3', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0, 1], [0]]]], 5), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 4', solve([[['back', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 5), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 5', solve([[['back', [0, 1, 2], True, [0, 1, 2], [0, 1, 2]], ['middle', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 5), [[['back', [2]], ['middle', [0]], ['front', [1]]]])
    check('explicit sequence 6', solve([[['z', [0], False, [0], [0]], ['a', [1], False, [1], [1]]]], 5), [[['z', [0]], ['a', [1]]]])
    check('explicit sequence 7', solve([[['a', [0], False, [], [0]], ['b', [1], True, [1], [1]]]], 5), [[['a', []], ['b', [1]]]])
    check('explicit sequence 8', solve([[['same', [0], False, [0], [0]], ['same', [1], False, [1], [1]]]], 5), [[['same', [0]], ['same', [1]]]])
    check('explicit sequence 9', solve([[['a', [0], True, [0], []]]], 5), [[['a', []]]])
    check('explicit sequence 10', solve([[['a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], True, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]]], 5), [[['a', [0, 1, 2, 3, 4]]]])
if N == 3:
    check('explicit sequence 0', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [1], True, [1], [1]]]], 6), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 1', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], False, [0, 1], [0, 1]]]], 6), [[['back', [0, 1]], ['front', [0, 1]]]])
    check('explicit sequence 2', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0], [0, 1]]]], 6), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 3', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0, 1], [0]]]], 6), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 4', solve([[['back', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 6), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 5', solve([[['back', [0, 1, 2], True, [0, 1, 2], [0, 1, 2]], ['middle', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 6), [[['back', [2]], ['middle', [0]], ['front', [1]]]])
    check('explicit sequence 6', solve([[['z', [0], False, [0], [0]], ['a', [1], False, [1], [1]]]], 6), [[['z', [0]], ['a', [1]]]])
    check('explicit sequence 7', solve([[['a', [0], False, [], [0]], ['b', [1], True, [1], [1]]]], 6), [[['a', []], ['b', [1]]]])
    check('explicit sequence 8', solve([[['same', [0], False, [0], [0]], ['same', [1], False, [1], [1]]]], 6), [[['same', [0]], ['same', [1]]]])
    check('explicit sequence 9', solve([[['a', [0], True, [0], []]]], 6), [[['a', []]]])
    check('explicit sequence 10', solve([[['a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], True, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]]], 6), [[['a', [0, 1, 2, 3, 4, 5]]]])
if N == 4:
    check('explicit sequence 0', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [1], True, [1], [1]]]], 7), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 1', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], False, [0, 1], [0, 1]]]], 7), [[['back', [0, 1]], ['front', [0, 1]]]])
    check('explicit sequence 2', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0], [0, 1]]]], 7), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 3', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0, 1], [0]]]], 7), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 4', solve([[['back', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 7), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 5', solve([[['back', [0, 1, 2], True, [0, 1, 2], [0, 1, 2]], ['middle', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 7), [[['back', [2]], ['middle', [0]], ['front', [1]]]])
    check('explicit sequence 6', solve([[['z', [0], False, [0], [0]], ['a', [1], False, [1], [1]]]], 7), [[['z', [0]], ['a', [1]]]])
    check('explicit sequence 7', solve([[['a', [0], False, [], [0]], ['b', [1], True, [1], [1]]]], 7), [[['a', []], ['b', [1]]]])
    check('explicit sequence 8', solve([[['same', [0], False, [0], [0]], ['same', [1], False, [1], [1]]]], 7), [[['same', [0]], ['same', [1]]]])
    check('explicit sequence 9', solve([[['a', [0], True, [0], []]]], 7), [[['a', []]]])
    check('explicit sequence 10', solve([[['a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], True, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]]], 7), [[['a', [0, 1, 2, 3, 4, 5, 6]]]])
if N == 5:
    check('explicit sequence 0', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [1], True, [1], [1]]]], 8), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 1', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], False, [0, 1], [0, 1]]]], 8), [[['back', [0, 1]], ['front', [0, 1]]]])
    check('explicit sequence 2', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0], [0, 1]]]], 8), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 3', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0, 1], [0]]]], 8), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 4', solve([[['back', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 8), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 5', solve([[['back', [0, 1, 2], True, [0, 1, 2], [0, 1, 2]], ['middle', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 8), [[['back', [2]], ['middle', [0]], ['front', [1]]]])
    check('explicit sequence 6', solve([[['z', [0], False, [0], [0]], ['a', [1], False, [1], [1]]]], 8), [[['z', [0]], ['a', [1]]]])
    check('explicit sequence 7', solve([[['a', [0], False, [], [0]], ['b', [1], True, [1], [1]]]], 8), [[['a', []], ['b', [1]]]])
    check('explicit sequence 8', solve([[['same', [0], False, [0], [0]], ['same', [1], False, [1], [1]]]], 8), [[['same', [0]], ['same', [1]]]])
    check('explicit sequence 9', solve([[['a', [0], True, [0], []]]], 8), [[['a', []]]])
    check('explicit sequence 10', solve([[['a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], True, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]]], 8), [[['a', [0, 1, 2, 3, 4, 5, 6, 7]]]])
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
explicit sequence 0[[['back', [0]], ['front', [1]]]][[['back', [0]], ['front', [1]]]]Passed
explicit sequence 1[[['back', [0, 1]], ['front', [0, 1]]]][[['back', [0, 1]], ['front', [0, 1]]]]Passed
explicit sequence 2[[['back', []], ['front', [0]]]][[['back', [1]], ['front', [0]]]]Failed
explicit sequence 3[[['back', []], ['front', [0]]]][[['back', [1]], ['front', [0]]]]Failed
explicit sequence 4[[['back', [0]], ['front', [1]]]][[['back', [0]], ['front', [1]]]]Passed
explicit sequence 5[[['back', [2]], ['middle', [0]], ['front', [1]]]][[['back', [2]], ['middle', [0]], ['front', [1]]]]Passed
explicit sequence 6[[['z', [0]], ['a', [1]]]][[['z', [0]], ['a', [1]]]]Passed
explicit sequence 7[[['a', []], ['b', [1]]]][[['a', []], ['b', [1]]]]Passed
explicit sequence 8[[['same', [0]], ['same', [1]]]][[['same', [0]], ['same', [1]]]]Passed
explicit sequence 9[[['a', []]]][[['a', []]]]Passed
explicit sequence 10[[['a', [0, 1, 2, 3]]]][[['a', [0, 1, 2, 3]]]]Passed

SHA-256 / 2432a933cf2a44fb254da7227ce278647a5d70cb4759abd6486f173c007e372a

3 / The verified repair

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

N = 1
observations = []
def solve(commands, size):
    full=set(range(size))
    out=[]
    for draws in commands:
        occluded=set()
        visible=[]
        for key,coverage,opaque,clip,writes in reversed(draws):
            effective=set(coverage)&set(clip)&set(writes)&full
            remaining=effective-occluded
            visible.append([key,sorted(remaining)])
            if opaque: occluded |= effective
        out.append(list(reversed(visible)))
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
    check('explicit sequence 0', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [1], True, [1], [1]]]], 4), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 1', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], False, [0, 1], [0, 1]]]], 4), [[['back', [0, 1]], ['front', [0, 1]]]])
    check('explicit sequence 2', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0], [0, 1]]]], 4), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 3', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0, 1], [0]]]], 4), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 4', solve([[['back', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 4), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 5', solve([[['back', [0, 1, 2], True, [0, 1, 2], [0, 1, 2]], ['middle', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 4), [[['back', [2]], ['middle', [0]], ['front', [1]]]])
    check('explicit sequence 6', solve([[['z', [0], False, [0], [0]], ['a', [1], False, [1], [1]]]], 4), [[['z', [0]], ['a', [1]]]])
    check('explicit sequence 7', solve([[['a', [0], False, [], [0]], ['b', [1], True, [1], [1]]]], 4), [[['a', []], ['b', [1]]]])
    check('explicit sequence 8', solve([[['same', [0], False, [0], [0]], ['same', [1], False, [1], [1]]]], 4), [[['same', [0]], ['same', [1]]]])
    check('explicit sequence 9', solve([[['a', [0], True, [0], []]]], 4), [[['a', []]]])
    check('explicit sequence 10', solve([[['a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], True, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]]], 4), [[['a', [0, 1, 2, 3]]]])
if N == 2:
    check('explicit sequence 0', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [1], True, [1], [1]]]], 5), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 1', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], False, [0, 1], [0, 1]]]], 5), [[['back', [0, 1]], ['front', [0, 1]]]])
    check('explicit sequence 2', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0], [0, 1]]]], 5), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 3', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0, 1], [0]]]], 5), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 4', solve([[['back', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 5), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 5', solve([[['back', [0, 1, 2], True, [0, 1, 2], [0, 1, 2]], ['middle', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 5), [[['back', [2]], ['middle', [0]], ['front', [1]]]])
    check('explicit sequence 6', solve([[['z', [0], False, [0], [0]], ['a', [1], False, [1], [1]]]], 5), [[['z', [0]], ['a', [1]]]])
    check('explicit sequence 7', solve([[['a', [0], False, [], [0]], ['b', [1], True, [1], [1]]]], 5), [[['a', []], ['b', [1]]]])
    check('explicit sequence 8', solve([[['same', [0], False, [0], [0]], ['same', [1], False, [1], [1]]]], 5), [[['same', [0]], ['same', [1]]]])
    check('explicit sequence 9', solve([[['a', [0], True, [0], []]]], 5), [[['a', []]]])
    check('explicit sequence 10', solve([[['a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], True, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]]], 5), [[['a', [0, 1, 2, 3, 4]]]])
if N == 3:
    check('explicit sequence 0', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [1], True, [1], [1]]]], 6), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 1', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], False, [0, 1], [0, 1]]]], 6), [[['back', [0, 1]], ['front', [0, 1]]]])
    check('explicit sequence 2', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0], [0, 1]]]], 6), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 3', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0, 1], [0]]]], 6), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 4', solve([[['back', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 6), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 5', solve([[['back', [0, 1, 2], True, [0, 1, 2], [0, 1, 2]], ['middle', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 6), [[['back', [2]], ['middle', [0]], ['front', [1]]]])
    check('explicit sequence 6', solve([[['z', [0], False, [0], [0]], ['a', [1], False, [1], [1]]]], 6), [[['z', [0]], ['a', [1]]]])
    check('explicit sequence 7', solve([[['a', [0], False, [], [0]], ['b', [1], True, [1], [1]]]], 6), [[['a', []], ['b', [1]]]])
    check('explicit sequence 8', solve([[['same', [0], False, [0], [0]], ['same', [1], False, [1], [1]]]], 6), [[['same', [0]], ['same', [1]]]])
    check('explicit sequence 9', solve([[['a', [0], True, [0], []]]], 6), [[['a', []]]])
    check('explicit sequence 10', solve([[['a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], True, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]]], 6), [[['a', [0, 1, 2, 3, 4, 5]]]])
if N == 4:
    check('explicit sequence 0', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [1], True, [1], [1]]]], 7), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 1', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], False, [0, 1], [0, 1]]]], 7), [[['back', [0, 1]], ['front', [0, 1]]]])
    check('explicit sequence 2', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0], [0, 1]]]], 7), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 3', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0, 1], [0]]]], 7), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 4', solve([[['back', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 7), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 5', solve([[['back', [0, 1, 2], True, [0, 1, 2], [0, 1, 2]], ['middle', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 7), [[['back', [2]], ['middle', [0]], ['front', [1]]]])
    check('explicit sequence 6', solve([[['z', [0], False, [0], [0]], ['a', [1], False, [1], [1]]]], 7), [[['z', [0]], ['a', [1]]]])
    check('explicit sequence 7', solve([[['a', [0], False, [], [0]], ['b', [1], True, [1], [1]]]], 7), [[['a', []], ['b', [1]]]])
    check('explicit sequence 8', solve([[['same', [0], False, [0], [0]], ['same', [1], False, [1], [1]]]], 7), [[['same', [0]], ['same', [1]]]])
    check('explicit sequence 9', solve([[['a', [0], True, [0], []]]], 7), [[['a', []]]])
    check('explicit sequence 10', solve([[['a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], True, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]]], 7), [[['a', [0, 1, 2, 3, 4, 5, 6]]]])
if N == 5:
    check('explicit sequence 0', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [1], True, [1], [1]]]], 8), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 1', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], False, [0, 1], [0, 1]]]], 8), [[['back', [0, 1]], ['front', [0, 1]]]])
    check('explicit sequence 2', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0], [0, 1]]]], 8), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 3', solve([[['back', [0, 1], True, [0, 1], [0, 1]], ['front', [0, 1], True, [0, 1], [0]]]], 8), [[['back', [1]], ['front', [0]]]])
    check('explicit sequence 4', solve([[['back', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 8), [[['back', [0]], ['front', [1]]]])
    check('explicit sequence 5', solve([[['back', [0, 1, 2], True, [0, 1, 2], [0, 1, 2]], ['middle', [0], True, [0], [0]], ['front', [1], True, [1], [1]]]], 8), [[['back', [2]], ['middle', [0]], ['front', [1]]]])
    check('explicit sequence 6', solve([[['z', [0], False, [0], [0]], ['a', [1], False, [1], [1]]]], 8), [[['z', [0]], ['a', [1]]]])
    check('explicit sequence 7', solve([[['a', [0], False, [], [0]], ['b', [1], True, [1], [1]]]], 8), [[['a', []], ['b', [1]]]])
    check('explicit sequence 8', solve([[['same', [0], False, [0], [0]], ['same', [1], False, [1], [1]]]], 8), [[['same', [0]], ['same', [1]]]])
    check('explicit sequence 9', solve([[['a', [0], True, [0], []]]], 8), [[['a', []]]])
    check('explicit sequence 10', solve([[['a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], True, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]]], 8), [[['a', [0, 1, 2, 3, 4, 5, 6, 7]]]])
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
explicit sequence 0[[['back', [0]], ['front', [1]]]][[['back', [0]], ['front', [1]]]]Passed
explicit sequence 1[[['back', [0, 1]], ['front', [0, 1]]]][[['back', [0, 1]], ['front', [0, 1]]]]Passed
explicit sequence 2[[['back', [1]], ['front', [0]]]][[['back', [1]], ['front', [0]]]]Passed
explicit sequence 3[[['back', [1]], ['front', [0]]]][[['back', [1]], ['front', [0]]]]Passed
explicit sequence 4[[['back', [0]], ['front', [1]]]][[['back', [0]], ['front', [1]]]]Passed
explicit sequence 5[[['back', [2]], ['middle', [0]], ['front', [1]]]][[['back', [2]], ['middle', [0]], ['front', [1]]]]Passed
explicit sequence 6[[['z', [0]], ['a', [1]]]][[['z', [0]], ['a', [1]]]]Passed
explicit sequence 7[[['a', []], ['b', [1]]]][[['a', []], ['b', [1]]]]Passed
explicit sequence 8[[['same', [0]], ['same', [1]]]][[['same', [0]], ['same', [1]]]]Passed
explicit sequence 9[[['a', []]]][[['a', []]]]Passed
explicit sequence 10[[['a', [0, 1, 2, 3]]]][[['a', [0, 1, 2, 3]]]]Passed

SHA-256 / 6169de50c1291df6dc0b60fa03bafcdbcbf6458d702f440d60d51429b6a89c9a

Verification & scope

Finite one-dimensional integer sample sets model coverage state only; no geometric intersection, memory layout, GPU or graphics-standard conformance is claimed. 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:45:18.194857+00:00.

Case digest / 88d63447f09d10a7532a67325c25b19ee1d241e7cec664911f82e505743122bc