FA-8481 / Form submission / Open access
Successful form control collection: Disabled field values are submitted · case 01
Disabled field values are submitted.
ROOT CAUSE
The disabled operation uses `if False: continue` where the contract requires `if c['disabled']: continue`.
VERIFIED REPAIR
Implement the disabled operation as `if c['disabled']: continue`.
Unsuccessful approach: Submitting only disabled fields reverses successful-control rules.
Case contract
Submit enabled named controls, checked choices and only the actual submitter; emit one ordered pair per selected multiple option without value deduplication.
Why this case matters
A deterministic model of successful form control collection; 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(controls, submitter):
pairs = []
for c in controls:
if False: continue
if not c['name']: continue
if c['type'] in ('checkbox', 'radio') and not c['checked']: continue
if c['type'] == 'submit' and c['id'] != submitter: continue
values = c['value'] if c['type'] == 'multiple' else [c['value']]
pairs.extend((c['name'], value) for value in values)
return pairs
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('disabled', solve([dict(disabled=True,name='a',type='text',checked=False,id='a',value='x')], None), [])
check('unnamed', solve([dict(disabled=False,name='',type='text',checked=False,id='a',value='x')], None), [])
check('unchecked', solve([dict(disabled=False,name='a',type='checkbox',checked=False,id='a',value='x')], None), [])
check('checked', solve([dict(disabled=False,name='a',type='checkbox',checked=True,id='a',value='x')], None), [('a', 'x')])
check('other submit', solve([dict(disabled=False,name='a',type='submit',checked=False,id='other',value='x')], 'actual'), [])
check('actual submit', solve([dict(disabled=False,name='a',type='submit',checked=False,id='actual',value='x')], 'actual'), [('a', 'x')])
check('multiple', solve([dict(disabled=False,name='a',type='multiple',checked=False,id='a',value=['x','x','y'])], None), [('a', 'x'), ('a', 'x'), ('a', 'y')])
check('parameterized submission value', solve([dict(disabled=False,name='a',type='text',checked=False,id='a',value=N)],None), [('a',N)])
for repetition in range(N):
check('repeat multiple', solve([dict(disabled=False,name='a',type='multiple',checked=False,id='a',value=['x','x','y'])], None), [('a', 'x'), ('a', 'x'), ('a', 'y')])
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 |
|---|---|---|---|
| disabled | [['a', 'x']] | [] | Failed |
| unnamed | [] | [] | Passed |
| unchecked | [] | [] | Passed |
| checked | [['a', 'x']] | [['a', 'x']] | Passed |
| other submit | [] | [] | Passed |
| actual submit | [['a', 'x']] | [['a', 'x']] | Passed |
| multiple | [['a', 'x'], ['a', 'x'], ['a', 'y']] | [['a', 'x'], ['a', 'x'], ['a', 'y']] | Passed |
| parameterized submission value | [['a', 1]] | [['a', 1]] | Passed |
| repeat multiple | [['a', 'x'], ['a', 'x'], ['a', 'y']] | [['a', 'x'], ['a', 'x'], ['a', 'y']] | Passed |
SHA-256 / 58331d92629188ea176faa359d5565b75ab8b5f35eebeddaf435ad9467abcc84
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(controls, submitter):
pairs = []
for c in controls:
if not c['disabled']: continue
if not c['name']: continue
if c['type'] in ('checkbox', 'radio') and not c['checked']: continue
if c['type'] == 'submit' and c['id'] != submitter: continue
values = c['value'] if c['type'] == 'multiple' else [c['value']]
pairs.extend((c['name'], value) for value in values)
return pairs
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('disabled', solve([dict(disabled=True,name='a',type='text',checked=False,id='a',value='x')], None), [])
check('unnamed', solve([dict(disabled=False,name='',type='text',checked=False,id='a',value='x')], None), [])
check('unchecked', solve([dict(disabled=False,name='a',type='checkbox',checked=False,id='a',value='x')], None), [])
check('checked', solve([dict(disabled=False,name='a',type='checkbox',checked=True,id='a',value='x')], None), [('a', 'x')])
check('other submit', solve([dict(disabled=False,name='a',type='submit',checked=False,id='other',value='x')], 'actual'), [])
check('actual submit', solve([dict(disabled=False,name='a',type='submit',checked=False,id='actual',value='x')], 'actual'), [('a', 'x')])
check('multiple', solve([dict(disabled=False,name='a',type='multiple',checked=False,id='a',value=['x','x','y'])], None), [('a', 'x'), ('a', 'x'), ('a', 'y')])
check('parameterized submission value', solve([dict(disabled=False,name='a',type='text',checked=False,id='a',value=N)],None), [('a',N)])
for repetition in range(N):
check('repeat multiple', solve([dict(disabled=False,name='a',type='multiple',checked=False,id='a',value=['x','x','y'])], None), [('a', 'x'), ('a', 'x'), ('a', 'y')])
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 |
|---|---|---|---|
| disabled | [['a', 'x']] | [] | Failed |
| unnamed | [] | [] | Passed |
| unchecked | [] | [] | Passed |
| checked | [] | [['a', 'x']] | Failed |
| other submit | [] | [] | Passed |
| actual submit | [] | [['a', 'x']] | Failed |
| multiple | [] | [['a', 'x'], ['a', 'x'], ['a', 'y']] | Failed |
| parameterized submission value | [] | [['a', 1]] | Failed |
| repeat multiple | [] | [['a', 'x'], ['a', 'x'], ['a', 'y']] | Failed |
SHA-256 / 7a28eced5c91aff63a89ded8012167b61d93c6a083d48254181fd698d1d65a74
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(controls, submitter):
pairs = []
for c in controls:
if c['disabled']: continue
if not c['name']: continue
if c['type'] in ('checkbox', 'radio') and not c['checked']: continue
if c['type'] == 'submit' and c['id'] != submitter: continue
values = c['value'] if c['type'] == 'multiple' else [c['value']]
pairs.extend((c['name'], value) for value in values)
return pairs
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('disabled', solve([dict(disabled=True,name='a',type='text',checked=False,id='a',value='x')], None), [])
check('unnamed', solve([dict(disabled=False,name='',type='text',checked=False,id='a',value='x')], None), [])
check('unchecked', solve([dict(disabled=False,name='a',type='checkbox',checked=False,id='a',value='x')], None), [])
check('checked', solve([dict(disabled=False,name='a',type='checkbox',checked=True,id='a',value='x')], None), [('a', 'x')])
check('other submit', solve([dict(disabled=False,name='a',type='submit',checked=False,id='other',value='x')], 'actual'), [])
check('actual submit', solve([dict(disabled=False,name='a',type='submit',checked=False,id='actual',value='x')], 'actual'), [('a', 'x')])
check('multiple', solve([dict(disabled=False,name='a',type='multiple',checked=False,id='a',value=['x','x','y'])], None), [('a', 'x'), ('a', 'x'), ('a', 'y')])
check('parameterized submission value', solve([dict(disabled=False,name='a',type='text',checked=False,id='a',value=N)],None), [('a',N)])
for repetition in range(N):
check('repeat multiple', solve([dict(disabled=False,name='a',type='multiple',checked=False,id='a',value=['x','x','y'])], None), [('a', 'x'), ('a', 'x'), ('a', 'y')])
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 |
|---|---|---|---|
| disabled | [] | [] | Passed |
| unnamed | [] | [] | Passed |
| unchecked | [] | [] | Passed |
| checked | [['a', 'x']] | [['a', 'x']] | Passed |
| other submit | [] | [] | Passed |
| actual submit | [['a', 'x']] | [['a', 'x']] | Passed |
| multiple | [['a', 'x'], ['a', 'x'], ['a', 'y']] | [['a', 'x'], ['a', 'x'], ['a', 'y']] | Passed |
| parameterized submission value | [['a', 1]] | [['a', 1]] | Passed |
| repeat multiple | [['a', 'x'], ['a', 'x'], ['a', 'y']] | [['a', 'x'], ['a', 'x'], ['a', 'y']] | Passed |
SHA-256 / 847e1bce37bb83205226fee1e23a56c7104d6a89e068f21e74939db3064a37d5
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:21.743639+00:00.
Case digest / 89368b05587e918dd44beca3410a9dc5144740c959429e1bb0944af85af05555