{"abstract":"Migrated configuration retains an obsolete schema version.","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['schema'] = 1. Fixture 1 still yields {'schema': 1} instead of {'schema': 2}.","family":"xt-schema-migration-schema-version","id":"FA-9826","implementations":{"attempt":{"sha256":"8ecd7e9ec3959765cfa69db190e5443d634640646f2a7f585fff370d5940b12a","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'] = 1\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":"71a30252dc5ac49a5ae54527737a2c8637a2c6ba5da7669befd42afb8a15d820","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.setdefault('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-schema-version","generated_at":"2026-09-29T14:38:33.500618+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":"Set the target schema version unconditionally.","root_cause":"The implementation substitutes result.setdefault('schema', 2) for result['schema'] = 2, so migrated configuration retains an obsolete schema version.","sha256":"c62117338f2af05a814a8d464b536f8034d8995dee743514de702c195883b552","title":"Configuration schema upgrade: Migrated configuration retains an obsolete schema version · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":37.653,"exit_code":1,"observations":[{"actual":{"schema":1},"check":"fixture 1","expected":{"schema":2},"passed":false},{"actual":{"schema":1,"timeout":1.5},"check":"fixture 2","expected":{"schema":2,"timeout":1.5},"passed":false},{"actual":{"schema":1,"timeout":0.0},"check":"fixture 3","expected":{"schema":2,"timeout":0.0},"passed":false},{"actual":{"schema":1,"timeout":9},"check":"fixture 4","expected":{"schema":2,"timeout":9},"passed":false},{"actual":{"other":3,"schema":1},"check":"fixture 5","expected":{"other":3,"schema":2},"passed":false},{"actual":{"schema":1,"timeout":2},"check":"fixture 6","expected":{"schema":2,"timeout":2},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fixture 1\", \"actual\": {\"schema\": 1}, \"expected\": {\"schema\": 2}, \"passed\": false}, {\"check\": \"fixture 2\", \"actual\": {\"timeout\": 1.5, \"schema\": 1}, \"expected\": {\"timeout\": 1.5, \"schema\": 2}, \"passed\": false}, {\"check\": \"fixture 3\", \"actual\": {\"timeout\": 0.0, \"schema\": 1}, \"expected\": {\"timeout\": 0.0, \"schema\": 2}, \"passed\": false}, {\"check\": \"fixture 4\", \"actual\": {\"timeout\": 9, \"schema\": 1}, \"expected\": {\"timeout\": 9, \"schema\": 2}, \"passed\": false}, {\"check\": \"fixture 5\", \"actual\": {\"other\": 3, \"schema\": 1}, \"expected\": {\"other\": 3, \"schema\": 2}, \"passed\": false}, {\"check\": \"fixture 6\", \"actual\": {\"schema\": 1, \"timeout\": 2}, \"expected\": {\"schema\": 2, \"timeout\": 2}, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.485,"exit_code":1,"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":1,"timeout":2},"check":"fixture 6","expected":{"schema":2,"timeout":2},"passed":false}],"passed":false,"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\": 1, \"timeout\": 2}, \"expected\": {\"schema\": 2, \"timeout\": 2}, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":37.835,"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"}