{"abstract":"Schema union ignores non-null defaults for missing columns.","category":"Data systems","checks":7,"contract":"Union batches using stable numeric field identities. The output schema is an ordered list [id,current_name,default]; batch schemas map old names to IDs. Project each batch row into output order, use defaults only for absent columns, and preserve explicit nulls and all rows.","contract_signature":"d","evaluation_group":"s3-data-systems-union-by-field-id","failed_approach":"Zero is not the declared field default.","family":"s3-data-systems-union-by-field-id-absent-null","id":"FA-44751","implementations":{"attempt":{"sha256":"7dd24a676f7aaa579e91cc8fe4e204e23412ad71fb5b747e9dd943cda395b680","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(d):\n    try:\n        output,batches=d\n        result=[]\n        for schema,rows in batches:\n            columns={field:index for index,(field,name) in enumerate(schema)}\n            for row in rows:\n                record=[]\n                for field,name,default in output:\n                    value=row[columns[field]] if field in columns else 0\n                    record.append(value)\n                result.append(record)\n        return result\n    except (IndexError, KeyError, ValueError, StopIteration) as exc:\n        return {\"representation_error\": type(exc).__name__}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('renamed field', solve([[[2, 'new', 99], [1, 'a', 88]], [[[[1, 'a'], [2, 'old']], [[1, 2]]]]]), [[2, 1]])\n    check('reordered batch', solve([[[1, 'a', 0], [2, 'b', 0]], [[[[1, 'a'], [2, 'b']], [[1, 2]]], [[[2, 'b'], [1, 'a']], [[3, 4]]]]]), [[1, 2], [4, 3]])\n    check('absent default', solve([[[1, 'a', 7], [2, 'b', 1]], [[[[1, 'a']], [[2]]]]]), [[2, 1]])\n    check('explicit null', solve([[[1, 'a', 1]], [[[[1, 'a']], [[None]]]]]), [[None]])\n    check('duplicate rows', solve([[[1, 'a', 0]], [[[[1, 'a']], [[1], [1]]]]]), [[1], [1]])\n    check('no batches', solve([[[1, 'a', 0]], []]), [])\n    check('zero preserved', solve([[[1, 'a', 1]], [[[[1, 'a']], [[0]]]]]), [[0]])\nelif N == 2:\n    check('renamed field', solve([[[2, 'new', 99], [1, 'a', 88]], [[[[1, 'a'], [2, 'old']], [[2, 3]]]]]), [[3, 2]])\n    check('reordered batch', solve([[[1, 'a', 0], [2, 'b', 0]], [[[[1, 'a'], [2, 'b']], [[2, 3]]], [[[2, 'b'], [1, 'a']], [[4, 5]]]]]), [[2, 3], [5, 4]])\n    check('absent default', solve([[[1, 'a', 7], [2, 'b', 2]], [[[[1, 'a']], [[3]]]]]), [[3, 2]])\n    check('explicit null', solve([[[1, 'a', 2]], [[[[1, 'a']], [[None]]]]]), [[None]])\n    check('duplicate rows', solve([[[1, 'a', 0]], [[[[1, 'a']], [[2], [2]]]]]), [[2], [2]])\n    check('no batches', solve([[[1, 'a', 0]], []]), [])\n    check('zero preserved', solve([[[1, 'a', 2]], [[[[1, 'a']], [[0]]]]]), [[0]])\nelif N == 3:\n    check('renamed field', solve([[[2, 'new', 99], [1, 'a', 88]], [[[[1, 'a'], [2, 'old']], [[3, 4]]]]]), [[4, 3]])\n    check('reordered batch', solve([[[1, 'a', 0], [2, 'b', 0]], [[[[1, 'a'], [2, 'b']], [[3, 4]]], [[[2, 'b'], [1, 'a']], [[5, 6]]]]]), [[3, 4], [6, 5]])\n    check('absent default', solve([[[1, 'a', 7], [2, 'b', 3]], [[[[1, 'a']], [[4]]]]]), [[4, 3]])\n    check('explicit null', solve([[[1, 'a', 3]], [[[[1, 'a']], [[None]]]]]), [[None]])\n    check('duplicate rows', solve([[[1, 'a', 0]], [[[[1, 'a']], [[3], [3]]]]]), [[3], [3]])\n    check('no batches', solve([[[1, 'a', 0]], []]), [])\n    check('zero preserved', solve([[[1, 'a', 3]], [[[[1, 'a']], [[0]]]]]), [[0]])\nelif N == 4:\n    check('renamed field', solve([[[2, 'new', 99], [1, 'a', 88]], [[[[1, 'a'], [2, 'old']], [[4, 5]]]]]), [[5, 4]])\n    check('reordered batch', solve([[[1, 'a', 0], [2, 'b', 0]], [[[[1, 'a'], [2, 'b']], [[4, 5]]], [[[2, 'b'], [1, 'a']], [[6, 7]]]]]), [[4, 5], [7, 6]])\n    check('absent default', solve([[[1, 'a', 7], [2, 'b', 4]], [[[[1, 'a']], [[5]]]]]), [[5, 4]])\n    check('explicit null', solve([[[1, 'a', 4]], [[[[1, 'a']], [[None]]]]]), [[None]])\n    check('duplicate rows', solve([[[1, 'a', 0]], [[[[1, 'a']], [[4], [4]]]]]), [[4], [4]])\n    check('no batches', solve([[[1, 'a', 0]], []]), [])\n    check('zero preserved', solve([[[1, 'a', 4]], [[[[1, 'a']], [[0]]]]]), [[0]])\nelif N == 5:\n    check('renamed field', solve([[[2, 'new', 99], [1, 'a', 88]], [[[[1, 'a'], [2, 'old']], [[5, 6]]]]]), [[6, 5]])\n    check('reordered batch', solve([[[1, 'a', 0], [2, 'b', 0]], [[[[1, 'a'], [2, 'b']], [[5, 6]]], [[[2, 'b'], [1, 'a']], [[7, 8]]]]]), [[5, 6], [8, 7]])\n    check('absent default', solve([[[1, 'a', 7], [2, 'b', 5]], [[[[1, 'a']], [[6]]]]]), [[6, 5]])\n    check('explicit null', solve([[[1, 'a', 5]], [[[[1, 'a']], [[None]]]]]), [[None]])\n    check('duplicate rows', solve([[[1, 'a', 0]], [[[[1, 'a']], [[5], [5]]]]]), [[5], [5]])\n    check('no batches', solve([[[1, 'a', 0]], []]), [])\n    check('zero preserved', solve([[[1, 'a', 5]], [[[[1, 'a']], [[0]]]]]), [[0]])\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"46d05aa55b39d61dc82bc9cc8510d00b2ae4aa0e556d5a62a1c8a79ca8837c3c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(d):\n    try:\n        output,batches=d\n        result=[]\n        for schema,rows in batches:\n            columns={field:index for index,(field,name) in enumerate(schema)}\n            for row in rows:\n                record=[]\n                for field,name,default in output:\n                    value=row[columns[field]] if field in columns else None\n                    record.append(value)\n                result.append(record)\n        return result\n    except (IndexError, KeyError, ValueError, StopIteration) as exc:\n        return {\"representation_error\": type(exc).__name__}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('renamed field', solve([[[2, 'new', 99], [1, 'a', 88]], [[[[1, 'a'], [2, 'old']], [[1, 2]]]]]), [[2, 1]])\n    check('reordered batch', solve([[[1, 'a', 0], [2, 'b', 0]], [[[[1, 'a'], [2, 'b']], [[1, 2]]], [[[2, 'b'], [1, 'a']], [[3, 4]]]]]), [[1, 2], [4, 3]])\n    check('absent default', solve([[[1, 'a', 7], [2, 'b', 1]], [[[[1, 'a']], [[2]]]]]), [[2, 1]])\n    check('explicit null', solve([[[1, 'a', 1]], [[[[1, 'a']], [[None]]]]]), [[None]])\n    check('duplicate rows', solve([[[1, 'a', 0]], [[[[1, 'a']], [[1], [1]]]]]), [[1], [1]])\n    check('no batches', solve([[[1, 'a', 0]], []]), [])\n    check('zero preserved', solve([[[1, 'a', 1]], [[[[1, 'a']], [[0]]]]]), [[0]])\nelif N == 2:\n    check('renamed field', solve([[[2, 'new', 99], [1, 'a', 88]], [[[[1, 'a'], [2, 'old']], [[2, 3]]]]]), [[3, 2]])\n    check('reordered batch', solve([[[1, 'a', 0], [2, 'b', 0]], [[[[1, 'a'], [2, 'b']], [[2, 3]]], [[[2, 'b'], [1, 'a']], [[4, 5]]]]]), [[2, 3], [5, 4]])\n    check('absent default', solve([[[1, 'a', 7], [2, 'b', 2]], [[[[1, 'a']], [[3]]]]]), [[3, 2]])\n    check('explicit null', solve([[[1, 'a', 2]], [[[[1, 'a']], [[None]]]]]), [[None]])\n    check('duplicate rows', solve([[[1, 'a', 0]], [[[[1, 'a']], [[2], [2]]]]]), [[2], [2]])\n    check('no batches', solve([[[1, 'a', 0]], []]), [])\n    check('zero preserved', solve([[[1, 'a', 2]], [[[[1, 'a']], [[0]]]]]), [[0]])\nelif N == 3:\n    check('renamed field', solve([[[2, 'new', 99], [1, 'a', 88]], [[[[1, 'a'], [2, 'old']], [[3, 4]]]]]), [[4, 3]])\n    check('reordered batch', solve([[[1, 'a', 0], [2, 'b', 0]], [[[[1, 'a'], [2, 'b']], [[3, 4]]], [[[2, 'b'], [1, 'a']], [[5, 6]]]]]), [[3, 4], [6, 5]])\n    check('absent default', solve([[[1, 'a', 7], [2, 'b', 3]], [[[[1, 'a']], [[4]]]]]), [[4, 3]])\n    check('explicit null', solve([[[1, 'a', 3]], [[[[1, 'a']], [[None]]]]]), [[None]])\n    check('duplicate rows', solve([[[1, 'a', 0]], [[[[1, 'a']], [[3], [3]]]]]), [[3], [3]])\n    check('no batches', solve([[[1, 'a', 0]], []]), [])\n    check('zero preserved', solve([[[1, 'a', 3]], [[[[1, 'a']], [[0]]]]]), [[0]])\nelif N == 4:\n    check('renamed field', solve([[[2, 'new', 99], [1, 'a', 88]], [[[[1, 'a'], [2, 'old']], [[4, 5]]]]]), [[5, 4]])\n    check('reordered batch', solve([[[1, 'a', 0], [2, 'b', 0]], [[[[1, 'a'], [2, 'b']], [[4, 5]]], [[[2, 'b'], [1, 'a']], [[6, 7]]]]]), [[4, 5], [7, 6]])\n    check('absent default', solve([[[1, 'a', 7], [2, 'b', 4]], [[[[1, 'a']], [[5]]]]]), [[5, 4]])\n    check('explicit null', solve([[[1, 'a', 4]], [[[[1, 'a']], [[None]]]]]), [[None]])\n    check('duplicate rows', solve([[[1, 'a', 0]], [[[[1, 'a']], [[4], [4]]]]]), [[4], [4]])\n    check('no batches', solve([[[1, 'a', 0]], []]), [])\n    check('zero preserved', solve([[[1, 'a', 4]], [[[[1, 'a']], [[0]]]]]), [[0]])\nelif N == 5:\n    check('renamed field', solve([[[2, 'new', 99], [1, 'a', 88]], [[[[1, 'a'], [2, 'old']], [[5, 6]]]]]), [[6, 5]])\n    check('reordered batch', solve([[[1, 'a', 0], [2, 'b', 0]], [[[[1, 'a'], [2, 'b']], [[5, 6]]], [[[2, 'b'], [1, 'a']], [[7, 8]]]]]), [[5, 6], [8, 7]])\n    check('absent default', solve([[[1, 'a', 7], [2, 'b', 5]], [[[[1, 'a']], [[6]]]]]), [[6, 5]])\n    check('explicit null', solve([[[1, 'a', 5]], [[[[1, 'a']], [[None]]]]]), [[None]])\n    check('duplicate rows', solve([[[1, 'a', 0]], [[[[1, 'a']], [[5], [5]]]]]), [[5], [5]])\n    check('no batches', solve([[[1, 'a', 0]], []]), [])\n    check('zero preserved', solve([[[1, 'a', 5]], [[[[1, 'a']], [[0]]]]]), [[0]])\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"s3-data-systems-union-by-field-id-absent-null","generated_at":"2026-09-29T14:44:15.263035+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"A bounded deterministic data engine model makes representation and changelog faults reproducible.","root_cause":"union-by-field-id: Schema union ignores non-null defaults for missing columns.","sha256":"bf9831ca40519e90a7f44aad5debfd3a2fd7f299a37e237bfcbde716b9c82d39","title":"Schema union ignores non-null defaults for missing columns · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":42.25,"exit_code":1,"observations":[{"actual":[[2,1]],"check":"renamed field","expected":[[2,1]],"passed":true},{"actual":[[1,2],[4,3]],"check":"reordered batch","expected":[[1,2],[4,3]],"passed":true},{"actual":[[2,0]],"check":"absent default","expected":[[2,1]],"passed":false},{"actual":[[null]],"check":"explicit null","expected":[[null]],"passed":true},{"actual":[[1],[1]],"check":"duplicate rows","expected":[[1],[1]],"passed":true},{"actual":[],"check":"no batches","expected":[],"passed":true},{"actual":[[0]],"check":"zero preserved","expected":[[0]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"renamed field\", \"actual\": [[2, 1]], \"expected\": [[2, 1]], \"passed\": true}, {\"check\": \"reordered batch\", \"actual\": [[1, 2], [4, 3]], \"expected\": [[1, 2], [4, 3]], \"passed\": true}, {\"check\": \"absent default\", \"actual\": [[2, 0]], \"expected\": [[2, 1]], \"passed\": false}, {\"check\": \"explicit null\", \"actual\": [[null]], \"expected\": [[null]], \"passed\": true}, {\"check\": \"duplicate rows\", \"actual\": [[1], [1]], \"expected\": [[1], [1]], \"passed\": true}, {\"check\": \"no batches\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"zero preserved\", \"actual\": [[0]], \"expected\": [[0]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.185,"exit_code":1,"observations":[{"actual":[[2,1]],"check":"renamed field","expected":[[2,1]],"passed":true},{"actual":[[1,2],[4,3]],"check":"reordered batch","expected":[[1,2],[4,3]],"passed":true},{"actual":[[2,null]],"check":"absent default","expected":[[2,1]],"passed":false},{"actual":[[null]],"check":"explicit null","expected":[[null]],"passed":true},{"actual":[[1],[1]],"check":"duplicate rows","expected":[[1],[1]],"passed":true},{"actual":[],"check":"no batches","expected":[],"passed":true},{"actual":[[0]],"check":"zero preserved","expected":[[0]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"renamed field\", \"actual\": [[2, 1]], \"expected\": [[2, 1]], \"passed\": true}, {\"check\": \"reordered batch\", \"actual\": [[1, 2], [4, 3]], \"expected\": [[1, 2], [4, 3]], \"passed\": true}, {\"check\": \"absent default\", \"actual\": [[2, null]], \"expected\": [[2, 1]], \"passed\": false}, {\"check\": \"explicit null\", \"actual\": [[null]], \"expected\": [[null]], \"passed\": true}, {\"check\": \"duplicate rows\", \"actual\": [[1], [1]], \"expected\": [[1], [1]], \"passed\": true}, {\"check\": \"no batches\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"zero preserved\", \"actual\": [[0]], \"expected\": [[0]], \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}