{"abstract":"Missing installed members pass validation.","category":"Packaging","checks":7,"contract":"Report missing files, unexpected files, digest mismatches, size mismatches, and forbidden executables independently. Metadata is a digest-size-executable tuple.","evaluation_group":"xt-package-record","failed_approach":"The attempted repair substitutes sorted(set(installed)-set(manifest)). Fixture 2 still yields {'missing': [], 'extra': [], 'digest': [], 'size': [], 'executable': []} instead of {'missing': ['a'], 'extra': [], 'digest': [], 'size': [], 'executable': []}.","family":"xt-package-record-missing-member","id":"FA-9881","implementations":{"attempt":{"sha256":"63ab729e016cc3722c5ff102bc915477a1d061cd3084f8d5791b50968fa9df2e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(manifest, installed, executable_allowed):\n    common = set(manifest) & set(installed)\n    return {'missing': sorted(set(installed)-set(manifest)), 'extra': sorted(set(installed)-set(manifest)), 'digest': sorted(k for k in common if manifest[k][0] != installed[k][0]), 'size': sorted(k for k in common if manifest[k][1] != installed[k][1]), 'executable': sorted(k for k in installed if installed[k][2] and k not in executable_allowed)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('fixture 1', solve({}, {}, []), {'missing': [], 'extra': [], 'digest': [], 'size': [], 'executable': []})\ncheck('fixture 2', solve({'a': ('x', 1, False)}, {}, []), {'missing': ['a'], 'extra': [], 'digest': [], 'size': [], 'executable': []})\ncheck('fixture 3', solve({}, {'a': ('x', 1, False)}, []), {'missing': [], 'extra': ['a'], 'digest': [], 'size': [], 'executable': []})\ncheck('fixture 4', solve({'a': ('x', 1, False)}, {'a': ('y', 1, False)}, []), {'missing': [], 'extra': [], 'digest': ['a'], 'size': [], 'executable': []})\ncheck('fixture 5', solve({'a': ('x', 1, False)}, {'a': ('x', 2, False)}, []), {'missing': [], 'extra': [], 'digest': [], 'size': ['a'], 'executable': []})\ncheck('fixture 6', solve({'a': ('x', 1, False)}, {'a': ('x', 1, True)}, []), {'missing': [], 'extra': [], 'digest': [], 'size': [], 'executable': ['a']})\ncheck('fixture 7', solve({'a': ('x', 1, False)}, {'a': ('x', 1, True)}, ['a']), {'missing': [], 'extra': [], 'digest': [], 'size': [], 'executable': []})\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":"16f5ea324a05468d8b67e4eb76ca898aaa9e0213d8c7a3e8877f466e20040d5a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(manifest, installed, executable_allowed):\n    common = set(manifest) & set(installed)\n    return {'missing': [], 'extra': sorted(set(installed)-set(manifest)), 'digest': sorted(k for k in common if manifest[k][0] != installed[k][0]), 'size': sorted(k for k in common if manifest[k][1] != installed[k][1]), 'executable': sorted(k for k in installed if installed[k][2] and k not in executable_allowed)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('fixture 1', solve({}, {}, []), {'missing': [], 'extra': [], 'digest': [], 'size': [], 'executable': []})\ncheck('fixture 2', solve({'a': ('x', 1, False)}, {}, []), {'missing': ['a'], 'extra': [], 'digest': [], 'size': [], 'executable': []})\ncheck('fixture 3', solve({}, {'a': ('x', 1, False)}, []), {'missing': [], 'extra': ['a'], 'digest': [], 'size': [], 'executable': []})\ncheck('fixture 4', solve({'a': ('x', 1, False)}, {'a': ('y', 1, False)}, []), {'missing': [], 'extra': [], 'digest': ['a'], 'size': [], 'executable': []})\ncheck('fixture 5', solve({'a': ('x', 1, False)}, {'a': ('x', 2, False)}, []), {'missing': [], 'extra': [], 'digest': [], 'size': ['a'], 'executable': []})\ncheck('fixture 6', solve({'a': ('x', 1, False)}, {'a': ('x', 1, True)}, []), {'missing': [], 'extra': [], 'digest': [], 'size': [], 'executable': ['a']})\ncheck('fixture 7', solve({'a': ('x', 1, False)}, {'a': ('x', 1, True)}, ['a']), {'missing': [], 'extra': [], 'digest': [], 'size': [], 'executable': []})\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":"3baecf1f95f0ed8ef045deb2cc03208cc7a70c75a6fe65ab3fb4643313465104","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(manifest, installed, executable_allowed):\n    common = set(manifest) & set(installed)\n    return {'missing': sorted(set(manifest)-set(installed)), 'extra': sorted(set(installed)-set(manifest)), 'digest': sorted(k for k in common if manifest[k][0] != installed[k][0]), 'size': sorted(k for k in common if manifest[k][1] != installed[k][1]), 'executable': sorted(k for k in installed if installed[k][2] and k not in executable_allowed)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('fixture 1', solve({}, {}, []), {'missing': [], 'extra': [], 'digest': [], 'size': [], 'executable': []})\ncheck('fixture 2', solve({'a': ('x', 1, False)}, {}, []), {'missing': ['a'], 'extra': [], 'digest': [], 'size': [], 'executable': []})\ncheck('fixture 3', solve({}, {'a': ('x', 1, False)}, []), {'missing': [], 'extra': ['a'], 'digest': [], 'size': [], 'executable': []})\ncheck('fixture 4', solve({'a': ('x', 1, False)}, {'a': ('y', 1, False)}, []), {'missing': [], 'extra': [], 'digest': ['a'], 'size': [], 'executable': []})\ncheck('fixture 5', solve({'a': ('x', 1, False)}, {'a': ('x', 2, False)}, []), {'missing': [], 'extra': [], 'digest': [], 'size': ['a'], 'executable': []})\ncheck('fixture 6', solve({'a': ('x', 1, False)}, {'a': ('x', 1, True)}, []), {'missing': [], 'extra': [], 'digest': [], 'size': [], 'executable': ['a']})\ncheck('fixture 7', solve({'a': ('x', 1, False)}, {'a': ('x', 1, True)}, ['a']), {'missing': [], 'extra': [], 'digest': [], 'size': [], 'executable': []})\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-package-record-missing-member","generated_at":"2026-09-29T14:38:33.968671+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"An offline model of installed distribution record validation, suitable for testing build and release tooling without external services.","repair":"Report expected files absent from installation.","root_cause":"The implementation substitutes [] for sorted(set(manifest)-set(installed)), so missing installed members pass validation.","sha256":"b346bae5d3019696b8dc9d018f22388c4e2129435016e3615f0f6ac5317dd72c","title":"Installed distribution record validation: Missing installed members pass validation · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.616,"exit_code":1,"observations":[{"actual":{"digest":[],"executable":[],"extra":[],"missing":[],"size":[]},"check":"fixture 1","expected":{"digest":[],"executable":[],"extra":[],"missing":[],"size":[]},"passed":true},{"actual":{"digest":[],"executable":[],"extra":[],"missing":[],"size":[]},"check":"fixture 2","expected":{"digest":[],"executable":[],"extra":[],"missing":["a"],"size":[]},"passed":false},{"actual":{"digest":[],"executable":[],"extra":["a"],"missing":["a"],"size":[]},"check":"fixture 3","expected":{"digest":[],"executable":[],"extra":["a"],"missing":[],"size":[]},"passed":false},{"actual":{"digest":["a"],"executable":[],"extra":[],"missing":[],"size":[]},"check":"fixture 4","expected":{"digest":["a"],"executable":[],"extra":[],"missing":[],"size":[]},"passed":true},{"actual":{"digest":[],"executable":[],"extra":[],"missing":[],"size":["a"]},"check":"fixture 5","expected":{"digest":[],"executable":[],"extra":[],"missing":[],"size":["a"]},"passed":true},{"actual":{"digest":[],"executable":["a"],"extra":[],"missing":[],"size":[]},"check":"fixture 6","expected":{"digest":[],"executable":["a"],"extra":[],"missing":[],"size":[]},"passed":true},{"actual":{"digest":[],"executable":[],"extra":[],"missing":[],"size":[]},"check":"fixture 7","expected":{"digest":[],"executable":[],"extra":[],"missing":[],"size":[]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fixture 1\", \"actual\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": []}, \"expected\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": []}, \"passed\": true}, {\"check\": \"fixture 2\", \"actual\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": []}, \"expected\": {\"missing\": [\"a\"], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": []}, \"passed\": false}, {\"check\": \"fixture 3\", \"actual\": {\"missing\": [\"a\"], \"extra\": [\"a\"], \"digest\": [], \"size\": [], \"executable\": []}, \"expected\": {\"missing\": [], \"extra\": [\"a\"], \"digest\": [], \"size\": [], \"executable\": []}, \"passed\": false}, {\"check\": \"fixture 4\", \"actual\": {\"missing\": [], \"extra\": [], \"digest\": [\"a\"], \"size\": [], \"executable\": []}, \"expected\": {\"missing\": [], \"extra\": [], \"digest\": [\"a\"], \"size\": [], \"executable\": []}, \"passed\": true}, {\"check\": \"fixture 5\", \"actual\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [\"a\"], \"executable\": []}, \"expected\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [\"a\"], \"executable\": []}, \"passed\": true}, {\"check\": \"fixture 6\", \"actual\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": [\"a\"]}, \"expected\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": [\"a\"]}, \"passed\": true}, {\"check\": \"fixture 7\", \"actual\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": []}, \"expected\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": []}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.356,"exit_code":1,"observations":[{"actual":{"digest":[],"executable":[],"extra":[],"missing":[],"size":[]},"check":"fixture 1","expected":{"digest":[],"executable":[],"extra":[],"missing":[],"size":[]},"passed":true},{"actual":{"digest":[],"executable":[],"extra":[],"missing":[],"size":[]},"check":"fixture 2","expected":{"digest":[],"executable":[],"extra":[],"missing":["a"],"size":[]},"passed":false},{"actual":{"digest":[],"executable":[],"extra":["a"],"missing":[],"size":[]},"check":"fixture 3","expected":{"digest":[],"executable":[],"extra":["a"],"missing":[],"size":[]},"passed":true},{"actual":{"digest":["a"],"executable":[],"extra":[],"missing":[],"size":[]},"check":"fixture 4","expected":{"digest":["a"],"executable":[],"extra":[],"missing":[],"size":[]},"passed":true},{"actual":{"digest":[],"executable":[],"extra":[],"missing":[],"size":["a"]},"check":"fixture 5","expected":{"digest":[],"executable":[],"extra":[],"missing":[],"size":["a"]},"passed":true},{"actual":{"digest":[],"executable":["a"],"extra":[],"missing":[],"size":[]},"check":"fixture 6","expected":{"digest":[],"executable":["a"],"extra":[],"missing":[],"size":[]},"passed":true},{"actual":{"digest":[],"executable":[],"extra":[],"missing":[],"size":[]},"check":"fixture 7","expected":{"digest":[],"executable":[],"extra":[],"missing":[],"size":[]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fixture 1\", \"actual\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": []}, \"expected\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": []}, \"passed\": true}, {\"check\": \"fixture 2\", \"actual\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": []}, \"expected\": {\"missing\": [\"a\"], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": []}, \"passed\": false}, {\"check\": \"fixture 3\", \"actual\": {\"missing\": [], \"extra\": [\"a\"], \"digest\": [], \"size\": [], \"executable\": []}, \"expected\": {\"missing\": [], \"extra\": [\"a\"], \"digest\": [], \"size\": [], \"executable\": []}, \"passed\": true}, {\"check\": \"fixture 4\", \"actual\": {\"missing\": [], \"extra\": [], \"digest\": [\"a\"], \"size\": [], \"executable\": []}, \"expected\": {\"missing\": [], \"extra\": [], \"digest\": [\"a\"], \"size\": [], \"executable\": []}, \"passed\": true}, {\"check\": \"fixture 5\", \"actual\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [\"a\"], \"executable\": []}, \"expected\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [\"a\"], \"executable\": []}, \"passed\": true}, {\"check\": \"fixture 6\", \"actual\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": [\"a\"]}, \"expected\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": [\"a\"]}, \"passed\": true}, {\"check\": \"fixture 7\", \"actual\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": []}, \"expected\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": []}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.438,"exit_code":0,"observations":[{"actual":{"digest":[],"executable":[],"extra":[],"missing":[],"size":[]},"check":"fixture 1","expected":{"digest":[],"executable":[],"extra":[],"missing":[],"size":[]},"passed":true},{"actual":{"digest":[],"executable":[],"extra":[],"missing":["a"],"size":[]},"check":"fixture 2","expected":{"digest":[],"executable":[],"extra":[],"missing":["a"],"size":[]},"passed":true},{"actual":{"digest":[],"executable":[],"extra":["a"],"missing":[],"size":[]},"check":"fixture 3","expected":{"digest":[],"executable":[],"extra":["a"],"missing":[],"size":[]},"passed":true},{"actual":{"digest":["a"],"executable":[],"extra":[],"missing":[],"size":[]},"check":"fixture 4","expected":{"digest":["a"],"executable":[],"extra":[],"missing":[],"size":[]},"passed":true},{"actual":{"digest":[],"executable":[],"extra":[],"missing":[],"size":["a"]},"check":"fixture 5","expected":{"digest":[],"executable":[],"extra":[],"missing":[],"size":["a"]},"passed":true},{"actual":{"digest":[],"executable":["a"],"extra":[],"missing":[],"size":[]},"check":"fixture 6","expected":{"digest":[],"executable":["a"],"extra":[],"missing":[],"size":[]},"passed":true},{"actual":{"digest":[],"executable":[],"extra":[],"missing":[],"size":[]},"check":"fixture 7","expected":{"digest":[],"executable":[],"extra":[],"missing":[],"size":[]},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fixture 1\", \"actual\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": []}, \"expected\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": []}, \"passed\": true}, {\"check\": \"fixture 2\", \"actual\": {\"missing\": [\"a\"], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": []}, \"expected\": {\"missing\": [\"a\"], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": []}, \"passed\": true}, {\"check\": \"fixture 3\", \"actual\": {\"missing\": [], \"extra\": [\"a\"], \"digest\": [], \"size\": [], \"executable\": []}, \"expected\": {\"missing\": [], \"extra\": [\"a\"], \"digest\": [], \"size\": [], \"executable\": []}, \"passed\": true}, {\"check\": \"fixture 4\", \"actual\": {\"missing\": [], \"extra\": [], \"digest\": [\"a\"], \"size\": [], \"executable\": []}, \"expected\": {\"missing\": [], \"extra\": [], \"digest\": [\"a\"], \"size\": [], \"executable\": []}, \"passed\": true}, {\"check\": \"fixture 5\", \"actual\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [\"a\"], \"executable\": []}, \"expected\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [\"a\"], \"executable\": []}, \"passed\": true}, {\"check\": \"fixture 6\", \"actual\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": [\"a\"]}, \"expected\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": [\"a\"]}, \"passed\": true}, {\"check\": \"fixture 7\", \"actual\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": []}, \"expected\": {\"missing\": [], \"extra\": [], \"digest\": [], \"size\": [], \"executable\": []}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}