FA-8561 / Form validation / Open access
Constraint validation priority: Unparseable user input is reported valid · case 01
Unparseable user input is reported valid.
ROOT CAUSE
The bad input operation uses `if bad_input: return None` where the contract requires `if bad_input: return 'bad-input'`.
VERIFIED REPAIR
Implement the bad input operation as `if bad_input: return 'bad-input'`.
Unsuccessful approach: Calling malformed text missing gives an incorrect corrective instruction.
Case contract
Required checks distinguish blank from zero; malformed input precedes numeric checks; optional blank is valid; min/max are inclusive; pattern applies last.
Why this case matters
A deterministic model of constraint validation priority; this isolates one interface invariant without requiring a browser.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(required, value, bad_input, minimum, maximum, pattern_ok):
if required and value == '': return 'required'
if bad_input: return None
if value == '': return None
if minimum is not None and value < minimum: return 'underflow'
if maximum is not None and value > maximum: return 'overflow'
if not pattern_ok: return 'pattern'
return None
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('zero', solve(True, 0, False, 0, 5, True), None)
check('optional blank', solve(False, '', False, 1, 5, False), None)
check('required blank', solve(True, '', False, None, None, True), 'required')
check('bad', solve(False, 'oops', True, None, None, True), 'bad-input')
check('at min', solve(False, 2, False, 2, 5, True), None)
check('below min', solve(False, 1, False, 2, 5, True), 'underflow')
check('at max', solve(False, 5, False, 2, 5, True), None)
check('above max', solve(False, 6, False, 2, 5, True), 'overflow')
check('parameterized minimum', solve(False,N,False,N,N+10,True), None)
for repetition in range(N):
check('repeat above max', solve(False, 6, False, 2, 5, True), 'overflow')
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 |
|---|---|---|---|
| zero | None | None | Passed |
| optional blank | None | None | Passed |
| required blank | required | required | Passed |
| bad | None | bad-input | Failed |
| at min | None | None | Passed |
| below min | underflow | underflow | Passed |
| at max | None | None | Passed |
| above max | overflow | overflow | Passed |
| parameterized minimum | None | None | Passed |
| repeat above max | overflow | overflow | Passed |
SHA-256 / 3854674ffa479b4bbdd4cc678a330354e9fab09240920ef3fe3a4b80a1751c36
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(required, value, bad_input, minimum, maximum, pattern_ok):
if required and value == '': return 'required'
if bad_input: return 'required'
if value == '': return None
if minimum is not None and value < minimum: return 'underflow'
if maximum is not None and value > maximum: return 'overflow'
if not pattern_ok: return 'pattern'
return None
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('zero', solve(True, 0, False, 0, 5, True), None)
check('optional blank', solve(False, '', False, 1, 5, False), None)
check('required blank', solve(True, '', False, None, None, True), 'required')
check('bad', solve(False, 'oops', True, None, None, True), 'bad-input')
check('at min', solve(False, 2, False, 2, 5, True), None)
check('below min', solve(False, 1, False, 2, 5, True), 'underflow')
check('at max', solve(False, 5, False, 2, 5, True), None)
check('above max', solve(False, 6, False, 2, 5, True), 'overflow')
check('parameterized minimum', solve(False,N,False,N,N+10,True), None)
for repetition in range(N):
check('repeat above max', solve(False, 6, False, 2, 5, True), 'overflow')
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 |
|---|---|---|---|
| zero | None | None | Passed |
| optional blank | None | None | Passed |
| required blank | required | required | Passed |
| bad | required | bad-input | Failed |
| at min | None | None | Passed |
| below min | underflow | underflow | Passed |
| at max | None | None | Passed |
| above max | overflow | overflow | Passed |
| parameterized minimum | None | None | Passed |
| repeat above max | overflow | overflow | Passed |
SHA-256 / 485ea25d8bb3eb6fa0deabd38c956653e0d4843ebe79ef64f6c8e9d334885d15
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(required, value, bad_input, minimum, maximum, pattern_ok):
if required and value == '': return 'required'
if bad_input: return 'bad-input'
if value == '': return None
if minimum is not None and value < minimum: return 'underflow'
if maximum is not None and value > maximum: return 'overflow'
if not pattern_ok: return 'pattern'
return None
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('zero', solve(True, 0, False, 0, 5, True), None)
check('optional blank', solve(False, '', False, 1, 5, False), None)
check('required blank', solve(True, '', False, None, None, True), 'required')
check('bad', solve(False, 'oops', True, None, None, True), 'bad-input')
check('at min', solve(False, 2, False, 2, 5, True), None)
check('below min', solve(False, 1, False, 2, 5, True), 'underflow')
check('at max', solve(False, 5, False, 2, 5, True), None)
check('above max', solve(False, 6, False, 2, 5, True), 'overflow')
check('parameterized minimum', solve(False,N,False,N,N+10,True), None)
for repetition in range(N):
check('repeat above max', solve(False, 6, False, 2, 5, True), 'overflow')
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 |
|---|---|---|---|
| zero | None | None | Passed |
| optional blank | None | None | Passed |
| required blank | required | required | Passed |
| bad | bad-input | bad-input | Passed |
| at min | None | None | Passed |
| below min | underflow | underflow | Passed |
| at max | None | None | Passed |
| above max | overflow | overflow | Passed |
| parameterized minimum | None | None | Passed |
| repeat above max | overflow | overflow | Passed |
SHA-256 / d48f1d3a49b77bae2a85dd0bee201431d4f18ce57f18f1bf2721df713c5a4c45
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:22.500658+00:00.
Case digest / 0d6fa9c822f34281668a2e0ad2d1df34b29efff146a80db0ca0f74bc00f69c41