FA-53506 / Accessibility interaction semantics / Open access
Placeholder text replaces a nonempty accessible value hint · case 01
Placeholder text replaces a nonempty accessible value hint.
ROOT CAUSE
The placeholder channel decision in the protected value adapter violates its declared contract.
VERIFIED REPAIR
Apply the exact contract at the placeholder channel decision: placeholder if length == 0 else ''
Unsuccessful approach: The local repair substitutes placeholder if not protected else '' but still mishandles the regression fixtures.
Case contract
Input [raw,protected,reveal,permission,readonly,multiline,max_length,placeholder]. Raw is a string; max_length is None or nonnegative. Normalize CRLF before applying codepoint cap. In single line replace LF with space. Protected text reveals only when reveal and permission; otherwise one bullet per capped codepoint excluding LF, which is retained. Empty values retain empty text and expose placeholder separately. Return {text,placeholder,length,editable,protected}; length is the length after cap, editable is not readonly, protected reports input flag even when revealed.
Why this case matters
Offline accessibility bridge model with explicit policy; useful for testing semantic API adapters independently of browser implementations.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(data):
raw,protected,reveal,permission,readonly,multiline,cap,placeholder = data
value = raw.replace('\r\n','\n')
if not multiline: value = value.replace('\n',' ')
if cap is not None: value = value[:cap]
length = len(value)
if protected and not (reveal and permission):
value = ''.join('\n' if c == '\n' else '•' for c in value)
return {'text':value,'placeholder':placeholder, 'length':length,'editable':not readonly,'protected':protected}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('redacted multiline', solve(['A'*N+'\r\nB',True,False,True,False,True,None,'hint'],), {'text':'•'*N+'\n•','placeholder':'','length':N+2,'editable':True,'protected':True})
check('reveal lacks permission', solve(['A'*N,True,True,False,False,False,None,'hint'],), {'text':'•'*N,'placeholder':'','length':N,'editable':True,'protected':True})
check('permission lacks reveal', solve(['A'*N,True,False,True,False,False,None,'hint'],), {'text':'•'*N,'placeholder':'','length':N,'editable':True,'protected':True})
check('authorized reveal readonly', solve(['secret',True,True,True,True,False,None,'hint'],), {'text':'secret','placeholder':'','length':6,'editable':False,'protected':True})
check('single line cap', solve(['A\r\nBC',False,False,False,False,False,3,'hint'],), {'text':'A B','placeholder':'','length':3,'editable':True,'protected':False})
check('zero cap placeholder', solve(['secret',True,False,False,False,False,0,'hint'],), {'text':'','placeholder':'hint','length':0,'editable':True,'protected':True})
check('empty value', solve(['',False,False,False,True,False,None,'hint'],), {'text':'','placeholder':'hint','length':0,'editable':False,'protected':False})
check('unicode codepoints', solve(['😀é',True,False,False,False,True,None,''],), {'text':'••','placeholder':'','length':2,'editable':True,'protected':True})
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 |
|---|---|---|---|
| redacted multiline | {'editable': True, 'length': 3, 'placeholder': 'hint', 'protected': True, 'text': '•\n•'} | {'editable': True, 'length': 3, 'placeholder': '', 'protected': True, 'text': '•\n•'} | Failed |
| reveal lacks permission | {'editable': True, 'length': 1, 'placeholder': 'hint', 'protected': True, 'text': '•'} | {'editable': True, 'length': 1, 'placeholder': '', 'protected': True, 'text': '•'} | Failed |
| permission lacks reveal | {'editable': True, 'length': 1, 'placeholder': 'hint', 'protected': True, 'text': '•'} | {'editable': True, 'length': 1, 'placeholder': '', 'protected': True, 'text': '•'} | Failed |
| authorized reveal readonly | {'editable': False, 'length': 6, 'placeholder': 'hint', 'protected': True, 'text': 'secret'} | {'editable': False, 'length': 6, 'placeholder': '', 'protected': True, 'text': 'secret'} | Failed |
| single line cap | {'editable': True, 'length': 3, 'placeholder': 'hint', 'protected': False, 'text': 'A B'} | {'editable': True, 'length': 3, 'placeholder': '', 'protected': False, 'text': 'A B'} | Failed |
| zero cap placeholder | {'editable': True, 'length': 0, 'placeholder': 'hint', 'protected': True, 'text': ''} | {'editable': True, 'length': 0, 'placeholder': 'hint', 'protected': True, 'text': ''} | Passed |
| empty value | {'editable': False, 'length': 0, 'placeholder': 'hint', 'protected': False, 'text': ''} | {'editable': False, 'length': 0, 'placeholder': 'hint', 'protected': False, 'text': ''} | Passed |
| unicode codepoints | {'editable': True, 'length': 2, 'placeholder': '', 'protected': True, 'text': '••'} | {'editable': True, 'length': 2, 'placeholder': '', 'protected': True, 'text': '••'} | Passed |
SHA-256 / 09562cd55e0ff3baa0228507fdb49ac9eaeb2ee34cf832dbae61317428d0c115
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(data):
raw,protected,reveal,permission,readonly,multiline,cap,placeholder = data
value = raw.replace('\r\n','\n')
if not multiline: value = value.replace('\n',' ')
if cap is not None: value = value[:cap]
length = len(value)
if protected and not (reveal and permission):
value = ''.join('\n' if c == '\n' else '•' for c in value)
return {'text':value,'placeholder':placeholder if not protected else '', 'length':length,'editable':not readonly,'protected':protected}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('redacted multiline', solve(['A'*N+'\r\nB',True,False,True,False,True,None,'hint'],), {'text':'•'*N+'\n•','placeholder':'','length':N+2,'editable':True,'protected':True})
check('reveal lacks permission', solve(['A'*N,True,True,False,False,False,None,'hint'],), {'text':'•'*N,'placeholder':'','length':N,'editable':True,'protected':True})
check('permission lacks reveal', solve(['A'*N,True,False,True,False,False,None,'hint'],), {'text':'•'*N,'placeholder':'','length':N,'editable':True,'protected':True})
check('authorized reveal readonly', solve(['secret',True,True,True,True,False,None,'hint'],), {'text':'secret','placeholder':'','length':6,'editable':False,'protected':True})
check('single line cap', solve(['A\r\nBC',False,False,False,False,False,3,'hint'],), {'text':'A B','placeholder':'','length':3,'editable':True,'protected':False})
check('zero cap placeholder', solve(['secret',True,False,False,False,False,0,'hint'],), {'text':'','placeholder':'hint','length':0,'editable':True,'protected':True})
check('empty value', solve(['',False,False,False,True,False,None,'hint'],), {'text':'','placeholder':'hint','length':0,'editable':False,'protected':False})
check('unicode codepoints', solve(['😀é',True,False,False,False,True,None,''],), {'text':'••','placeholder':'','length':2,'editable':True,'protected':True})
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 |
|---|---|---|---|
| redacted multiline | {'editable': True, 'length': 3, 'placeholder': '', 'protected': True, 'text': '•\n•'} | {'editable': True, 'length': 3, 'placeholder': '', 'protected': True, 'text': '•\n•'} | Passed |
| reveal lacks permission | {'editable': True, 'length': 1, 'placeholder': '', 'protected': True, 'text': '•'} | {'editable': True, 'length': 1, 'placeholder': '', 'protected': True, 'text': '•'} | Passed |
| permission lacks reveal | {'editable': True, 'length': 1, 'placeholder': '', 'protected': True, 'text': '•'} | {'editable': True, 'length': 1, 'placeholder': '', 'protected': True, 'text': '•'} | Passed |
| authorized reveal readonly | {'editable': False, 'length': 6, 'placeholder': '', 'protected': True, 'text': 'secret'} | {'editable': False, 'length': 6, 'placeholder': '', 'protected': True, 'text': 'secret'} | Passed |
| single line cap | {'editable': True, 'length': 3, 'placeholder': 'hint', 'protected': False, 'text': 'A B'} | {'editable': True, 'length': 3, 'placeholder': '', 'protected': False, 'text': 'A B'} | Failed |
| zero cap placeholder | {'editable': True, 'length': 0, 'placeholder': '', 'protected': True, 'text': ''} | {'editable': True, 'length': 0, 'placeholder': 'hint', 'protected': True, 'text': ''} | Failed |
| empty value | {'editable': False, 'length': 0, 'placeholder': 'hint', 'protected': False, 'text': ''} | {'editable': False, 'length': 0, 'placeholder': 'hint', 'protected': False, 'text': ''} | Passed |
| unicode codepoints | {'editable': True, 'length': 2, 'placeholder': '', 'protected': True, 'text': '••'} | {'editable': True, 'length': 2, 'placeholder': '', 'protected': True, 'text': '••'} | Passed |
SHA-256 / 16698bb96cb697c8da185cb1d65914fd974571012f317c84e640731e6bfa4413
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(data):
raw,protected,reveal,permission,readonly,multiline,cap,placeholder = data
value = raw.replace('\r\n','\n')
if not multiline: value = value.replace('\n',' ')
if cap is not None: value = value[:cap]
length = len(value)
if protected and not (reveal and permission):
value = ''.join('\n' if c == '\n' else '•' for c in value)
return {'text':value,'placeholder':placeholder if length == 0 else '', 'length':length,'editable':not readonly,'protected':protected}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('redacted multiline', solve(['A'*N+'\r\nB',True,False,True,False,True,None,'hint'],), {'text':'•'*N+'\n•','placeholder':'','length':N+2,'editable':True,'protected':True})
check('reveal lacks permission', solve(['A'*N,True,True,False,False,False,None,'hint'],), {'text':'•'*N,'placeholder':'','length':N,'editable':True,'protected':True})
check('permission lacks reveal', solve(['A'*N,True,False,True,False,False,None,'hint'],), {'text':'•'*N,'placeholder':'','length':N,'editable':True,'protected':True})
check('authorized reveal readonly', solve(['secret',True,True,True,True,False,None,'hint'],), {'text':'secret','placeholder':'','length':6,'editable':False,'protected':True})
check('single line cap', solve(['A\r\nBC',False,False,False,False,False,3,'hint'],), {'text':'A B','placeholder':'','length':3,'editable':True,'protected':False})
check('zero cap placeholder', solve(['secret',True,False,False,False,False,0,'hint'],), {'text':'','placeholder':'hint','length':0,'editable':True,'protected':True})
check('empty value', solve(['',False,False,False,True,False,None,'hint'],), {'text':'','placeholder':'hint','length':0,'editable':False,'protected':False})
check('unicode codepoints', solve(['😀é',True,False,False,False,True,None,''],), {'text':'••','placeholder':'','length':2,'editable':True,'protected':True})
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 |
|---|---|---|---|
| redacted multiline | {'editable': True, 'length': 3, 'placeholder': '', 'protected': True, 'text': '•\n•'} | {'editable': True, 'length': 3, 'placeholder': '', 'protected': True, 'text': '•\n•'} | Passed |
| reveal lacks permission | {'editable': True, 'length': 1, 'placeholder': '', 'protected': True, 'text': '•'} | {'editable': True, 'length': 1, 'placeholder': '', 'protected': True, 'text': '•'} | Passed |
| permission lacks reveal | {'editable': True, 'length': 1, 'placeholder': '', 'protected': True, 'text': '•'} | {'editable': True, 'length': 1, 'placeholder': '', 'protected': True, 'text': '•'} | Passed |
| authorized reveal readonly | {'editable': False, 'length': 6, 'placeholder': '', 'protected': True, 'text': 'secret'} | {'editable': False, 'length': 6, 'placeholder': '', 'protected': True, 'text': 'secret'} | Passed |
| single line cap | {'editable': True, 'length': 3, 'placeholder': '', 'protected': False, 'text': 'A B'} | {'editable': True, 'length': 3, 'placeholder': '', 'protected': False, 'text': 'A B'} | Passed |
| zero cap placeholder | {'editable': True, 'length': 0, 'placeholder': 'hint', 'protected': True, 'text': ''} | {'editable': True, 'length': 0, 'placeholder': 'hint', 'protected': True, 'text': ''} | Passed |
| empty value | {'editable': False, 'length': 0, 'placeholder': 'hint', 'protected': False, 'text': ''} | {'editable': False, 'length': 0, 'placeholder': 'hint', 'protected': False, 'text': ''} | Passed |
| unicode codepoints | {'editable': True, 'length': 2, 'placeholder': '', 'protected': True, 'text': '••'} | {'editable': True, 'length': 2, 'placeholder': '', 'protected': True, 'text': '••'} | Passed |
SHA-256 / f80a6119d0415c2d76ec2ae33a253e3bcf3ebc8d83969b9074e56203f0f8ca45
Verification & scope
Stipulated finite adapter contract, not a claim of platform accessibility or ARIA conformance. 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:45:39.634955+00:00.
Case digest / 67ffc69089c8881bac66e40fd57c1445e709c60dfdfcf21171b66a7e032c52f1