{"abstract":"Read-only values are exposed as editable.","category":"Accessibility interaction semantics","checks":8,"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.","evaluation_group":"s3-accessibility-protected-value","failed_approach":"The local repair substitutes 'editable':not readonly or reveal but still mishandles the regression fixtures.","family":"s3-accessibility-protected-value-readonly-state","id":"FA-53511","implementations":{"attempt":{"sha256":"b3c7d53a70bfcd05857ca59782519b8ebe5ca80d5a1b64f6a34061d4ff2866b7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(data):\n    raw,protected,reveal,permission,readonly,multiline,cap,placeholder = data\n    value = raw.replace('\\r\\n','\\n')\n    if not multiline: value = value.replace('\\n',' ')\n    if cap is not None: value = value[:cap]\n    length = len(value)\n    if protected and not (reveal and permission):\n        value = ''.join('\\n' if c == '\\n' else '•' for c in value)\n    return {'text':value,'placeholder':placeholder if length == 0 else '', 'length':length,'editable':not readonly or reveal,'protected':protected}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('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})\ncheck('reveal lacks permission', solve(['A'*N,True,True,False,False,False,None,'hint'],), {'text':'•'*N,'placeholder':'','length':N,'editable':True,'protected':True})\ncheck('permission lacks reveal', solve(['A'*N,True,False,True,False,False,None,'hint'],), {'text':'•'*N,'placeholder':'','length':N,'editable':True,'protected':True})\ncheck('authorized reveal readonly', solve(['secret',True,True,True,True,False,None,'hint'],), {'text':'secret','placeholder':'','length':6,'editable':False,'protected':True})\ncheck('single line cap', solve(['A\\r\\nBC',False,False,False,False,False,3,'hint'],), {'text':'A B','placeholder':'','length':3,'editable':True,'protected':False})\ncheck('zero cap placeholder', solve(['secret',True,False,False,False,False,0,'hint'],), {'text':'','placeholder':'hint','length':0,'editable':True,'protected':True})\ncheck('empty value', solve(['',False,False,False,True,False,None,'hint'],), {'text':'','placeholder':'hint','length':0,'editable':False,'protected':False})\ncheck('unicode codepoints', solve(['😀é',True,False,False,False,True,None,''],), {'text':'••','placeholder':'','length':2,'editable':True,'protected':True})\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"bf7ed772f2c03939ec10b05e2f678065c26bb0b569fcc10601c64a65d2113e31","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(data):\n    raw,protected,reveal,permission,readonly,multiline,cap,placeholder = data\n    value = raw.replace('\\r\\n','\\n')\n    if not multiline: value = value.replace('\\n',' ')\n    if cap is not None: value = value[:cap]\n    length = len(value)\n    if protected and not (reveal and permission):\n        value = ''.join('\\n' if c == '\\n' else '•' for c in value)\n    return {'text':value,'placeholder':placeholder if length == 0 else '', 'length':length,'editable':True,'protected':protected}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('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})\ncheck('reveal lacks permission', solve(['A'*N,True,True,False,False,False,None,'hint'],), {'text':'•'*N,'placeholder':'','length':N,'editable':True,'protected':True})\ncheck('permission lacks reveal', solve(['A'*N,True,False,True,False,False,None,'hint'],), {'text':'•'*N,'placeholder':'','length':N,'editable':True,'protected':True})\ncheck('authorized reveal readonly', solve(['secret',True,True,True,True,False,None,'hint'],), {'text':'secret','placeholder':'','length':6,'editable':False,'protected':True})\ncheck('single line cap', solve(['A\\r\\nBC',False,False,False,False,False,3,'hint'],), {'text':'A B','placeholder':'','length':3,'editable':True,'protected':False})\ncheck('zero cap placeholder', solve(['secret',True,False,False,False,False,0,'hint'],), {'text':'','placeholder':'hint','length':0,'editable':True,'protected':True})\ncheck('empty value', solve(['',False,False,False,True,False,None,'hint'],), {'text':'','placeholder':'hint','length':0,'editable':False,'protected':False})\ncheck('unicode codepoints', solve(['😀é',True,False,False,False,True,None,''],), {'text':'••','placeholder':'','length':2,'editable':True,'protected':True})\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"f80a6119d0415c2d76ec2ae33a253e3bcf3ebc8d83969b9074e56203f0f8ca45","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(data):\n    raw,protected,reveal,permission,readonly,multiline,cap,placeholder = data\n    value = raw.replace('\\r\\n','\\n')\n    if not multiline: value = value.replace('\\n',' ')\n    if cap is not None: value = value[:cap]\n    length = len(value)\n    if protected and not (reveal and permission):\n        value = ''.join('\\n' if c == '\\n' else '•' for c in value)\n    return {'text':value,'placeholder':placeholder if length == 0 else '', 'length':length,'editable':not readonly,'protected':protected}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('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})\ncheck('reveal lacks permission', solve(['A'*N,True,True,False,False,False,None,'hint'],), {'text':'•'*N,'placeholder':'','length':N,'editable':True,'protected':True})\ncheck('permission lacks reveal', solve(['A'*N,True,False,True,False,False,None,'hint'],), {'text':'•'*N,'placeholder':'','length':N,'editable':True,'protected':True})\ncheck('authorized reveal readonly', solve(['secret',True,True,True,True,False,None,'hint'],), {'text':'secret','placeholder':'','length':6,'editable':False,'protected':True})\ncheck('single line cap', solve(['A\\r\\nBC',False,False,False,False,False,3,'hint'],), {'text':'A B','placeholder':'','length':3,'editable':True,'protected':False})\ncheck('zero cap placeholder', solve(['secret',True,False,False,False,False,0,'hint'],), {'text':'','placeholder':'hint','length':0,'editable':True,'protected':True})\ncheck('empty value', solve(['',False,False,False,True,False,None,'hint'],), {'text':'','placeholder':'hint','length':0,'editable':False,'protected':False})\ncheck('unicode codepoints', solve(['😀é',True,False,False,False,True,None,''],), {'text':'••','placeholder':'','length':2,'editable':True,'protected':True})\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"s3-accessibility-protected-value-readonly-state","generated_at":"2026-09-29T14:45:39.718875+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Offline accessibility bridge model with explicit policy; useful for testing semantic API adapters independently of browser implementations.","repair":"Apply the exact contract at the readonly state decision: 'editable':not readonly","root_cause":"The readonly state decision in the protected value adapter violates its declared contract.","sha256":"2a75486d3e293900c628f297b7243e50b6ff49bb158dc254553b73791a2105ab","title":"Read-only values are exposed as editable · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.758,"exit_code":1,"observations":[{"actual":{"editable":true,"length":3,"placeholder":"","protected":true,"text":"•\n•"},"check":"redacted multiline","expected":{"editable":true,"length":3,"placeholder":"","protected":true,"text":"•\n•"},"passed":true},{"actual":{"editable":true,"length":1,"placeholder":"","protected":true,"text":"•"},"check":"reveal lacks permission","expected":{"editable":true,"length":1,"placeholder":"","protected":true,"text":"•"},"passed":true},{"actual":{"editable":true,"length":1,"placeholder":"","protected":true,"text":"•"},"check":"permission lacks reveal","expected":{"editable":true,"length":1,"placeholder":"","protected":true,"text":"•"},"passed":true},{"actual":{"editable":true,"length":6,"placeholder":"","protected":true,"text":"secret"},"check":"authorized reveal readonly","expected":{"editable":false,"length":6,"placeholder":"","protected":true,"text":"secret"},"passed":false},{"actual":{"editable":true,"length":3,"placeholder":"","protected":false,"text":"A B"},"check":"single line cap","expected":{"editable":true,"length":3,"placeholder":"","protected":false,"text":"A B"},"passed":true},{"actual":{"editable":true,"length":0,"placeholder":"hint","protected":true,"text":""},"check":"zero cap placeholder","expected":{"editable":true,"length":0,"placeholder":"hint","protected":true,"text":""},"passed":true},{"actual":{"editable":false,"length":0,"placeholder":"hint","protected":false,"text":""},"check":"empty value","expected":{"editable":false,"length":0,"placeholder":"hint","protected":false,"text":""},"passed":true},{"actual":{"editable":true,"length":2,"placeholder":"","protected":true,"text":"••"},"check":"unicode codepoints","expected":{"editable":true,"length":2,"placeholder":"","protected":true,"text":"••"},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"redacted multiline\", \"actual\": {\"text\": \"•\\n•\", \"placeholder\": \"\", \"length\": 3, \"editable\": true, \"protected\": true}, \"expected\": {\"text\": \"•\\n•\", \"placeholder\": \"\", \"length\": 3, \"editable\": true, \"protected\": true}, \"passed\": true}, {\"check\": \"reveal lacks permission\", \"actual\": {\"text\": \"•\", \"placeholder\": \"\", \"length\": 1, \"editable\": true, \"protected\": true}, \"expected\": {\"text\": \"•\", \"placeholder\": \"\", \"length\": 1, \"editable\": true, \"protected\": true}, \"passed\": true}, {\"check\": \"permission lacks reveal\", \"actual\": {\"text\": \"•\", \"placeholder\": \"\", \"length\": 1, \"editable\": true, \"protected\": true}, \"expected\": {\"text\": \"•\", \"placeholder\": \"\", \"length\": 1, \"editable\": true, \"protected\": true}, \"passed\": true}, {\"check\": \"authorized reveal readonly\", \"actual\": {\"text\": \"secret\", \"placeholder\": \"\", \"length\": 6, \"editable\": true, \"protected\": true}, \"expected\": {\"text\": \"secret\", \"placeholder\": \"\", \"length\": 6, \"editable\": false, \"protected\": true}, \"passed\": false}, {\"check\": \"single line cap\", \"actual\": {\"text\": \"A B\", \"placeholder\": \"\", \"length\": 3, \"editable\": true, \"protected\": false}, \"expected\": {\"text\": \"A B\", \"placeholder\": \"\", \"length\": 3, \"editable\": true, \"protected\": false}, \"passed\": true}, {\"check\": \"zero cap placeholder\", \"actual\": {\"text\": \"\", \"placeholder\": \"hint\", \"length\": 0, \"editable\": true, \"protected\": true}, \"expected\": {\"text\": \"\", \"placeholder\": \"hint\", \"length\": 0, \"editable\": true, \"protected\": true}, \"passed\": true}, {\"check\": \"empty value\", \"actual\": {\"text\": \"\", \"placeholder\": \"hint\", \"length\": 0, \"editable\": false, \"protected\": false}, \"expected\": {\"text\": \"\", \"placeholder\": \"hint\", \"length\": 0, \"editable\": false, \"protected\": false}, \"passed\": true}, {\"check\": \"unicode codepoints\", \"actual\": {\"text\": \"••\", \"placeholder\": \"\", \"length\": 2, \"editable\": true, \"protected\": true}, \"expected\": {\"text\": \"••\", \"placeholder\": \"\", \"length\": 2, \"editable\": true, \"protected\": true}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.15,"exit_code":1,"observations":[{"actual":{"editable":true,"length":3,"placeholder":"","protected":true,"text":"•\n•"},"check":"redacted multiline","expected":{"editable":true,"length":3,"placeholder":"","protected":true,"text":"•\n•"},"passed":true},{"actual":{"editable":true,"length":1,"placeholder":"","protected":true,"text":"•"},"check":"reveal lacks permission","expected":{"editable":true,"length":1,"placeholder":"","protected":true,"text":"•"},"passed":true},{"actual":{"editable":true,"length":1,"placeholder":"","protected":true,"text":"•"},"check":"permission lacks reveal","expected":{"editable":true,"length":1,"placeholder":"","protected":true,"text":"•"},"passed":true},{"actual":{"editable":true,"length":6,"placeholder":"","protected":true,"text":"secret"},"check":"authorized reveal readonly","expected":{"editable":false,"length":6,"placeholder":"","protected":true,"text":"secret"},"passed":false},{"actual":{"editable":true,"length":3,"placeholder":"","protected":false,"text":"A B"},"check":"single line cap","expected":{"editable":true,"length":3,"placeholder":"","protected":false,"text":"A B"},"passed":true},{"actual":{"editable":true,"length":0,"placeholder":"hint","protected":true,"text":""},"check":"zero cap placeholder","expected":{"editable":true,"length":0,"placeholder":"hint","protected":true,"text":""},"passed":true},{"actual":{"editable":true,"length":0,"placeholder":"hint","protected":false,"text":""},"check":"empty value","expected":{"editable":false,"length":0,"placeholder":"hint","protected":false,"text":""},"passed":false},{"actual":{"editable":true,"length":2,"placeholder":"","protected":true,"text":"••"},"check":"unicode codepoints","expected":{"editable":true,"length":2,"placeholder":"","protected":true,"text":"••"},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"redacted multiline\", \"actual\": {\"text\": \"•\\n•\", \"placeholder\": \"\", \"length\": 3, \"editable\": true, \"protected\": true}, \"expected\": {\"text\": \"•\\n•\", \"placeholder\": \"\", \"length\": 3, \"editable\": true, \"protected\": true}, \"passed\": true}, {\"check\": \"reveal lacks permission\", \"actual\": {\"text\": \"•\", \"placeholder\": \"\", \"length\": 1, \"editable\": true, \"protected\": true}, \"expected\": {\"text\": \"•\", \"placeholder\": \"\", \"length\": 1, \"editable\": true, \"protected\": true}, \"passed\": true}, {\"check\": \"permission lacks reveal\", \"actual\": {\"text\": \"•\", \"placeholder\": \"\", \"length\": 1, \"editable\": true, \"protected\": true}, \"expected\": {\"text\": \"•\", \"placeholder\": \"\", \"length\": 1, \"editable\": true, \"protected\": true}, \"passed\": true}, {\"check\": \"authorized reveal readonly\", \"actual\": {\"text\": \"secret\", \"placeholder\": \"\", \"length\": 6, \"editable\": true, \"protected\": true}, \"expected\": {\"text\": \"secret\", \"placeholder\": \"\", \"length\": 6, \"editable\": false, \"protected\": true}, \"passed\": false}, {\"check\": \"single line cap\", \"actual\": {\"text\": \"A B\", \"placeholder\": \"\", \"length\": 3, \"editable\": true, \"protected\": false}, \"expected\": {\"text\": \"A B\", \"placeholder\": \"\", \"length\": 3, \"editable\": true, \"protected\": false}, \"passed\": true}, {\"check\": \"zero cap placeholder\", \"actual\": {\"text\": \"\", \"placeholder\": \"hint\", \"length\": 0, \"editable\": true, \"protected\": true}, \"expected\": {\"text\": \"\", \"placeholder\": \"hint\", \"length\": 0, \"editable\": true, \"protected\": true}, \"passed\": true}, {\"check\": \"empty value\", \"actual\": {\"text\": \"\", \"placeholder\": \"hint\", \"length\": 0, \"editable\": true, \"protected\": false}, \"expected\": {\"text\": \"\", \"placeholder\": \"hint\", \"length\": 0, \"editable\": false, \"protected\": false}, \"passed\": false}, {\"check\": \"unicode codepoints\", \"actual\": {\"text\": \"••\", \"placeholder\": \"\", \"length\": 2, \"editable\": true, \"protected\": true}, \"expected\": {\"text\": \"••\", \"placeholder\": \"\", \"length\": 2, \"editable\": true, \"protected\": true}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":37.043,"exit_code":0,"observations":[{"actual":{"editable":true,"length":3,"placeholder":"","protected":true,"text":"•\n•"},"check":"redacted multiline","expected":{"editable":true,"length":3,"placeholder":"","protected":true,"text":"•\n•"},"passed":true},{"actual":{"editable":true,"length":1,"placeholder":"","protected":true,"text":"•"},"check":"reveal lacks permission","expected":{"editable":true,"length":1,"placeholder":"","protected":true,"text":"•"},"passed":true},{"actual":{"editable":true,"length":1,"placeholder":"","protected":true,"text":"•"},"check":"permission lacks reveal","expected":{"editable":true,"length":1,"placeholder":"","protected":true,"text":"•"},"passed":true},{"actual":{"editable":false,"length":6,"placeholder":"","protected":true,"text":"secret"},"check":"authorized reveal readonly","expected":{"editable":false,"length":6,"placeholder":"","protected":true,"text":"secret"},"passed":true},{"actual":{"editable":true,"length":3,"placeholder":"","protected":false,"text":"A B"},"check":"single line cap","expected":{"editable":true,"length":3,"placeholder":"","protected":false,"text":"A B"},"passed":true},{"actual":{"editable":true,"length":0,"placeholder":"hint","protected":true,"text":""},"check":"zero cap placeholder","expected":{"editable":true,"length":0,"placeholder":"hint","protected":true,"text":""},"passed":true},{"actual":{"editable":false,"length":0,"placeholder":"hint","protected":false,"text":""},"check":"empty value","expected":{"editable":false,"length":0,"placeholder":"hint","protected":false,"text":""},"passed":true},{"actual":{"editable":true,"length":2,"placeholder":"","protected":true,"text":"••"},"check":"unicode codepoints","expected":{"editable":true,"length":2,"placeholder":"","protected":true,"text":"••"},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"redacted multiline\", \"actual\": {\"text\": \"•\\n•\", \"placeholder\": \"\", \"length\": 3, \"editable\": true, \"protected\": true}, \"expected\": {\"text\": \"•\\n•\", \"placeholder\": \"\", \"length\": 3, \"editable\": true, \"protected\": true}, \"passed\": true}, {\"check\": \"reveal lacks permission\", \"actual\": {\"text\": \"•\", \"placeholder\": \"\", \"length\": 1, \"editable\": true, \"protected\": true}, \"expected\": {\"text\": \"•\", \"placeholder\": \"\", \"length\": 1, \"editable\": true, \"protected\": true}, \"passed\": true}, {\"check\": \"permission lacks reveal\", \"actual\": {\"text\": \"•\", \"placeholder\": \"\", \"length\": 1, \"editable\": true, \"protected\": true}, \"expected\": {\"text\": \"•\", \"placeholder\": \"\", \"length\": 1, \"editable\": true, \"protected\": true}, \"passed\": true}, {\"check\": \"authorized reveal readonly\", \"actual\": {\"text\": \"secret\", \"placeholder\": \"\", \"length\": 6, \"editable\": false, \"protected\": true}, \"expected\": {\"text\": \"secret\", \"placeholder\": \"\", \"length\": 6, \"editable\": false, \"protected\": true}, \"passed\": true}, {\"check\": \"single line cap\", \"actual\": {\"text\": \"A B\", \"placeholder\": \"\", \"length\": 3, \"editable\": true, \"protected\": false}, \"expected\": {\"text\": \"A B\", \"placeholder\": \"\", \"length\": 3, \"editable\": true, \"protected\": false}, \"passed\": true}, {\"check\": \"zero cap placeholder\", \"actual\": {\"text\": \"\", \"placeholder\": \"hint\", \"length\": 0, \"editable\": true, \"protected\": true}, \"expected\": {\"text\": \"\", \"placeholder\": \"hint\", \"length\": 0, \"editable\": true, \"protected\": true}, \"passed\": true}, {\"check\": \"empty value\", \"actual\": {\"text\": \"\", \"placeholder\": \"hint\", \"length\": 0, \"editable\": false, \"protected\": false}, \"expected\": {\"text\": \"\", \"placeholder\": \"hint\", \"length\": 0, \"editable\": false, \"protected\": false}, \"passed\": true}, {\"check\": \"unicode codepoints\", \"actual\": {\"text\": \"••\", \"placeholder\": \"\", \"length\": 2, \"editable\": true, \"protected\": true}, \"expected\": {\"text\": \"••\", \"placeholder\": \"\", \"length\": 2, \"editable\": true, \"protected\": true}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}