FA-9901 / Packaging / Open access
Installed distribution record validation: Unexpected executable files pass validation · case 01
Unexpected executable files pass validation.
ROOT CAUSE
The implementation substitutes False for installed[k][2] and k not in executable_allowed, so unexpected executable files pass validation.
VERIFIED REPAIR
Flag executable files unless specifically allowed.
Unsuccessful approach: The attempted repair substitutes installed[k][2]. Fixture 7 still yields {'missing': [], 'extra': [], 'digest': [], 'size': [], 'executable': ['a']} instead of {'missing': [], 'extra': [], 'digest': [], 'size': [], 'executable': []}.
Case contract
Report missing files, unexpected files, digest mismatches, size mismatches, and forbidden executables independently. Metadata is a digest-size-executable tuple.
Why this case matters
An offline model of installed distribution record validation, suitable for testing build and release tooling without external services.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(manifest, installed, executable_allowed):
common = set(manifest) & set(installed)
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 False)}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('fixture 1', solve({}, {}, []), {'missing': [], 'extra': [], 'digest': [], 'size': [], 'executable': []})
check('fixture 2', solve({'a': ('x', 1, False)}, {}, []), {'missing': ['a'], 'extra': [], 'digest': [], 'size': [], 'executable': []})
check('fixture 3', solve({}, {'a': ('x', 1, False)}, []), {'missing': [], 'extra': ['a'], 'digest': [], 'size': [], 'executable': []})
check('fixture 4', solve({'a': ('x', 1, False)}, {'a': ('y', 1, False)}, []), {'missing': [], 'extra': [], 'digest': ['a'], 'size': [], 'executable': []})
check('fixture 5', solve({'a': ('x', 1, False)}, {'a': ('x', 2, False)}, []), {'missing': [], 'extra': [], 'digest': [], 'size': ['a'], 'executable': []})
check('fixture 6', solve({'a': ('x', 1, False)}, {'a': ('x', 1, True)}, []), {'missing': [], 'extra': [], 'digest': [], 'size': [], 'executable': ['a']})
check('fixture 7', solve({'a': ('x', 1, False)}, {'a': ('x', 1, True)}, ['a']), {'missing': [], 'extra': [], 'digest': [], 'size': [], 'executable': []})
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| fixture 1 | {'digest': [], 'executable': [], 'extra': [], 'missing': [], 'size': []} | {'digest': [], 'executable': [], 'extra': [], 'missing': [], 'size': []} | Passed |
| fixture 2 | {'digest': [], 'executable': [], 'extra': [], 'missing': ['a'], 'size': []} | {'digest': [], 'executable': [], 'extra': [], 'missing': ['a'], 'size': []} | Passed |
| fixture 3 | {'digest': [], 'executable': [], 'extra': ['a'], 'missing': [], 'size': []} | {'digest': [], 'executable': [], 'extra': ['a'], 'missing': [], 'size': []} | Passed |
| fixture 4 | {'digest': ['a'], 'executable': [], 'extra': [], 'missing': [], 'size': []} | {'digest': ['a'], 'executable': [], 'extra': [], 'missing': [], 'size': []} | Passed |
| fixture 5 | {'digest': [], 'executable': [], 'extra': [], 'missing': [], 'size': ['a']} | {'digest': [], 'executable': [], 'extra': [], 'missing': [], 'size': ['a']} | Passed |
| fixture 6 | {'digest': [], 'executable': [], 'extra': [], 'missing': [], 'size': []} | {'digest': [], 'executable': ['a'], 'extra': [], 'missing': [], 'size': []} | Failed |
| fixture 7 | {'digest': [], 'executable': [], 'extra': [], 'missing': [], 'size': []} | {'digest': [], 'executable': [], 'extra': [], 'missing': [], 'size': []} | Passed |
SHA-256 / 12a9117f8543df0dbe7b9ab168cffce0a5cf13730ca457692759f0471d79f1b9
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(manifest, installed, executable_allowed):
common = set(manifest) & set(installed)
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])}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('fixture 1', solve({}, {}, []), {'missing': [], 'extra': [], 'digest': [], 'size': [], 'executable': []})
check('fixture 2', solve({'a': ('x', 1, False)}, {}, []), {'missing': ['a'], 'extra': [], 'digest': [], 'size': [], 'executable': []})
check('fixture 3', solve({}, {'a': ('x', 1, False)}, []), {'missing': [], 'extra': ['a'], 'digest': [], 'size': [], 'executable': []})
check('fixture 4', solve({'a': ('x', 1, False)}, {'a': ('y', 1, False)}, []), {'missing': [], 'extra': [], 'digest': ['a'], 'size': [], 'executable': []})
check('fixture 5', solve({'a': ('x', 1, False)}, {'a': ('x', 2, False)}, []), {'missing': [], 'extra': [], 'digest': [], 'size': ['a'], 'executable': []})
check('fixture 6', solve({'a': ('x', 1, False)}, {'a': ('x', 1, True)}, []), {'missing': [], 'extra': [], 'digest': [], 'size': [], 'executable': ['a']})
check('fixture 7', solve({'a': ('x', 1, False)}, {'a': ('x', 1, True)}, ['a']), {'missing': [], 'extra': [], 'digest': [], 'size': [], 'executable': []})
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| fixture 1 | {'digest': [], 'executable': [], 'extra': [], 'missing': [], 'size': []} | {'digest': [], 'executable': [], 'extra': [], 'missing': [], 'size': []} | Passed |
| fixture 2 | {'digest': [], 'executable': [], 'extra': [], 'missing': ['a'], 'size': []} | {'digest': [], 'executable': [], 'extra': [], 'missing': ['a'], 'size': []} | Passed |
| fixture 3 | {'digest': [], 'executable': [], 'extra': ['a'], 'missing': [], 'size': []} | {'digest': [], 'executable': [], 'extra': ['a'], 'missing': [], 'size': []} | Passed |
| fixture 4 | {'digest': ['a'], 'executable': [], 'extra': [], 'missing': [], 'size': []} | {'digest': ['a'], 'executable': [], 'extra': [], 'missing': [], 'size': []} | Passed |
| fixture 5 | {'digest': [], 'executable': [], 'extra': [], 'missing': [], 'size': ['a']} | {'digest': [], 'executable': [], 'extra': [], 'missing': [], 'size': ['a']} | Passed |
| fixture 6 | {'digest': [], 'executable': ['a'], 'extra': [], 'missing': [], 'size': []} | {'digest': [], 'executable': ['a'], 'extra': [], 'missing': [], 'size': []} | Passed |
| fixture 7 | {'digest': [], 'executable': ['a'], 'extra': [], 'missing': [], 'size': []} | {'digest': [], 'executable': [], 'extra': [], 'missing': [], 'size': []} | Failed |
SHA-256 / eaf81e5d9dc6b054e90b3566dbedc3ec63e63ea25280afebdea44410bb248bd8
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(manifest, installed, executable_allowed):
common = set(manifest) & set(installed)
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)}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('fixture 1', solve({}, {}, []), {'missing': [], 'extra': [], 'digest': [], 'size': [], 'executable': []})
check('fixture 2', solve({'a': ('x', 1, False)}, {}, []), {'missing': ['a'], 'extra': [], 'digest': [], 'size': [], 'executable': []})
check('fixture 3', solve({}, {'a': ('x', 1, False)}, []), {'missing': [], 'extra': ['a'], 'digest': [], 'size': [], 'executable': []})
check('fixture 4', solve({'a': ('x', 1, False)}, {'a': ('y', 1, False)}, []), {'missing': [], 'extra': [], 'digest': ['a'], 'size': [], 'executable': []})
check('fixture 5', solve({'a': ('x', 1, False)}, {'a': ('x', 2, False)}, []), {'missing': [], 'extra': [], 'digest': [], 'size': ['a'], 'executable': []})
check('fixture 6', solve({'a': ('x', 1, False)}, {'a': ('x', 1, True)}, []), {'missing': [], 'extra': [], 'digest': [], 'size': [], 'executable': ['a']})
check('fixture 7', solve({'a': ('x', 1, False)}, {'a': ('x', 1, True)}, ['a']), {'missing': [], 'extra': [], 'digest': [], 'size': [], 'executable': []})
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| fixture 1 | {'digest': [], 'executable': [], 'extra': [], 'missing': [], 'size': []} | {'digest': [], 'executable': [], 'extra': [], 'missing': [], 'size': []} | Passed |
| fixture 2 | {'digest': [], 'executable': [], 'extra': [], 'missing': ['a'], 'size': []} | {'digest': [], 'executable': [], 'extra': [], 'missing': ['a'], 'size': []} | Passed |
| fixture 3 | {'digest': [], 'executable': [], 'extra': ['a'], 'missing': [], 'size': []} | {'digest': [], 'executable': [], 'extra': ['a'], 'missing': [], 'size': []} | Passed |
| fixture 4 | {'digest': ['a'], 'executable': [], 'extra': [], 'missing': [], 'size': []} | {'digest': ['a'], 'executable': [], 'extra': [], 'missing': [], 'size': []} | Passed |
| fixture 5 | {'digest': [], 'executable': [], 'extra': [], 'missing': [], 'size': ['a']} | {'digest': [], 'executable': [], 'extra': [], 'missing': [], 'size': ['a']} | Passed |
| fixture 6 | {'digest': [], 'executable': ['a'], 'extra': [], 'missing': [], 'size': []} | {'digest': [], 'executable': ['a'], 'extra': [], 'missing': [], 'size': []} | Passed |
| fixture 7 | {'digest': [], 'executable': [], 'extra': [], 'missing': [], 'size': []} | {'digest': [], 'executable': [], 'extra': [], 'missing': [], 'size': []} | Passed |
SHA-256 / 3baecf1f95f0ed8ef045deb2cc03208cc7a70c75a6fe65ab3fb4643313465104
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:38:34.158435+00:00.
Case digest / 9414e6ba2f19813ddf212d4875ca55e2ef0f030a7479ebe05b46bdf962dc416b