FAILURE MAP
← Case archive

FA-44551 / Data systems / Open access

Outer explode drops rows whose list is null · case 01

Outer explode drops rows whose list is null.

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

ROOT CAUSE

outer-list-explode: Outer explode drops rows whose list is null.

VERIFIED REPAIR

Preserve the stated physical representation and operation order: Explode [id,list-or-None] rows preserving input and element order. Outer semantics yield [id,None,None] for null or empty lists; populated lists yield [id,zero-based-position,value], including null elements.

Unsuccessful approach: Giving an absent list a real element ordinal invents an element.

Case contract

Explode [id,list-or-None] rows preserving input and element order. Outer semantics yield [id,None,None] for null or empty lists; populated lists yield [id,zero-based-position,value], including null elements.

Why this case matters

A bounded deterministic data engine model makes representation and changelog faults reproducible.

1 / The failure

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

N = 1
observations = []
def solve(d):
    try:
        out=[]
        for ident,values in d:
            if values is None:
                continue
            if not values:
                out.append([ident,None,None]); continue
            for pos,value in enumerate(values):
                out.append([ident,pos,value])
        return out
    except (IndexError, KeyError, ValueError, StopIteration) as exc:
        return {"representation_error": type(exc).__name__}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
    check('ordered parents', solve([[3, [1, 2]], [1, [4]]]), [[3, 0, 1], [3, 1, 2], [1, 0, 4]])
    check('null parent', solve([[1, None]]), [[1, None, None]])
    check('empty parent', solve([[1, []]]), [[1, None, None]])
    check('null element', solve([[1, [None, 2]]]), [[1, 0, None], [1, 1, 2]])
    check('duplicate element', solve([[1, [2, 2]]]), [[1, 0, 2], [1, 1, 2]])
    check('empty input', solve([]), [])
    check('singleton', solve([[5, [1]]]), [[5, 0, 1]])
elif N == 2:
    check('ordered parents', solve([[4, [2, 3]], [2, [5]]]), [[4, 0, 2], [4, 1, 3], [2, 0, 5]])
    check('null parent', solve([[2, None]]), [[2, None, None]])
    check('empty parent', solve([[2, []]]), [[2, None, None]])
    check('null element', solve([[2, [None, 3]]]), [[2, 0, None], [2, 1, 3]])
    check('duplicate element', solve([[2, [3, 3]]]), [[2, 0, 3], [2, 1, 3]])
    check('empty input', solve([]), [])
    check('singleton', solve([[6, [2]]]), [[6, 0, 2]])
elif N == 3:
    check('ordered parents', solve([[5, [3, 4]], [3, [6]]]), [[5, 0, 3], [5, 1, 4], [3, 0, 6]])
    check('null parent', solve([[3, None]]), [[3, None, None]])
    check('empty parent', solve([[3, []]]), [[3, None, None]])
    check('null element', solve([[3, [None, 4]]]), [[3, 0, None], [3, 1, 4]])
    check('duplicate element', solve([[3, [4, 4]]]), [[3, 0, 4], [3, 1, 4]])
    check('empty input', solve([]), [])
    check('singleton', solve([[7, [3]]]), [[7, 0, 3]])
elif N == 4:
    check('ordered parents', solve([[6, [4, 5]], [4, [7]]]), [[6, 0, 4], [6, 1, 5], [4, 0, 7]])
    check('null parent', solve([[4, None]]), [[4, None, None]])
    check('empty parent', solve([[4, []]]), [[4, None, None]])
    check('null element', solve([[4, [None, 5]]]), [[4, 0, None], [4, 1, 5]])
    check('duplicate element', solve([[4, [5, 5]]]), [[4, 0, 5], [4, 1, 5]])
    check('empty input', solve([]), [])
    check('singleton', solve([[8, [4]]]), [[8, 0, 4]])
elif N == 5:
    check('ordered parents', solve([[7, [5, 6]], [5, [8]]]), [[7, 0, 5], [7, 1, 6], [5, 0, 8]])
    check('null parent', solve([[5, None]]), [[5, None, None]])
    check('empty parent', solve([[5, []]]), [[5, None, None]])
    check('null element', solve([[5, [None, 6]]]), [[5, 0, None], [5, 1, 6]])
    check('duplicate element', solve([[5, [6, 6]]]), [[5, 0, 6], [5, 1, 6]])
    check('empty input', solve([]), [])
    check('singleton', solve([[9, [5]]]), [[9, 0, 5]])
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
ordered parents[[3, 0, 1], [3, 1, 2], [1, 0, 4]][[3, 0, 1], [3, 1, 2], [1, 0, 4]]Passed
null parent[][[1, None, None]]Failed
empty parent[[1, None, None]][[1, None, None]]Passed
null element[[1, 0, None], [1, 1, 2]][[1, 0, None], [1, 1, 2]]Passed
duplicate element[[1, 0, 2], [1, 1, 2]][[1, 0, 2], [1, 1, 2]]Passed
empty input[][]Passed
singleton[[5, 0, 1]][[5, 0, 1]]Passed

