FA-9536 / Version constraints / Open access
Compatible release admission: Compatible ranges accept versions below their floor · case 01
Compatible ranges accept versions below their floor.
ROOT CAUSE
The implementation substitutes True for candidate >= low, so compatible ranges accept versions below their floor.
VERIFIED REPAIR
Accept the inclusive lower bound and reject lower releases.
Unsuccessful approach: The attempted repair substitutes candidate > low. Fixture 6 still yields False instead of True.
Case contract
Accept candidate tuple if not excluded, at least the lower release, below the compatibility ceiling, and prerelease only when opted in; exact pins additionally require equality.
Why this case matters
An offline model of compatible release admission, 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(candidate, low, ceiling, excluded, prerelease, allow_pre, pin):
return (candidate not in excluded and True and candidate < ceiling and (not prerelease or allow_pre) and (pin is None or candidate == pin))
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('fixture 1', solve((1, 1), (1, 2), (2, 0), [], False, False, None), False)
check('fixture 2', solve((1, 1), (1, 2), (2, 0), [(1, 2)], False, False, None), False)
check('fixture 3', solve((1, 1), (1, 2), (2, 0), [], True, False, None), False)
check('fixture 4', solve((1, 1), (1, 2), (2, 0), [], True, True, None), False)
check('fixture 5', solve((1, 1), (1, 2), (2, 0), [], False, False, (1, 2)), False)
check('fixture 6', solve((1, 2), (1, 2), (2, 0), [], False, False, None), True)
check('fixture 7', solve((1, 2), (1, 2), (2, 0), [(1, 2)], False, False, None), False)
check('fixture 8', solve((1, 2), (1, 2), (2, 0), [], True, False, None), False)
check('fixture 9', solve((1, 2), (1, 2), (2, 0), [], True, True, None), True)
check('fixture 10', solve((1, 2), (1, 2), (2, 0), [], False, False, (1, 2)), True)
check('fixture 11', solve((1, 9), (1, 2), (2, 0), [], False, False, None), True)
check('fixture 12', solve((1, 9), (1, 2), (2, 0), [(1, 2)], False, False, None), True)
check('fixture 13', solve((1, 9), (1, 2), (2, 0), [], True, False, None), False)
check('fixture 14', solve((1, 9), (1, 2), (2, 0), [], True, True, None), True)
check('fixture 15', solve((1, 9), (1, 2), (2, 0), [], False, False, (1, 2)), False)
check('fixture 16', solve((2, 0), (1, 2), (2, 0), [], False, False, None), False)
check('fixture 17', solve((2, 0), (1, 2), (2, 0), [(1, 2)], False, False, None), False)
check('fixture 18', solve((2, 0), (1, 2), (2, 0), [], True, False, None), False)
check('fixture 19', solve((2, 0), (1, 2), (2, 0), [], True, True, None), False)
check('fixture 20', solve((2, 0), (1, 2), (2, 0), [], False, False, (1, 2)), False)
check('fixture 21', solve((2, 1), (1, 2), (2, 0), [], False, False, None), False)
check('fixture 22', solve((2, 1), (1, 2), (2, 0), [(1, 2)], False, False, None), False)
check('fixture 23', solve((2, 1), (1, 2), (2, 0), [], True, False, None), False)
check('fixture 24', solve((2, 1), (1, 2), (2, 0), [], True, True, None), False)
check('fixture 25', solve((2, 1), (1, 2), (2, 0), [], False, False, (1, 2)), False)
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 | True | False | Failed |
| fixture 2 | True | False | Failed |
| fixture 3 | False | False | Passed |
| fixture 4 | True | False | Failed |
| fixture 5 | False | False | Passed |
| fixture 6 | True | True | Passed |
| fixture 7 | False | False | Passed |
| fixture 8 | False | False | Passed |
| fixture 9 | True | True | Passed |
| fixture 10 | True | True | Passed |
| fixture 11 | True | True | Passed |
| fixture 12 | True | True | Passed |
| fixture 13 | False | False | Passed |
| fixture 14 | True | True | Passed |
| fixture 15 | False | False | Passed |
| fixture 16 | False | False | Passed |
| fixture 17 | False | False | Passed |
| fixture 18 | False | False | Passed |
| fixture 19 | False | False | Passed |
| fixture 20 | False | False | Passed |
| fixture 21 | False | False | Passed |
| fixture 22 | False | False | Passed |
| fixture 23 | False | False | Passed |
| fixture 24 | False | False | Passed |
| fixture 25 | False | False | Passed |
SHA-256 / 8112d32d2a31cfc3fc21b39ab696981c760b18d8abe31115e72093830344d113
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(candidate, low, ceiling, excluded, prerelease, allow_pre, pin):
return (candidate not in excluded and candidate > low and candidate < ceiling and (not prerelease or allow_pre) and (pin is None or candidate == pin))
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('fixture 1', solve((1, 1), (1, 2), (2, 0), [], False, False, None), False)
check('fixture 2', solve((1, 1), (1, 2), (2, 0), [(1, 2)], False, False, None), False)
check('fixture 3', solve((1, 1), (1, 2), (2, 0), [], True, False, None), False)
check('fixture 4', solve((1, 1), (1, 2), (2, 0), [], True, True, None), False)
check('fixture 5', solve((1, 1), (1, 2), (2, 0), [], False, False, (1, 2)), False)
check('fixture 6', solve((1, 2), (1, 2), (2, 0), [], False, False, None), True)
check('fixture 7', solve((1, 2), (1, 2), (2, 0), [(1, 2)], False, False, None), False)
check('fixture 8', solve((1, 2), (1, 2), (2, 0), [], True, False, None), False)
check('fixture 9', solve((1, 2), (1, 2), (2, 0), [], True, True, None), True)
check('fixture 10', solve((1, 2), (1, 2), (2, 0), [], False, False, (1, 2)), True)
check('fixture 11', solve((1, 9), (1, 2), (2, 0), [], False, False, None), True)
check('fixture 12', solve((1, 9), (1, 2), (2, 0), [(1, 2)], False, False, None), True)
check('fixture 13', solve((1, 9), (1, 2), (2, 0), [], True, False, None), False)
check('fixture 14', solve((1, 9), (1, 2), (2, 0), [], True, True, None), True)
check('fixture 15', solve((1, 9), (1, 2), (2, 0), [], False, False, (1, 2)), False)
check('fixture 16', solve((2, 0), (1, 2), (2, 0), [], False, False, None), False)
check('fixture 17', solve((2, 0), (1, 2), (2, 0), [(1, 2)], False, False, None), False)
check('fixture 18', solve((2, 0), (1, 2), (2, 0), [], True, False, None), False)
check('fixture 19', solve((2, 0), (1, 2), (2, 0), [], True, True, None), False)
check('fixture 20', solve((2, 0), (1, 2), (2, 0), [], False, False, (1, 2)), False)
check('fixture 21', solve((2, 1), (1, 2), (2, 0), [], False, False, None), False)
check('fixture 22', solve((2, 1), (1, 2), (2, 0), [(1, 2)], False, False, None), False)
check('fixture 23', solve((2, 1), (1, 2), (2, 0), [], True, False, None), False)
check('fixture 24', solve((2, 1), (1, 2), (2, 0), [], True, True, None), False)
check('fixture 25', solve((2, 1), (1, 2), (2, 0), [], False, False, (1, 2)), False)
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 | False | False | Passed |
| fixture 2 | False | False | Passed |
| fixture 3 | False | False | Passed |
| fixture 4 | False | False | Passed |
| fixture 5 | False | False | Passed |
| fixture 6 | False | True | Failed |
| fixture 7 | False | False | Passed |
| fixture 8 | False | False | Passed |
| fixture 9 | False | True | Failed |
| fixture 10 | False | True | Failed |
| fixture 11 | True | True | Passed |
| fixture 12 | True | True | Passed |
| fixture 13 | False | False | Passed |
| fixture 14 | True | True | Passed |
| fixture 15 | False | False | Passed |
| fixture 16 | False | False | Passed |
| fixture 17 | False | False | Passed |
| fixture 18 | False | False | Passed |
| fixture 19 | False | False | Passed |
| fixture 20 | False | False | Passed |
| fixture 21 | False | False | Passed |
| fixture 22 | False | False | Passed |
| fixture 23 | False | False | Passed |
| fixture 24 | False | False | Passed |
| fixture 25 | False | False | Passed |
SHA-256 / 041d028fdd179fefc838f677f4fee5ea25258da2769e14cdf1fd54c7110ca6df
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(candidate, low, ceiling, excluded, prerelease, allow_pre, pin):
return (candidate not in excluded and candidate >= low and candidate < ceiling and (not prerelease or allow_pre) and (pin is None or candidate == pin))
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('fixture 1', solve((1, 1), (1, 2), (2, 0), [], False, False, None), False)
check('fixture 2', solve((1, 1), (1, 2), (2, 0), [(1, 2)], False, False, None), False)
check('fixture 3', solve((1, 1), (1, 2), (2, 0), [], True, False, None), False)
check('fixture 4', solve((1, 1), (1, 2), (2, 0), [], True, True, None), False)
check('fixture 5', solve((1, 1), (1, 2), (2, 0), [], False, False, (1, 2)), False)
check('fixture 6', solve((1, 2), (1, 2), (2, 0), [], False, False, None), True)
check('fixture 7', solve((1, 2), (1, 2), (2, 0), [(1, 2)], False, False, None), False)
check('fixture 8', solve((1, 2), (1, 2), (2, 0), [], True, False, None), False)
check('fixture 9', solve((1, 2), (1, 2), (2, 0), [], True, True, None), True)
check('fixture 10', solve((1, 2), (1, 2), (2, 0), [], False, False, (1, 2)), True)
check('fixture 11', solve((1, 9), (1, 2), (2, 0), [], False, False, None), True)
check('fixture 12', solve((1, 9), (1, 2), (2, 0), [(1, 2)], False, False, None), True)
check('fixture 13', solve((1, 9), (1, 2), (2, 0), [], True, False, None), False)
check('fixture 14', solve((1, 9), (1, 2), (2, 0), [], True, True, None), True)
check('fixture 15', solve((1, 9), (1, 2), (2, 0), [], False, False, (1, 2)), False)
check('fixture 16', solve((2, 0), (1, 2), (2, 0), [], False, False, None), False)
check('fixture 17', solve((2, 0), (1, 2), (2, 0), [(1, 2)], False, False, None), False)
check('fixture 18', solve((2, 0), (1, 2), (2, 0), [], True, False, None), False)
check('fixture 19', solve((2, 0), (1, 2), (2, 0), [], True, True, None), False)
check('fixture 20', solve((2, 0), (1, 2), (2, 0), [], False, False, (1, 2)), False)
check('fixture 21', solve((2, 1), (1, 2), (2, 0), [], False, False, None), False)
check('fixture 22', solve((2, 1), (1, 2), (2, 0), [(1, 2)], False, False, None), False)
check('fixture 23', solve((2, 1), (1, 2), (2, 0), [], True, False, None), False)
check('fixture 24', solve((2, 1), (1, 2), (2, 0), [], True, True, None), False)
check('fixture 25', solve((2, 1), (1, 2), (2, 0), [], False, False, (1, 2)), False)
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 | False | False | Passed |
| fixture 2 | False | False | Passed |
| fixture 3 | False | False | Passed |
| fixture 4 | False | False | Passed |
| fixture 5 | False | False | Passed |
| fixture 6 | True | True | Passed |
| fixture 7 | False | False | Passed |
| fixture 8 | False | False | Passed |
| fixture 9 | True | True | Passed |
| fixture 10 | True | True | Passed |
| fixture 11 | True | True | Passed |
| fixture 12 | True | True | Passed |
| fixture 13 | False | False | Passed |
| fixture 14 | True | True | Passed |
| fixture 15 | False | False | Passed |
| fixture 16 | False | False | Passed |
| fixture 17 | False | False | Passed |
| fixture 18 | False | False | Passed |
| fixture 19 | False | False | Passed |
| fixture 20 | False | False | Passed |
| fixture 21 | False | False | Passed |
| fixture 22 | False | False | Passed |
| fixture 23 | False | False | Passed |
| fixture 24 | False | False | Passed |
| fixture 25 | False | False | Passed |
SHA-256 / 9436aa7f95f2934f855d763d9aed0d45fbc1ed669972258db8f58ff3ff04d713
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:30.870487+00:00.
Case digest / 76dc579e2cfc2cadcd62ca8e7658ffcaa4217cc84ef2f1e806873a707922520a