FA-45576 / Data systems / Open access
Default evaluation discards rules whose dependencies appear later · case 01
Default evaluation discards rules whose dependencies appear later.
ROOT CAUSE
default-column-dependencies: Default evaluation discards rules whose dependencies appear later.
VERIFIED REPAIR
Preserve the stated physical representation and operation order: Materialize missing columns using ordered default rules [target,source-or-None,constant]. A constant rule writes constant; a dependent rule writes source+constant, propagating explicit null. Existing columns including None and zero never change. Resolve forward dependencies to a fixed point; unresolved dependencies return DEFAULT_CYCLE.
Unsuccessful approach: Declaring a cycle before trying later rules rejects resolvable forward references.
Case contract
Materialize missing columns using ordered default rules [target,source-or-None,constant]. A constant rule writes constant; a dependent rule writes source+constant, propagating explicit null. Existing columns including None and zero never change. Resolve forward dependencies to a fixed point; unresolved dependencies return DEFAULT_CYCLE.
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:
row,rules=d
result=dict(row)
pending=[rule for rule in rules if rule[0] not in result]
while pending:
progressed=False; later=[]
for target,source,constant in pending:
if source is not None and source not in result:
continue
result[target]=constant if source is None else (None if result[source] is None else result[source]+constant)
progressed=True
if not progressed: return 'DEFAULT_CYCLE'
pending=later
return result
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('forward dependency', solve([{}, [['b', 'a', 2], ['a', None, 1]]]), {'a': 1, 'b': 3})
check('explicit null', solve([{'a': None}, [['a', None, 1], ['b', 'a', 1]]]), {'a': None, 'b': None})
check('explicit zero', solve([{'a': 0}, [['a', None, 1], ['b', 'a', 2]]]), {'a': 0, 'b': 2})
check('dependency cycle', solve([{}, [['a', 'b', 1], ['b', 'a', 1]]]), 'DEFAULT_CYCLE')
check('provided unrelated', solve([{'x': 1}, [['a', None, 2]]]), {'x': 1, 'a': 2})
check('source provided', solve([{'a': 1}, [['b', 'a', 3]]]), {'a': 1, 'b': 4})
check('no defaults', solve([{'a': 1}, []]), {'a': 1})
elif N == 2:
check('forward dependency', solve([{}, [['b', 'a', 2], ['a', None, 2]]]), {'a': 2, 'b': 4})
check('explicit null', solve([{'a': None}, [['a', None, 2], ['b', 'a', 1]]]), {'a': None, 'b': None})
check('explicit zero', solve([{'a': 0}, [['a', None, 2], ['b', 'a', 2]]]), {'a': 0, 'b': 2})
check('dependency cycle', solve([{}, [['a', 'b', 1], ['b', 'a', 1]]]), 'DEFAULT_CYCLE')
check('provided unrelated', solve([{'x': 2}, [['a', None, 3]]]), {'x': 2, 'a': 3})
check('source provided', solve([{'a': 2}, [['b', 'a', 3]]]), {'a': 2, 'b': 5})
check('no defaults', solve([{'a': 2}, []]), {'a': 2})
elif N == 3:
check('forward dependency', solve([{}, [['b', 'a', 2], ['a', None, 3]]]), {'a': 3, 'b': 5})
check('explicit null', solve([{'a': None}, [['a', None, 3], ['b', 'a', 1]]]), {'a': None, 'b': None})
check('explicit zero', solve([{'a': 0}, [['a', None, 3], ['b', 'a', 2]]]), {'a': 0, 'b': 2})
check('dependency cycle', solve([{}, [['a', 'b', 1], ['b', 'a', 1]]]), 'DEFAULT_CYCLE')
check('provided unrelated', solve([{'x': 3}, [['a', None, 4]]]), {'x': 3, 'a': 4})
check('source provided', solve([{'a': 3}, [['b', 'a', 3]]]), {'a': 3, 'b': 6})
check('no defaults', solve([{'a': 3}, []]), {'a': 3})
elif N == 4:
check('forward dependency', solve([{}, [['b', 'a', 2], ['a', None, 4]]]), {'a': 4, 'b': 6})
check('explicit null', solve([{'a': None}, [['a', None, 4], ['b', 'a', 1]]]), {'a': None, 'b': None})
check('explicit zero', solve([{'a': 0}, [['a', None, 4], ['b', 'a', 2]]]), {'a': 0, 'b': 2})
check('dependency cycle', solve([{}, [['a', 'b', 1], ['b', 'a', 1]]]), 'DEFAULT_CYCLE')
check('provided unrelated', solve([{'x': 4}, [['a', None, 5]]]), {'x': 4, 'a': 5})
check('source provided', solve([{'a': 4}, [['b', 'a', 3]]]), {'a': 4, 'b': 7})
check('no defaults', solve([{'a': 4}, []]), {'a': 4})
elif N == 5:
check('forward dependency', solve([{}, [['b', 'a', 2], ['a', None, 5]]]), {'a': 5, 'b': 7})
check('explicit null', solve([{'a': None}, [['a', None, 5], ['b', 'a', 1]]]), {'a': None, 'b': None})
check('explicit zero', solve([{'a': 0}, [['a', None, 5], ['b', 'a', 2]]]), {'a': 0, 'b': 2})
check('dependency cycle', solve([{}, [['a', 'b', 1], ['b', 'a', 1]]]), 'DEFAULT_CYCLE')
check('provided unrelated', solve([{'x': 5}, [['a', None, 6]]]), {'x': 5, 'a': 6})
check('source provided', solve([{'a': 5}, [['b', 'a', 3]]]), {'a': 5, 'b': 8})
check('no defaults', solve([{'a': 5}, []]), {'a': 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 |
|---|---|---|---|
| forward dependency | {'a': 1} | {'a': 1, 'b': 3} | Failed |
| explicit null | {'a': None, 'b': None} | {'a': None, 'b': None} | Passed |
| explicit zero | {'a': 0, 'b': 2} | {'a': 0, 'b': 2} | Passed |
| dependency cycle | DEFAULT_CYCLE | DEFAULT_CYCLE | Passed |
| provided unrelated | {'a': 2, 'x': 1} | {'a': 2, 'x': 1} | Passed |
| source provided | {'a': 1, 'b': 4} | {'a': 1, 'b': 4} | Passed |
| no defaults | {'a': 1} | {'a': 1} | Passed |
SHA-256 / 1583b04f7f29f541fff1b4e325965480b0ea1f6b4fb1a67032d3703017445732
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
try:
row,rules=d
result=dict(row)
pending=[rule for rule in rules if rule[0] not in result]
while pending:
progressed=False; later=[]
for target,source,constant in pending:
if source is not None and source not in result:
return 'DEFAULT_CYCLE'
result[target]=constant if source is None else (None if result[source] is None else result[source]+constant)
progressed=True
if not progressed: return 'DEFAULT_CYCLE'
pending=later
return result
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('forward dependency', solve([{}, [['b', 'a', 2], ['a', None, 1]]]), {'a': 1, 'b': 3})
check('explicit null', solve([{'a': None}, [['a', None, 1], ['b', 'a', 1]]]), {'a': None, 'b': None})
check('explicit zero', solve([{'a': 0}, [['a', None, 1], ['b', 'a', 2]]]), {'a': 0, 'b': 2})
check('dependency cycle', solve([{}, [['a', 'b', 1], ['b', 'a', 1]]]), 'DEFAULT_CYCLE')
check('provided unrelated', solve([{'x': 1}, [['a', None, 2]]]), {'x': 1, 'a': 2})
check('source provided', solve([{'a': 1}, [['b', 'a', 3]]]), {'a': 1, 'b': 4})
check('no defaults', solve([{'a': 1}, []]), {'a': 1})
elif N == 2:
check('forward dependency', solve([{}, [['b', 'a', 2], ['a', None, 2]]]), {'a': 2, 'b': 4})
check('explicit null', solve([{'a': None}, [['a', None, 2], ['b', 'a', 1]]]), {'a': None, 'b': None})
check('explicit zero', solve([{'a': 0}, [['a', None, 2], ['b', 'a', 2]]]), {'a': 0, 'b': 2})
check('dependency cycle', solve([{}, [['a', 'b', 1], ['b', 'a', 1]]]), 'DEFAULT_CYCLE')
check('provided unrelated', solve([{'x': 2}, [['a', None, 3]]]), {'x': 2, 'a': 3})
check('source provided', solve([{'a': 2}, [['b', 'a', 3]]]), {'a': 2, 'b': 5})
check('no defaults', solve([{'a': 2}, []]), {'a': 2})
elif N == 3:
check('forward dependency', solve([{}, [['b', 'a', 2], ['a', None, 3]]]), {'a': 3, 'b': 5})
check('explicit null', solve([{'a': None}, [['a', None, 3], ['b', 'a', 1]]]), {'a': None, 'b': None})
check('explicit zero', solve([{'a': 0}, [['a', None, 3], ['b', 'a', 2]]]), {'a': 0, 'b': 2})
check('dependency cycle', solve([{}, [['a', 'b', 1], ['b', 'a', 1]]]), 'DEFAULT_CYCLE')
check('provided unrelated', solve([{'x': 3}, [['a', None, 4]]]), {'x': 3, 'a': 4})
check('source provided', solve([{'a': 3}, [['b', 'a', 3]]]), {'a': 3, 'b': 6})
check('no defaults', solve([{'a': 3}, []]), {'a': 3})
elif N == 4:
check('forward dependency', solve([{}, [['b', 'a', 2], ['a', None, 4]]]), {'a': 4, 'b': 6})
check('explicit null', solve([{'a': None}, [['a', None, 4], ['b', 'a', 1]]]), {'a': None, 'b': None})
check('explicit zero', solve([{'a': 0}, [['a', None, 4], ['b', 'a', 2]]]), {'a': 0, 'b': 2})
check('dependency cycle', solve([{}, [['a', 'b', 1], ['b', 'a', 1]]]), 'DEFAULT_CYCLE')
check('provided unrelated', solve([{'x': 4}, [['a', None, 5]]]), {'x': 4, 'a': 5})
check('source provided', solve([{'a': 4}, [['b', 'a', 3]]]), {'a': 4, 'b': 7})
check('no defaults', solve([{'a': 4}, []]), {'a': 4})
elif N == 5:
check('forward dependency', solve([{}, [['b', 'a', 2], ['a', None, 5]]]), {'a': 5, 'b': 7})
check('explicit null', solve([{'a': None}, [['a', None, 5], ['b', 'a', 1]]]), {'a': None, 'b': None})
check('explicit zero', solve([{'a': 0}, [['a', None, 5], ['b', 'a', 2]]]), {'a': 0, 'b': 2})
check('dependency cycle', solve([{}, [['a', 'b', 1], ['b', 'a', 1]]]), 'DEFAULT_CYCLE')
check('provided unrelated', solve([{'x': 5}, [['a', None, 6]]]), {'x': 5, 'a': 6})
check('source provided', solve([{'a': 5}, [['b', 'a', 3]]]), {'a': 5, 'b': 8})
check('no defaults', solve([{'a': 5}, []]), {'a': 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 |
|---|---|---|---|
| forward dependency | DEFAULT_CYCLE | {'a': 1, 'b': 3} | Failed |
| explicit null | {'a': None, 'b': None} | {'a': None, 'b': None} | Passed |
| explicit zero | {'a': 0, 'b': 2} | {'a': 0, 'b': 2} | Passed |
| dependency cycle | DEFAULT_CYCLE | DEFAULT_CYCLE | Passed |
| provided unrelated | {'a': 2, 'x': 1} | {'a': 2, 'x': 1} | Passed |
| source provided | {'a': 1, 'b': 4} | {'a': 1, 'b': 4} | Passed |
| no defaults | {'a': 1} | {'a': 1} | Passed |
SHA-256 / f1b6a83bb6a6181c6100879a956bdcae86a87d54e8432b03014b0e9fd21a447d
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
try:
row,rules=d
result=dict(row)
pending=[rule for rule in rules if rule[0] not in result]
while pending:
progressed=False; later=[]
for target,source,constant in pending:
if source is not None and source not in result:
later.append([target,source,constant]); continue
result[target]=constant if source is None else (None if result[source] is None else result[source]+constant)
progressed=True
if not progressed: return 'DEFAULT_CYCLE'
pending=later
return result
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('forward dependency', solve([{}, [['b', 'a', 2], ['a', None, 1]]]), {'a': 1, 'b': 3})
check('explicit null', solve([{'a': None}, [['a', None, 1], ['b', 'a', 1]]]), {'a': None, 'b': None})
check('explicit zero', solve([{'a': 0}, [['a', None, 1], ['b', 'a', 2]]]), {'a': 0, 'b': 2})
check('dependency cycle', solve([{}, [['a', 'b', 1], ['b', 'a', 1]]]), 'DEFAULT_CYCLE')
check('provided unrelated', solve([{'x': 1}, [['a', None, 2]]]), {'x': 1, 'a': 2})
check('source provided', solve([{'a': 1}, [['b', 'a', 3]]]), {'a': 1, 'b': 4})
check('no defaults', solve([{'a': 1}, []]), {'a': 1})
elif N == 2:
check('forward dependency', solve([{}, [['b', 'a', 2], ['a', None, 2]]]), {'a': 2, 'b': 4})
check('explicit null', solve([{'a': None}, [['a', None, 2], ['b', 'a', 1]]]), {'a': None, 'b': None})
check('explicit zero', solve([{'a': 0}, [['a', None, 2], ['b', 'a', 2]]]), {'a': 0, 'b': 2})
check('dependency cycle', solve([{}, [['a', 'b', 1], ['b', 'a', 1]]]), 'DEFAULT_CYCLE')
check('provided unrelated', solve([{'x': 2}, [['a', None, 3]]]), {'x': 2, 'a': 3})
check('source provided', solve([{'a': 2}, [['b', 'a', 3]]]), {'a': 2, 'b': 5})
check('no defaults', solve([{'a': 2}, []]), {'a': 2})
elif N == 3:
check('forward dependency', solve([{}, [['b', 'a', 2], ['a', None, 3]]]), {'a': 3, 'b': 5})
check('explicit null', solve([{'a': None}, [['a', None, 3], ['b', 'a', 1]]]), {'a': None, 'b': None})
check('explicit zero', solve([{'a': 0}, [['a', None, 3], ['b', 'a', 2]]]), {'a': 0, 'b': 2})
check('dependency cycle', solve([{}, [['a', 'b', 1], ['b', 'a', 1]]]), 'DEFAULT_CYCLE')
check('provided unrelated', solve([{'x': 3}, [['a', None, 4]]]), {'x': 3, 'a': 4})
check('source provided', solve([{'a': 3}, [['b', 'a', 3]]]), {'a': 3, 'b': 6})
check('no defaults', solve([{'a': 3}, []]), {'a': 3})
elif N == 4:
check('forward dependency', solve([{}, [['b', 'a', 2], ['a', None, 4]]]), {'a': 4, 'b': 6})
check('explicit null', solve([{'a': None}, [['a', None, 4], ['b', 'a', 1]]]), {'a': None, 'b': None})
check('explicit zero', solve([{'a': 0}, [['a', None, 4], ['b', 'a', 2]]]), {'a': 0, 'b': 2})
check('dependency cycle', solve([{}, [['a', 'b', 1], ['b', 'a', 1]]]), 'DEFAULT_CYCLE')
check('provided unrelated', solve([{'x': 4}, [['a', None, 5]]]), {'x': 4, 'a': 5})
check('source provided', solve([{'a': 4}, [['b', 'a', 3]]]), {'a': 4, 'b': 7})
check('no defaults', solve([{'a': 4}, []]), {'a': 4})
elif N == 5:
check('forward dependency', solve([{}, [['b', 'a', 2], ['a', None, 5]]]), {'a': 5, 'b': 7})
check('explicit null', solve([{'a': None}, [['a', None, 5], ['b', 'a', 1]]]), {'a': None, 'b': None})
check('explicit zero', solve([{'a': 0}, [['a', None, 5], ['b', 'a', 2]]]), {'a': 0, 'b': 2})
check('dependency cycle', solve([{}, [['a', 'b', 1], ['b', 'a', 1]]]), 'DEFAULT_CYCLE')
check('provided unrelated', solve([{'x': 5}, [['a', None, 6]]]), {'x': 5, 'a': 6})
check('source provided', solve([{'a': 5}, [['b', 'a', 3]]]), {'a': 5, 'b': 8})
check('no defaults', solve([{'a': 5}, []]), {'a': 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 |
|---|---|---|---|
| forward dependency | {'a': 1, 'b': 3} | {'a': 1, 'b': 3} | Passed |
| explicit null | {'a': None, 'b': None} | {'a': None, 'b': None} | Passed |
| explicit zero | {'a': 0, 'b': 2} | {'a': 0, 'b': 2} | Passed |
| dependency cycle | DEFAULT_CYCLE | DEFAULT_CYCLE | Passed |
| provided unrelated | {'a': 2, 'x': 1} | {'a': 2, 'x': 1} | Passed |
| source provided | {'a': 1, 'b': 4} | {'a': 1, 'b': 4} | Passed |
| no defaults | {'a': 1} | {'a': 1} | Passed |
SHA-256 / 138b8bca3f384e9751924b70f36f2a59c6e5b1fcb25fb0ec286710d4c91a291f
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:23.702967+00:00.
Case digest / feaec58298a94b31ecdf56b99ae9b397e65b9b3d8a4cd74413a7e5357352241d