{"abstract":"Rollback unnecessarily selects the oldest release.","category":"Deployment models","checks":10,"contract":"Choose the highest earlier revision that is successful, retained, compatible with current schema, and different from the active revision. Return None when no rollback target exists.","evaluation_group":"xt-rollback-choice","failed_approach":"The attempted repair substitutes return next(iter(sorted([r['number'] for r in candidates])), None) #. Fixture 6 still yields 1 instead of 2.","family":"xt-rollback-choice-nearest-revision","id":"FA-10176","implementations":{"attempt":{"sha256":"62e5d7ad26d18b0df837ee7bb28d58003c8aa803bc95c164c92695bdbd17ceba","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(revisions, active, schema):\n    candidates = [r for r in revisions if r['number'] < active]\n    candidates = [r for r in candidates if r['success']]\n    candidates = [r for r in candidates if r['retained']]\n    candidates = [r for r in candidates if schema in r['schemas']]\n    return next(iter(sorted([r['number'] for r in candidates])), None) #(r['number'] for r in candidates), default=None)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('fixture 1', solve([], 6, 1), None)\ncheck('fixture 2', solve([], 7, 1), None)\ncheck('fixture 3', solve([], 3, 1), None)\ncheck('fixture 4', solve([], 6, 2), None)\ncheck('fixture 5', solve([], 1, 1), None)\ncheck('fixture 6', solve([{'number': 1, 'success': True, 'retained': True, 'schemas': [1, 2]}, {'number': 2, 'success': True, 'retained': True, 'schemas': [1]}, {'number': 3, 'success': False, 'retained': True, 'schemas': [1]}, {'number': 4, 'success': True, 'retained': False, 'schemas': [1]}, {'number': 5, 'success': True, 'retained': True, 'schemas': [2]}, {'number': 6, 'success': True, 'retained': True, 'schemas': [1]}], 6, 1), 2)\ncheck('fixture 7', solve([{'number': 1, 'success': True, 'retained': True, 'schemas': [1, 2]}, {'number': 2, 'success': True, 'retained': True, 'schemas': [1]}, {'number': 3, 'success': False, 'retained': True, 'schemas': [1]}, {'number': 4, 'success': True, 'retained': False, 'schemas': [1]}, {'number': 5, 'success': True, 'retained': True, 'schemas': [2]}, {'number': 6, 'success': True, 'retained': True, 'schemas': [1]}], 7, 1), 6)\ncheck('fixture 8', solve([{'number': 1, 'success': True, 'retained': True, 'schemas': [1, 2]}, {'number': 2, 'success': True, 'retained': True, 'schemas': [1]}, {'number': 3, 'success': False, 'retained': True, 'schemas': [1]}, {'number': 4, 'success': True, 'retained': False, 'schemas': [1]}, {'number': 5, 'success': True, 'retained': True, 'schemas': [2]}, {'number': 6, 'success': True, 'retained': True, 'schemas': [1]}], 3, 1), 2)\ncheck('fixture 9', solve([{'number': 1, 'success': True, 'retained': True, 'schemas': [1, 2]}, {'number': 2, 'success': True, 'retained': True, 'schemas': [1]}, {'number': 3, 'success': False, 'retained': True, 'schemas': [1]}, {'number': 4, 'success': True, 'retained': False, 'schemas': [1]}, {'number': 5, 'success': True, 'retained': True, 'schemas': [2]}, {'number': 6, 'success': True, 'retained': True, 'schemas': [1]}], 6, 2), 5)\ncheck('fixture 10', solve([{'number': 1, 'success': True, 'retained': True, 'schemas': [1, 2]}, {'number': 2, 'success': True, 'retained': True, 'schemas': [1]}, {'number': 3, 'success': False, 'retained': True, 'schemas': [1]}, {'number': 4, 'success': True, 'retained': False, 'schemas': [1]}, {'number': 5, 'success': True, 'retained': True, 'schemas': [2]}, {'number': 6, 'success': True, 'retained': True, 'schemas': [1]}], 1, 1), None)\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":"a3089729da0a5e999ca737a6c0b8ffe09aa1271764616ee6a1219af760b044d3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(revisions, active, schema):\n    candidates = [r for r in revisions if r['number'] < active]\n    candidates = [r for r in candidates if r['success']]\n    candidates = [r for r in candidates if r['retained']]\n    candidates = [r for r in candidates if schema in r['schemas']]\n    return min((r['number'] for r in candidates), default=None)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('fixture 1', solve([], 6, 1), None)\ncheck('fixture 2', solve([], 7, 1), None)\ncheck('fixture 3', solve([], 3, 1), None)\ncheck('fixture 4', solve([], 6, 2), None)\ncheck('fixture 5', solve([], 1, 1), None)\ncheck('fixture 6', solve([{'number': 1, 'success': True, 'retained': True, 'schemas': [1, 2]}, {'number': 2, 'success': True, 'retained': True, 'schemas': [1]}, {'number': 3, 'success': False, 'retained': True, 'schemas': [1]}, {'number': 4, 'success': True, 'retained': False, 'schemas': [1]}, {'number': 5, 'success': True, 'retained': True, 'schemas': [2]}, {'number': 6, 'success': True, 'retained': True, 'schemas': [1]}], 6, 1), 2)\ncheck('fixture 7', solve([{'number': 1, 'success': True, 'retained': True, 'schemas': [1, 2]}, {'number': 2, 'success': True, 'retained': True, 'schemas': [1]}, {'number': 3, 'success': False, 'retained': True, 'schemas': [1]}, {'number': 4, 'success': True, 'retained': False, 'schemas': [1]}, {'number': 5, 'success': True, 'retained': True, 'schemas': [2]}, {'number': 6, 'success': True, 'retained': True, 'schemas': [1]}], 7, 1), 6)\ncheck('fixture 8', solve([{'number': 1, 'success': True, 'retained': True, 'schemas': [1, 2]}, {'number': 2, 'success': True, 'retained': True, 'schemas': [1]}, {'number': 3, 'success': False, 'retained': True, 'schemas': [1]}, {'number': 4, 'success': True, 'retained': False, 'schemas': [1]}, {'number': 5, 'success': True, 'retained': True, 'schemas': [2]}, {'number': 6, 'success': True, 'retained': True, 'schemas': [1]}], 3, 1), 2)\ncheck('fixture 9', solve([{'number': 1, 'success': True, 'retained': True, 'schemas': [1, 2]}, {'number': 2, 'success': True, 'retained': True, 'schemas': [1]}, {'number': 3, 'success': False, 'retained': True, 'schemas': [1]}, {'number': 4, 'success': True, 'retained': False, 'schemas': [1]}, {'number': 5, 'success': True, 'retained': True, 'schemas': [2]}, {'number': 6, 'success': True, 'retained': True, 'schemas': [1]}], 6, 2), 5)\ncheck('fixture 10', solve([{'number': 1, 'success': True, 'retained': True, 'schemas': [1, 2]}, {'number': 2, 'success': True, 'retained': True, 'schemas': [1]}, {'number': 3, 'success': False, 'retained': True, 'schemas': [1]}, {'number': 4, 'success': True, 'retained': False, 'schemas': [1]}, {'number': 5, 'success': True, 'retained': True, 'schemas': [2]}, {'number': 6, 'success': True, 'retained': True, 'schemas': [1]}], 1, 1), None)\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":"29d99f57b9376bb89a7ff176c84dbbeb2e7fa6d45dbed2fec8c13c36a65cd54a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(revisions, active, schema):\n    candidates = [r for r in revisions if r['number'] < active]\n    candidates = [r for r in candidates if r['success']]\n    candidates = [r for r in candidates if r['retained']]\n    candidates = [r for r in candidates if schema in r['schemas']]\n    return max((r['number'] for r in candidates), default=None)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('fixture 1', solve([], 6, 1), None)\ncheck('fixture 2', solve([], 7, 1), None)\ncheck('fixture 3', solve([], 3, 1), None)\ncheck('fixture 4', solve([], 6, 2), None)\ncheck('fixture 5', solve([], 1, 1), None)\ncheck('fixture 6', solve([{'number': 1, 'success': True, 'retained': True, 'schemas': [1, 2]}, {'number': 2, 'success': True, 'retained': True, 'schemas': [1]}, {'number': 3, 'success': False, 'retained': True, 'schemas': [1]}, {'number': 4, 'success': True, 'retained': False, 'schemas': [1]}, {'number': 5, 'success': True, 'retained': True, 'schemas': [2]}, {'number': 6, 'success': True, 'retained': True, 'schemas': [1]}], 6, 1), 2)\ncheck('fixture 7', solve([{'number': 1, 'success': True, 'retained': True, 'schemas': [1, 2]}, {'number': 2, 'success': True, 'retained': True, 'schemas': [1]}, {'number': 3, 'success': False, 'retained': True, 'schemas': [1]}, {'number': 4, 'success': True, 'retained': False, 'schemas': [1]}, {'number': 5, 'success': True, 'retained': True, 'schemas': [2]}, {'number': 6, 'success': True, 'retained': True, 'schemas': [1]}], 7, 1), 6)\ncheck('fixture 8', solve([{'number': 1, 'success': True, 'retained': True, 'schemas': [1, 2]}, {'number': 2, 'success': True, 'retained': True, 'schemas': [1]}, {'number': 3, 'success': False, 'retained': True, 'schemas': [1]}, {'number': 4, 'success': True, 'retained': False, 'schemas': [1]}, {'number': 5, 'success': True, 'retained': True, 'schemas': [2]}, {'number': 6, 'success': True, 'retained': True, 'schemas': [1]}], 3, 1), 2)\ncheck('fixture 9', solve([{'number': 1, 'success': True, 'retained': True, 'schemas': [1, 2]}, {'number': 2, 'success': True, 'retained': True, 'schemas': [1]}, {'number': 3, 'success': False, 'retained': True, 'schemas': [1]}, {'number': 4, 'success': True, 'retained': False, 'schemas': [1]}, {'number': 5, 'success': True, 'retained': True, 'schemas': [2]}, {'number': 6, 'success': True, 'retained': True, 'schemas': [1]}], 6, 2), 5)\ncheck('fixture 10', solve([{'number': 1, 'success': True, 'retained': True, 'schemas': [1, 2]}, {'number': 2, 'success': True, 'retained': True, 'schemas': [1]}, {'number': 3, 'success': False, 'retained': True, 'schemas': [1]}, {'number': 4, 'success': True, 'retained': False, 'schemas': [1]}, {'number': 5, 'success': True, 'retained': True, 'schemas': [2]}, {'number': 6, 'success': True, 'retained': True, 'schemas': [1]}], 1, 1), None)\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-rollback-choice-nearest-revision","generated_at":"2026-09-29T14:38:36.628745+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"An offline model of rollback revision selection, suitable for testing build and release tooling without external services.","repair":"Choose the newest eligible earlier revision.","root_cause":"The implementation substitutes return min( for return max(, so rollback unnecessarily selects the oldest release.","sha256":"6e6f499700d03e10b19bebed2e2becd854932862d791f610d0788d19ae1f642d","title":"Rollback revision selection: Rollback unnecessarily selects the oldest release · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.587,"exit_code":1,"observations":[{"actual":null,"check":"fixture 1","expected":null,"passed":true},{"actual":null,"check":"fixture 2","expected":null,"passed":true},{"actual":null,"check":"fixture 3","expected":null,"passed":true},{"actual":null,"check":"fixture 4","expected":null,"passed":true},{"actual":null,"check":"fixture 5","expected":null,"passed":true},{"actual":1,"check":"fixture 6","expected":2,"passed":false},{"actual":1,"check":"fixture 7","expected":6,"passed":false},{"actual":1,"check":"fixture 8","expected":2,"passed":false},{"actual":1,"check":"fixture 9","expected":5,"passed":false},{"actual":null,"check":"fixture 10","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fixture 1\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"fixture 2\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"fixture 3\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"fixture 4\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"fixture 5\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"fixture 6\", \"actual\": 1, \"expected\": 2, \"passed\": false}, {\"check\": \"fixture 7\", \"actual\": 1, \"expected\": 6, \"passed\": false}, {\"check\": \"fixture 8\", \"actual\": 1, \"expected\": 2, \"passed\": false}, {\"check\": \"fixture 9\", \"actual\": 1, \"expected\": 5, \"passed\": false}, {\"check\": \"fixture 10\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.392,"exit_code":1,"observations":[{"actual":null,"check":"fixture 1","expected":null,"passed":true},{"actual":null,"check":"fixture 2","expected":null,"passed":true},{"actual":null,"check":"fixture 3","expected":null,"passed":true},{"actual":null,"check":"fixture 4","expected":null,"passed":true},{"actual":null,"check":"fixture 5","expected":null,"passed":true},{"actual":1,"check":"fixture 6","expected":2,"passed":false},{"actual":1,"check":"fixture 7","expected":6,"passed":false},{"actual":1,"check":"fixture 8","expected":2,"passed":false},{"actual":1,"check":"fixture 9","expected":5,"passed":false},{"actual":null,"check":"fixture 10","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fixture 1\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"fixture 2\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"fixture 3\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"fixture 4\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"fixture 5\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"fixture 6\", \"actual\": 1, \"expected\": 2, \"passed\": false}, {\"check\": \"fixture 7\", \"actual\": 1, \"expected\": 6, \"passed\": false}, {\"check\": \"fixture 8\", \"actual\": 1, \"expected\": 2, \"passed\": false}, {\"check\": \"fixture 9\", \"actual\": 1, \"expected\": 5, \"passed\": false}, {\"check\": \"fixture 10\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":48.22,"exit_code":0,"observations":[{"actual":null,"check":"fixture 1","expected":null,"passed":true},{"actual":null,"check":"fixture 2","expected":null,"passed":true},{"actual":null,"check":"fixture 3","expected":null,"passed":true},{"actual":null,"check":"fixture 4","expected":null,"passed":true},{"actual":null,"check":"fixture 5","expected":null,"passed":true},{"actual":2,"check":"fixture 6","expected":2,"passed":true},{"actual":6,"check":"fixture 7","expected":6,"passed":true},{"actual":2,"check":"fixture 8","expected":2,"passed":true},{"actual":5,"check":"fixture 9","expected":5,"passed":true},{"actual":null,"check":"fixture 10","expected":null,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fixture 1\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"fixture 2\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"fixture 3\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"fixture 4\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"fixture 5\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"fixture 6\", \"actual\": 2, \"expected\": 2, \"passed\": true}, {\"check\": \"fixture 7\", \"actual\": 6, \"expected\": 6, \"passed\": true}, {\"check\": \"fixture 8\", \"actual\": 2, \"expected\": 2, \"passed\": true}, {\"check\": \"fixture 9\", \"actual\": 5, \"expected\": 5, \"passed\": true}, {\"check\": \"fixture 10\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}