FAILURE MAP
← Case archive

FA-44571 / Data systems / Open access

Outer explode sorts parent rows before expansion · case 01

Outer explode sorts parent rows before expansion.

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

ROOT CAUSE

outer-list-explode: Outer explode sorts parent rows before expansion.

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: Reversing source rows still violates the stipulated stable order.

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 sorted(d,key=lambda row:row[0]):
            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[[1, 0, 4], [3, 0, 1], [3, 1, 2]][[3, 0, 1], [3, 1, 2], [1, 0, 4]]Failed
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 / 751a40d802cdc1e06070e43dfb6fbc984500ee607f53b08afda01b7ee9f65ca2

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 reversed(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[[1, 0, 4], [3, 0, 1], [3, 1, 2]][[3, 0, 1], [3, 1, 2], [1, 0, 4]]Failed
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 / 2ae2729253f00ee944617e2cb4f26ac408fe3d08f3da6268ee65c1382484ec9a

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.523681+00:00.

Case digest / 7b12c4903b7a1baa9102261c05838bd78ad392a608b52d2d775043ea9e77d831