FAILURE MAP
← Case archive

FA-12651 / Causal analysis data contracts / Open access

Post-assignment covariates enter a prespecified baseline adjustment set · case 01

Post-assignment covariates enter a prespecified baseline adjustment set.

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

ROOT CAUSE

Candidate columns are accepted without enforcing the design cutoff.

VERIFIED REPAIR

Require approved baseline role and measurement strictly before assignment.

Unsuccessful approach: Role filtering alone retains mislabeled late measurements.

Case contract

Candidates [name,role,time] have roles baseline, mediator, or outcome. Return sorted baseline names measured strictly before assignment time.

Why this case matters

A deterministic synthetic study model isolates this data-contract defect; outputs alone establish no real-world causal identification.

1 / The failure

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

N = 1
observations = []
def solve(candidates, assigned_at):
    return sorted(r[0] for r in candidates)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('late baseline', solve([['x','baseline',N+1]], N), [])
check('proper baseline', solve([['x','baseline',N-1]], N), ['x'])
check('same instant', solve([['x','baseline',N]], N), [])
check('mediator', solve([['m','mediator',N-1]], N), [])
check('empty', solve([], N), [])
check('mixed', solve([['z','baseline',N-2],['a','baseline',N-1],['y','outcome',N+2]], N), ['a','z'])
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
late baseline['x'][]Failed
proper baseline['x']['x']Passed
same instant['x'][]Failed
mediator['m'][]Failed
empty[][]Passed
mixed['a', 'y', 'z']['a', 'z']Failed

SHA-256 / 9a9fa62fe41070d3114c6f97046426a52bd38df28edf1cf4cfce5a8c537ee7c6

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(candidates, assigned_at):
    return sorted(r[0] for r in candidates if r[1] == 'baseline')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('late baseline', solve([['x','baseline',N+1]], N), [])
check('proper baseline', solve([['x','baseline',N-1]], N), ['x'])
check('same instant', solve([['x','baseline',N]], N), [])
check('mediator', solve([['m','mediator',N-1]], N), [])
check('empty', solve([], N), [])
check('mixed', solve([['z','baseline',N-2],['a','baseline',N-1],['y','outcome',N+2]], N), ['a','z'])
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
late baseline['x'][]Failed
proper baseline['x']['x']Passed
same instant['x'][]Failed
mediator[][]Passed
empty[][]Passed
mixed['a', 'z']['a', 'z']Passed

SHA-256 / e6553bc0e1dfc6138e9cba205d7c58ac575dd59594cdea384deb778a5a25b676

3 / The verified repair

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

N = 1
observations = []
def solve(candidates, assigned_at):
    return sorted(r[0] for r in candidates if r[1] == 'baseline' and r[2] < assigned_at)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('late baseline', solve([['x','baseline',N+1]], N), [])
check('proper baseline', solve([['x','baseline',N-1]], N), ['x'])
check('same instant', solve([['x','baseline',N]], N), [])
check('mediator', solve([['m','mediator',N-1]], N), [])
check('empty', solve([], N), [])
check('mixed', solve([['z','baseline',N-2],['a','baseline',N-1],['y','outcome',N+2]], N), ['a','z'])
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
late baseline[][]Passed
proper baseline['x']['x']Passed
same instant[][]Passed
mediator[][]Passed
empty[][]Passed
mixed['a', 'z']['a', 'z']Passed

SHA-256 / 511ca6c282559cabb9f06f944cc1d8d49d11478b40a9ef8107817e116bd34eb1

Verification & scope

Finite, fully specified synthetic data only; identification assumptions are supplied by the fixture design, not inferred from observations. 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:58.793953+00:00.

Case digest / 3402645a8e5db7b1b5d9c89d73c062fe6ae58b12c79f15d8baac9c920e21ea3a