SHA-256 / 99f5081d9c4804281a07d99a1a800801b653edf1dba8ea6ec970b5a143a1f1be

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(d):
    try:
        out=[]
        for ident,values in d:
            if values is None:
                out.append([ident,0,None]); continue
            if not values:
                out.append([ident,None,None]); continue
            for pos,value in enumerate(values):
                out.append([ident,pos,value])
        return out
    except (IndexError, KeyError, ValueError, StopIteration) as exc:
        return {"representation_error": type(exc).__name__}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
    check('ordered parents', solve([[3, [1, 2]], [1, [4]]]), [[3, 0, 1], [3, 1, 2], [1, 0, 4]])
    check('null parent', solve([[1, None]]), [[1, None, None]])
    check('empty parent', solve([[1, []]]), [[1, None, None]])
    check('null element', solve([[1, [None, 2]]]), [[1, 0, None], [1, 1, 2]])
    check('duplicate element', solve([[1, [2, 2]]]), [[1, 0, 2], [1, 1, 2]])
    check('empty input', solve([]), [])
    check('singleton', solve([[5, [1]]]), [[5, 0, 1]])
elif N == 2:
    check('ordered parents', solve([[4, [2, 3]], [2, [5]]]), [[4, 0, 2], [4, 1, 3], [2, 0, 5]])
    check('null parent', solve([[2, None]]), [[2, None, None]])
    check('empty parent', solve([[2, []]]), [[2, None, None]])
    check('null element', solve([[2, [None, 3]]]), [[2, 0, None], [2, 1, 3]])
    check('duplicate element', solve([[2, [3, 3]]]), [[2, 0, 3], [2, 1, 3]])
    check('empty input', solve([]), [])
    check('singleton', solve([[6, [2]]]), [[6, 0, 2]])
elif N == 3:
    check('ordered parents', solve([[5, [3, 4]], [3, [6]]]), [[5, 0, 3], [5, 1, 4], [3, 0, 6]])
    check('null parent', solve([[3, None]]), [[3, None, None]])
    check('empty parent', solve([[3, []]]), [[3, None, None]])
    check('null element', solve([[3, [None, 4]]]), [[3, 0, None], [3, 1, 4]])
    check('duplicate element', solve([[3, [4, 4]]]), [[3, 0, 4], [3, 1, 4]])
    check('empty input', solve([]), [])
    check('singleton', solve([[7, [3]]]), [[7, 0, 3]])
elif N == 4:
    check('ordered parents', solve([[6, [4, 5]], [4, [7]]]), [[6, 0, 4], [6, 1, 5], [4, 0, 7]])
    check('null parent', solve([[4, None]]), [[4, None, None]])
    check('empty parent', solve([[4, []]]), [[4, None, None]])
    check('null element', solve([[4, [None, 5]]]), [[4, 0, None], [4, 1, 5]])
    check('duplicate element', solve([[4, [5, 5]]]), [[4, 0, 5], [4, 1, 5]])
    check('empty input', solve([]), [])
    check('singleton', solve([[8, [4]]]), [[8, 0, 4]])
elif N == 5:
    check('ordered parents', solve([[7, [5, 6]], [5, [8]]]), [[7, 0, 5], [7, 1, 6], [5, 0, 8]])
    check('null parent', solve([[5, None]]), [[5, None, None]])
    check('empty parent', solve([[5, []]]), [[5, None, None]])
    check('null element', solve([[5, [None, 6]]]), [[5, 0, None], [5, 1, 6]])
    check('duplicate element', solve([[5, [6, 6]]]), [[5, 0, 6], [5, 1, 6]])
    check('empty input', solve([]), [])
    check('singleton', solve([[9, [5]]]), [[9, 0, 5]])
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
ordered parents[[3, 0, 1], [3, 1, 2], [1, 0, 4]][[3, 0, 1], [3, 1, 2], [1, 0, 4]]Passed
null parent[[1, 0, None]][[1, None, None]]Failed
empty parent[[1, None, None]][[1, None, None]]Passed
null element[[1, 0, None], [1, 1, 2]][[1, 0, None], [1, 1, 2]]Passed
duplicate element[[1, 0, 2], [1, 1, 2]][[1, 0, 2], [1, 1, 2]]Passed
empty input[][]Passed
singleton[[5, 0, 1]][[5, 0, 1]]Passed

