{"abstract":"Upgrading discards extension settings.","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.","contract_signature":"config","evaluation_group":"xt-schema-migration","failed_approach":"The attempted repair substitutes result = {k:v for k,v in config.items() if k != 'other'}. Fixture 5 still yields {'schema': 2} instead of {'other': 3, 'schema': 2}.","family":"xt-schema-migration-unknown-preserve","id":"FA-9806","implementations":{"attempt":{"sha256":"466f31285779adb4ac1cf07645111ea104038ac9ce3e1424df1962aab2905de6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(config):\n    result = {k:v for k,v in config.items() if k != 'other'}\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"},"broken":{"sha256":"6ea164856c534b43b018842379ce85596b44507978613b13eb2aa5a79e3e58ef","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(config):\n    result = {k:v for k,v in config.items() if k in ['timeout', 'timeout_ms', 'schema']}\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-unknown-preserve","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.","root_cause":"The implementation substitutes result = {k:v for k,v in config.items() if k in ['timeout', 'timeout_ms', 'schema']} for result = dict(config), so upgrading discards extension settings.","sha256":"e33ac14f4ac7e40b5f622c4fdf0b9796a7a8b8e02db414a2461208ba52f8c69c","title":"Configuration schema upgrade: Upgrading discards extension settings · 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":38.892,"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":{"schema":2},"check":"fixture 5","expected":{"other":3,"schema":2},"passed":false},{"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\": 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\": {\"schema\": 2}, \"expected\": {\"other\": 3, \"schema\": 2}, \"passed\": false}, {\"check\": \"fixture 6\", \"actual\": {\"schema\": 2, \"timeout\": 2}, \"expected\": {\"schema\": 2, \"timeout\": 2}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.233,"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":{"schema":2},"check":"fixture 5","expected":{"other":3,"schema":2},"passed":false},{"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\": 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\": {\"schema\": 2}, \"expected\": {\"other\": 3, \"schema\": 2}, \"passed\": false}, {\"check\": \"fixture 6\", \"actual\": {\"schema\": 2, \"timeout\": 2}, \"expected\": {\"schema\": 2, \"timeout\": 2}, \"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."}}