{"abstract":"Deprecated configuration fields survive migration.","category":"Configuration","checks":6,"contract":"Rename timeout_ms to timeout only when new key is absent, remove deprecated timeout_ms, add schema version, preserve unknown settings, and scale legacy milliseconds to seconds.","evaluation_group":"xt-schema-migration","failed_approach":"The attempted repair substitutes result['timeout_ms'] = None. Fixture 1 still yields {'timeout_ms': None, 'schema': 2} instead of {'schema': 2}.","family":"xt-schema-migration-legacy-cleanup","id":"FA-9821","implementations":{"attempt":{"sha256":"831b4493c6766750ae1ef52e535b1ef92cc6429efbbd9c5fce0a8b2c5a36dc78","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(config):\n    result = dict(config)\n    if 'timeout' not in result and 'timeout_ms' in result:\n        result['timeout'] = result['timeout_ms'] / 1000\n    result['timeout_ms'] = None\n    result['schema'] = 2\n    return result\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('fixture 1', solve({}), {'schema': 2})\ncheck('fixture 2', solve({'timeout_ms': 1500}), {'timeout': 1.5, 'schema': 2})\ncheck('fixture 3', solve({'timeout_ms': 0}), {'timeout': 0.0, 'schema': 2})\ncheck('fixture 4', solve({'timeout_ms': 1500, 'timeout': 9}), {'timeout': 9, 'schema': 2})\ncheck('fixture 5', solve({'other': 3}), {'other': 3, 'schema': 2})\ncheck('fixture 6', solve({'schema': 1, 'timeout': 2}), {'schema': 2, 'timeout': 2})\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":"b043433edec569259557f818509f0dd878a760170efed3f09c154587cb6030b4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(config):\n    result = dict(config)\n    if 'timeout' not in result and 'timeout_ms' in result:\n        result['timeout'] = result['timeout_ms'] / 1000\n    pass\n    result['schema'] = 2\n    return result\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('fixture 1', solve({}), {'schema': 2})\ncheck('fixture 2', solve({'timeout_ms': 1500}), {'timeout': 1.5, 'schema': 2})\ncheck('fixture 3', solve({'timeout_ms': 0}), {'timeout': 0.0, 'schema': 2})\ncheck('fixture 4', solve({'timeout_ms': 1500, 'timeout': 9}), {'timeout': 9, 'schema': 2})\ncheck('fixture 5', solve({'other': 3}), {'other': 3, 'schema': 2})\ncheck('fixture 6', solve({'schema': 1, 'timeout': 2}), {'schema': 2, 'timeout': 2})\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"},"fixed":{"sha256":"b93781a57f210205aec15a5a5b156f6439925765d0b02c1bbd2455707a45094a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(config):\n    result = dict(config)\n    if 'timeout' not in result and 'timeout_ms' in result:\n        result['timeout'] = result['timeout_ms'] / 1000\n    result.pop('timeout_ms', None)\n    result['schema'] = 2\n    return result\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('fixture 1', solve({}), {'schema': 2})\ncheck('fixture 2', solve({'timeout_ms': 1500}), {'timeout': 1.5, 'schema': 2})\ncheck('fixture 3', solve({'timeout_ms': 0}), {'timeout': 0.0, 'schema': 2})\ncheck('fixture 4', solve({'timeout_ms': 1500, 'timeout': 9}), {'timeout': 9, 'schema': 2})\ncheck('fixture 5', solve({'other': 3}), {'other': 3, 'schema': 2})\ncheck('fixture 6', solve({'schema': 1, 'timeout': 2}), {'schema': 2, 'timeout': 2})\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":" 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":"xt-schema-migration-legacy-cleanup","generated_at":"2026-09-29T14:38:33.398734+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"An offline model of configuration schema upgrade, suitable for testing build and release tooling without external services.","repair":"Remove the deprecated key after migration.","root_cause":"The implementation substitutes pass for result.pop('timeout_ms', None), so deprecated configuration fields survive migration.","sha256":"2f6f5e334ecfdca61c55bb4aa13ecafc8f3a86275780d16d24e4fab80f259a04","title":"Configuration schema upgrade: Deprecated configuration fields survive migration · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.621,"exit_code":1,"observations":[{"actual":{"schema":2,"timeout_ms":null},"check":"fixture 1","expected":{"schema":2},"passed":false},{"actual":{"schema":2,"timeout":1.5,"timeout_ms":null},"check":"fixture 2","expected":{"schema":2,"timeout":1.5},"passed":false},{"actual":{"schema":2,"timeout":0.0,"timeout_ms":null},"check":"fixture 3","expected":{"schema":2,"timeout":0.0},"passed":false},{"actual":{"schema":2,"timeout":9,"timeout_ms":null},"check":"fixture 4","expected":{"schema":2,"timeout":9},"passed":false},{"actual":{"other":3,"schema":2,"timeout_ms":null},"check":"fixture 5","expected":{"other":3,"schema":2},"passed":false},{"actual":{"schema":2,"timeout":2,"timeout_ms":null},"check":"fixture 6","expected":{"schema":2,"timeout":2},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fixture 1\", \"actual\": {\"timeout_ms\": null, \"schema\": 2}, \"expected\": {\"schema\": 2}, \"passed\": false}, {\"check\": \"fixture 2\", \"actual\": {\"timeout_ms\": null, \"timeout\": 1.5, \"schema\": 2}, \"expected\": {\"timeout\": 1.5, \"schema\": 2}, \"passed\": false}, {\"check\": \"fixture 3\", \"actual\": {\"timeout_ms\": null, \"timeout\": 0.0, \"schema\": 2}, \"expected\": {\"timeout\": 0.0, \"schema\": 2}, \"passed\": false}, {\"check\": \"fixture 4\", \"actual\": {\"timeout_ms\": null, \"timeout\": 9, \"schema\": 2}, \"expected\": {\"timeout\": 9, \"schema\": 2}, \"passed\": false}, {\"check\": \"fixture 5\", \"actual\": {\"other\": 3, \"timeout_ms\": null, \"schema\": 2}, \"expected\": {\"other\": 3, \"schema\": 2}, \"passed\": false}, {\"check\": \"fixture 6\", \"actual\": {\"schema\": 2, \"timeout\": 2, \"timeout_ms\": null}, \"expected\": {\"schema\": 2, \"timeout\": 2}, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.749,"exit_code":1,"observations":[{"actual":{"schema":2},"check":"fixture 1","expected":{"schema":2},"passed":true},{"actual":{"schema":2,"timeout":1.5,"timeout_ms":1500},"check":"fixture 2","expected":{"schema":2,"timeout":1.5},"passed":false},{"actual":{"schema":2,"timeout":0.0,"timeout_ms":0},"check":"fixture 3","expected":{"schema":2,"timeout":0.0},"passed":false},{"actual":{"schema":2,"timeout":9,"timeout_ms":1500},"check":"fixture 4","expected":{"schema":2,"timeout":9},"passed":false},{"actual":{"other":3,"schema":2},"check":"fixture 5","expected":{"other":3,"schema":2},"passed":true},{"actual":{"schema":2,"timeout":2},"check":"fixture 6","expected":{"schema":2,"timeout":2},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fixture 1\", \"actual\": {\"schema\": 2}, \"expected\": {\"schema\": 2}, \"passed\": true}, {\"check\": \"fixture 2\", \"actual\": {\"timeout_ms\": 1500, \"timeout\": 1.5, \"schema\": 2}, \"expected\": {\"timeout\": 1.5, \"schema\": 2}, \"passed\": false}, {\"check\": \"fixture 3\", \"actual\": {\"timeout_ms\": 0, \"timeout\": 0.0, \"schema\": 2}, \"expected\": {\"timeout\": 0.0, \"schema\": 2}, \"passed\": false}, {\"check\": \"fixture 4\", \"actual\": {\"timeout_ms\": 1500, \"timeout\": 9, \"schema\": 2}, \"expected\": {\"timeout\": 9, \"schema\": 2}, \"passed\": false}, {\"check\": \"fixture 5\", \"actual\": {\"other\": 3, \"schema\": 2}, \"expected\": {\"other\": 3, \"schema\": 2}, \"passed\": true}, {\"check\": \"fixture 6\", \"actual\": {\"schema\": 2, \"timeout\": 2}, \"expected\": {\"schema\": 2, \"timeout\": 2}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":37.672,"exit_code":0,"observations":[{"actual":{"schema":2},"check":"fixture 1","expected":{"schema":2},"passed":true},{"actual":{"schema":2,"timeout":1.5},"check":"fixture 2","expected":{"schema":2,"timeout":1.5},"passed":true},{"actual":{"schema":2,"timeout":0.0},"check":"fixture 3","expected":{"schema":2,"timeout":0.0},"passed":true},{"actual":{"schema":2,"timeout":9},"check":"fixture 4","expected":{"schema":2,"timeout":9},"passed":true},{"actual":{"other":3,"schema":2},"check":"fixture 5","expected":{"other":3,"schema":2},"passed":true},{"actual":{"schema":2,"timeout":2},"check":"fixture 6","expected":{"schema":2,"timeout":2},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fixture 1\", \"actual\": {\"schema\": 2}, \"expected\": {\"schema\": 2}, \"passed\": true}, {\"check\": \"fixture 2\", \"actual\": {\"timeout\": 1.5, \"schema\": 2}, \"expected\": {\"timeout\": 1.5, \"schema\": 2}, \"passed\": true}, {\"check\": \"fixture 3\", \"actual\": {\"timeout\": 0.0, \"schema\": 2}, \"expected\": {\"timeout\": 0.0, \"schema\": 2}, \"passed\": true}, {\"check\": \"fixture 4\", \"actual\": {\"timeout\": 9, \"schema\": 2}, \"expected\": {\"timeout\": 9, \"schema\": 2}, \"passed\": true}, {\"check\": \"fixture 5\", \"actual\": {\"other\": 3, \"schema\": 2}, \"expected\": {\"other\": 3, \"schema\": 2}, \"passed\": true}, {\"check\": \"fixture 6\", \"actual\": {\"schema\": 2, \"timeout\": 2}, \"expected\": {\"schema\": 2, \"timeout\": 2}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}