SHA-256 / 1922dc7d91b098dfce764b9d4010f07f9c73082254f11c69c22c30f39d5be27f

3 / The verified repair

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

N = 1
observations = []
def solve(d):
    try:
        out=[]
        for ident,values in d:
            if values is None:
                out.append([ident,None,None]); continue
            if not values:
                out.append([ident,None,None]); continue
            for pos,value in enumerate(values):
                out.append([ident,pos,value])
        return out
    except (IndexError, KeyError, ValueError, StopIteration) as exc:
        return {"representation_error": type(exc).__name__}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
    check('ordered parents', solve([[3, [1, 2]], [1, [4]]]), [[3, 0, 1], [3, 1, 2], [1, 0, 4]])
    check('null parent', solve([[1, None]]), [[1, None, None]])
    check('empty parent', solve([[1, []]]), [[1, None, None]])
    check('null element', solve([[1, [None, 2]]]), [[1, 0, None], [1, 1, 2]])
    check('duplicate element', solve([[1, [2, 2]]]), [[1, 0, 2], [1, 1, 2]])
    check('empty input', solve([]), [])
    check('singleton', solve([[5, [1]]]), [[5, 0, 1]])
elif N == 2:
    check('ordered parents', solve([[4, [2, 3]], [2, [5]]]), [[4, 0, 2], [4, 1, 3], [2, 0, 5]])
    check('null parent', solve([[2, None]]), [[2, None, None]])
    check('empty parent', solve([[2, []]]), [[2, None, None]])
    check('null element', solve([[2, [None, 3]]]), [[2, 0, None], [2, 1, 3]])
    check('duplicate element', solve([[2, [3, 3]]]), [[2, 0, 3], [2, 1, 3]])
    check('empty input', solve([]), [])
    check('singleton', solve([[6, [2]]]), [[6, 0, 2]])
elif N == 3:
    check('ordered parents', solve([[5, [3, 4]], [3, [6]]]), [[5, 0, 3], [5, 1, 4], [3, 0, 6]])
    check('null parent', solve([[3, None]]), [[3, None, None]])
    check('empty parent', solve([[3, []]]), [[3, None, None]])
    check('null element', solve([[3, [None, 4]]]), [[3, 0, None], [3, 1, 4]])
    check('duplicate element', solve([[3, [4, 4]]]), [[3, 0, 4], [3, 1, 4]])
    check('empty input', solve([]), [])
    check('singleton', solve([[7, [3]]]), [[7, 0, 3]])
elif N == 4:
    check('ordered parents', solve([[6, [4, 5]], [4, [7]]]), [[6, 0, 4], [6, 1, 5], [4, 0, 7]])
    check('null parent', solve([[4, None]]), [[4, None, None]])
    check('empty parent', solve([[4, []]]), [[4, None, None]])
    check('null element', solve([[4, [None, 5]]]), [[4, 0, None], [4, 1, 5]])
    check('duplicate element', solve([[4, [5, 5]]]), [[4, 0, 5], [4, 1, 5]])
    check('empty input', solve([]), [])
    check('singleton', solve([[8, [4]]]), [[8, 0, 4]])
elif N == 5:
    check('ordered parents', solve([[7, [5, 6]], [5, [8]]]), [[7, 0, 5], [7, 1, 6], [5, 0, 8]])
    check('null parent', solve([[5, None]]), [[5, None, None]])
    check('empty parent', solve([[5, []]]), [[5, None, None]])
    check('null element', solve([[5, [None, 6]]]), [[5, 0, None], [5, 1, 6]])
    check('duplicate element', solve([[5, [6, 6]]]), [[5, 0, 6], [5, 1, 6]])
    check('empty input', solve([]), [])
    check('singleton', solve([[9, [5]]]), [[9, 0, 5]])
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
ordered parents[[3, 0, 1], [3, 1, 2], [1, 0, 4]][[3, 0, 1], [3, 1, 2], [1, 0, 4]]Passed
null parent[[1, None, None]][[1, None, None]]Passed
empty parent[[1, None, None]][[1, None, None]]Passed
null element[[1, 0, None], [1, 1, 2]][[1, 0, None], [1, 1, 2]]Passed
duplicate element[[1, 0, 2], [1, 1, 2]][[1, 0, 2], [1, 1, 2]]Passed
empty input[][]Passed
singleton[[5, 0, 1]][[5, 0, 1]]Passed

SHA-256 / 3895f6e02c20400c7fc4008b2efd972dcf9b71f1ffea2e569c673bc863a4c022

Verification & scope

Offline stipulated semantics over valid small inputs; no performance, concurrency, or production-engine conformance claim. 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:44:13.343031+00:00.

Case digest / 69a34fd67600a203a00785ec5797c46dedcab5ab988496f3692e0fbd615071f8