FA-44556 / Data systems / Open access
Outer explode drops rows whose list is empty · case 01
Outer explode drops rows whose list is empty.
ROOT CAUSE
outer-list-explode: Outer explode drops rows whose list is empty.
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: An empty list has no zero-position 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:
out.append([ident,None,None]); continue
if not values:
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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]] | Failed |
| 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 / 798d89bbae5d59dd8efd12d2f33aefe7afc93ffc8d8539fb62ba259b4a78e50b
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,None,None]); continue
if not values:
out.append([ident,0,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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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, 0, None]] | [[1, None, None]] | Failed |
| 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 / bc19fdaa48b4f526ceced81b1dc1dcb0f436e9b89721e86b78ffda3fcf8a2b10
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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.389530+00:00.
Case digest / 20bc89d84cf7c37f5cc43946393c5307f9639b45baacdc02b40e02663331038d