{"abstract":"The announcement trace violates the stated speech-envelope contract.","category":"Assistive announcements","checks":6,"contract":"Each input row is [text,role,ordinal,total,unit,negated,language,private,label,detail]. Compose a speech envelope: redact private values, prefix label, apply negation, append units, prepend ordinal of known positive total, append role, append nonempty detail once, preserve language fallback en, and omit empty nonprivate values. Return [language,spoken] pairs. This is an explicit product grammar, not natural language localization.","evaluation_group":"s3-announcement-speech-envelope","failed_approach":"The attempted repair substitutes language='en' and still violates a regression oracle.","family":"s3-assistive-announcements-speech-envelope-language","id":"FA-20681","implementations":{"attempt":{"sha256":"bf56f8c934508a17b0f4236f316de70b92fe43a7bce4cca186d7cea037857ca1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    out=[]\n    for text,role,pos,total,unit,negative,lang,private,label,detail in events:\n        if not text and not private: continue\n        value='hidden' if private else text\n        if label: value=label+': '+value\n        if negative: value='not '+value\n        if unit and not private: value+=' '+unit\n        if total>0: value=str(pos)+' of '+str(total)+': '+value\n        if role: value+=' ('+role+')'\n        if detail and detail!=text and not private: value+='; '+detail\n        language='en'\n        out.append([language,value])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [\"[['value'*N,'status',2,N+3,'items',True,'fr',False,'Count','detail']]\", \"[['secret'*N,'status',1,3,'kg',False,'en',True,'Weight','private detail']]\", \"[['','',0,0,'',False,'',False,'Label',''],['','',0,0,'',False,'',True,'','']]\", \"[['same'*N,'',0,-1,'',False,'de',False,'','same'*N]]\", \"[['  x  '*N,'',0,0,'',False,'',False,'','']]\", '[]']\nexpected = {1: [[['fr', '2 of 4: not Count: value items (status); detail']], [['en', '1 of 3: Weight: hidden (status)']], [['en', 'hidden']], [['de', 'same']], [['en', '  x  ']], []], 2: [[['fr', '2 of 5: not Count: valuevalue items (status); detail']], [['en', '1 of 3: Weight: hidden (status)']], [['en', 'hidden']], [['de', 'samesame']], [['en', '  x    x  ']], []], 3: [[['fr', '2 of 6: not Count: valuevaluevalue items (status); detail']], [['en', '1 of 3: Weight: hidden (status)']], [['en', 'hidden']], [['de', 'samesamesame']], [['en', '  x    x    x  ']], []], 4: [[['fr', '2 of 7: not Count: valuevaluevaluevalue items (status); detail']], [['en', '1 of 3: Weight: hidden (status)']], [['en', 'hidden']], [['de', 'samesamesamesame']], [['en', '  x    x    x    x  ']], []], 5: [[['fr', '2 of 8: not Count: valuevaluevaluevaluevalue items (status); detail']], [['en', '1 of 3: Weight: hidden (status)']], [['en', 'hidden']], [['de', 'samesamesamesamesame']], [['en', '  x    x    x    x    x  ']], []]}[N]\nfor i, expression in enumerate(fixtures):\n    check(\"trace-\"+str(i+1), solve(eval(expression)), expected[i])\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":"0dd73e77fcf9de066f93e4e6f8d4df9578415cf4cff8bb8b2d4b17d87a7a28c2","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    out=[]\n    for text,role,pos,total,unit,negative,lang,private,label,detail in events:\n        if not text and not private: continue\n        value='hidden' if private else text\n        if label: value=label+': '+value\n        if negative: value='not '+value\n        if unit and not private: value+=' '+unit\n        if total>0: value=str(pos)+' of '+str(total)+': '+value\n        if role: value+=' ('+role+')'\n        if detail and detail!=text and not private: value+='; '+detail\n        language=lang\n        out.append([language,value])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [\"[['value'*N,'status',2,N+3,'items',True,'fr',False,'Count','detail']]\", \"[['secret'*N,'status',1,3,'kg',False,'en',True,'Weight','private detail']]\", \"[['','',0,0,'',False,'',False,'Label',''],['','',0,0,'',False,'',True,'','']]\", \"[['same'*N,'',0,-1,'',False,'de',False,'','same'*N]]\", \"[['  x  '*N,'',0,0,'',False,'',False,'','']]\", '[]']\nexpected = {1: [[['fr', '2 of 4: not Count: value items (status); detail']], [['en', '1 of 3: Weight: hidden (status)']], [['en', 'hidden']], [['de', 'same']], [['en', '  x  ']], []], 2: [[['fr', '2 of 5: not Count: valuevalue items (status); detail']], [['en', '1 of 3: Weight: hidden (status)']], [['en', 'hidden']], [['de', 'samesame']], [['en', '  x    x  ']], []], 3: [[['fr', '2 of 6: not Count: valuevaluevalue items (status); detail']], [['en', '1 of 3: Weight: hidden (status)']], [['en', 'hidden']], [['de', 'samesamesame']], [['en', '  x    x    x  ']], []], 4: [[['fr', '2 of 7: not Count: valuevaluevaluevalue items (status); detail']], [['en', '1 of 3: Weight: hidden (status)']], [['en', 'hidden']], [['de', 'samesamesamesame']], [['en', '  x    x    x    x  ']], []], 5: [[['fr', '2 of 8: not Count: valuevaluevaluevaluevalue items (status); detail']], [['en', '1 of 3: Weight: hidden (status)']], [['en', 'hidden']], [['de', 'samesamesamesamesame']], [['en', '  x    x    x    x    x  ']], []]}[N]\nfor i, expression in enumerate(fixtures):\n    check(\"trace-\"+str(i+1), solve(eval(expression)), expected[i])\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":"a5f27ef3b1e258d4ca28c3afe1b0b8229eaa53eb14fe09c3f3b814beb5ef11d2","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    out=[]\n    for text,role,pos,total,unit,negative,lang,private,label,detail in events:\n        if not text and not private: continue\n        value='hidden' if private else text\n        if label: value=label+': '+value\n        if negative: value='not '+value\n        if unit and not private: value+=' '+unit\n        if total>0: value=str(pos)+' of '+str(total)+': '+value\n        if role: value+=' ('+role+')'\n        if detail and detail!=text and not private: value+='; '+detail\n        language=lang if lang else 'en'\n        out.append([language,value])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [\"[['value'*N,'status',2,N+3,'items',True,'fr',False,'Count','detail']]\", \"[['secret'*N,'status',1,3,'kg',False,'en',True,'Weight','private detail']]\", \"[['','',0,0,'',False,'',False,'Label',''],['','',0,0,'',False,'',True,'','']]\", \"[['same'*N,'',0,-1,'',False,'de',False,'','same'*N]]\", \"[['  x  '*N,'',0,0,'',False,'',False,'','']]\", '[]']\nexpected = {1: [[['fr', '2 of 4: not Count: value items (status); detail']], [['en', '1 of 3: Weight: hidden (status)']], [['en', 'hidden']], [['de', 'same']], [['en', '  x  ']], []], 2: [[['fr', '2 of 5: not Count: valuevalue items (status); detail']], [['en', '1 of 3: Weight: hidden (status)']], [['en', 'hidden']], [['de', 'samesame']], [['en', '  x    x  ']], []], 3: [[['fr', '2 of 6: not Count: valuevaluevalue items (status); detail']], [['en', '1 of 3: Weight: hidden (status)']], [['en', 'hidden']], [['de', 'samesamesame']], [['en', '  x    x    x  ']], []], 4: [[['fr', '2 of 7: not Count: valuevaluevaluevalue items (status); detail']], [['en', '1 of 3: Weight: hidden (status)']], [['en', 'hidden']], [['de', 'samesamesamesame']], [['en', '  x    x    x    x  ']], []], 5: [[['fr', '2 of 8: not Count: valuevaluevaluevaluevalue items (status); detail']], [['en', '1 of 3: Weight: hidden (status)']], [['en', 'hidden']], [['de', 'samesamesamesamesame']], [['en', '  x    x    x    x    x  ']], []]}[N]\nfor i, expression in enumerate(fixtures):\n    check(\"trace-\"+str(i+1), solve(eval(expression)), expected[i])\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 bounded policy, not a browser, speech engine, platform API, or standards conformance claim. 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-assistive-announcements-speech-envelope-language","generated_at":"2026-09-29T14:40:21.265860+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Deterministic controlled model of assistive announcement delivery.","repair":"Restore the stated transition: language=lang if lang else 'en'","root_cause":"Fault site: language=lang if lang else 'en' is implemented as language=lang","sha256":"e8671e16ed50cd6b163988acbe9563153e55348c59b21dbaccd280acf9752bb8","title":"Missing speech language is sent as an empty code · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.378,"exit_code":1,"observations":[{"actual":[["en","2 of 4: not Count: value items (status); detail"]],"check":"trace-1","expected":[["fr","2 of 4: not Count: value items (status); detail"]],"passed":false},{"actual":[["en","1 of 3: Weight: hidden (status)"]],"check":"trace-2","expected":[["en","1 of 3: Weight: hidden (status)"]],"passed":true},{"actual":[["en","hidden"]],"check":"trace-3","expected":[["en","hidden"]],"passed":true},{"actual":[["en","same"]],"check":"trace-4","expected":[["de","same"]],"passed":false},{"actual":[["en","  x  "]],"check":"trace-5","expected":[["en","  x  "]],"passed":true},{"actual":[],"check":"trace-6","expected":[],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"trace-1\", \"actual\": [[\"en\", \"2 of 4: not Count: value items (status); detail\"]], \"expected\": [[\"fr\", \"2 of 4: not Count: value items (status); detail\"]], \"passed\": false}, {\"check\": \"trace-2\", \"actual\": [[\"en\", \"1 of 3: Weight: hidden (status)\"]], \"expected\": [[\"en\", \"1 of 3: Weight: hidden (status)\"]], \"passed\": true}, {\"check\": \"trace-3\", \"actual\": [[\"en\", \"hidden\"]], \"expected\": [[\"en\", \"hidden\"]], \"passed\": true}, {\"check\": \"trace-4\", \"actual\": [[\"en\", \"same\"]], \"expected\": [[\"de\", \"same\"]], \"passed\": false}, {\"check\": \"trace-5\", \"actual\": [[\"en\", \"  x  \"]], \"expected\": [[\"en\", \"  x  \"]], \"passed\": true}, {\"check\": \"trace-6\", \"actual\": [], \"expected\": [], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":47.857,"exit_code":1,"observations":[{"actual":[["fr","2 of 4: not Count: value items (status); detail"]],"check":"trace-1","expected":[["fr","2 of 4: not Count: value items (status); detail"]],"passed":true},{"actual":[["en","1 of 3: Weight: hidden (status)"]],"check":"trace-2","expected":[["en","1 of 3: Weight: hidden (status)"]],"passed":true},{"actual":[["","hidden"]],"check":"trace-3","expected":[["en","hidden"]],"passed":false},{"actual":[["de","same"]],"check":"trace-4","expected":[["de","same"]],"passed":true},{"actual":[["","  x  "]],"check":"trace-5","expected":[["en","  x  "]],"passed":false},{"actual":[],"check":"trace-6","expected":[],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"trace-1\", \"actual\": [[\"fr\", \"2 of 4: not Count: value items (status); detail\"]], \"expected\": [[\"fr\", \"2 of 4: not Count: value items (status); detail\"]], \"passed\": true}, {\"check\": \"trace-2\", \"actual\": [[\"en\", \"1 of 3: Weight: hidden (status)\"]], \"expected\": [[\"en\", \"1 of 3: Weight: hidden (status)\"]], \"passed\": true}, {\"check\": \"trace-3\", \"actual\": [[\"\", \"hidden\"]], \"expected\": [[\"en\", \"hidden\"]], \"passed\": false}, {\"check\": \"trace-4\", \"actual\": [[\"de\", \"same\"]], \"expected\": [[\"de\", \"same\"]], \"passed\": true}, {\"check\": \"trace-5\", \"actual\": [[\"\", \"  x  \"]], \"expected\": [[\"en\", \"  x  \"]], \"passed\": false}, {\"check\": \"trace-6\", \"actual\": [], \"expected\": [], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.559,"exit_code":0,"observations":[{"actual":[["fr","2 of 4: not Count: value items (status); detail"]],"check":"trace-1","expected":[["fr","2 of 4: not Count: value items (status); detail"]],"passed":true},{"actual":[["en","1 of 3: Weight: hidden (status)"]],"check":"trace-2","expected":[["en","1 of 3: Weight: hidden (status)"]],"passed":true},{"actual":[["en","hidden"]],"check":"trace-3","expected":[["en","hidden"]],"passed":true},{"actual":[["de","same"]],"check":"trace-4","expected":[["de","same"]],"passed":true},{"actual":[["en","  x  "]],"check":"trace-5","expected":[["en","  x  "]],"passed":true},{"actual":[],"check":"trace-6","expected":[],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"trace-1\", \"actual\": [[\"fr\", \"2 of 4: not Count: value items (status); detail\"]], \"expected\": [[\"fr\", \"2 of 4: not Count: value items (status); detail\"]], \"passed\": true}, {\"check\": \"trace-2\", \"actual\": [[\"en\", \"1 of 3: Weight: hidden (status)\"]], \"expected\": [[\"en\", \"1 of 3: Weight: hidden (status)\"]], \"passed\": true}, {\"check\": \"trace-3\", \"actual\": [[\"en\", \"hidden\"]], \"expected\": [[\"en\", \"hidden\"]], \"passed\": true}, {\"check\": \"trace-4\", \"actual\": [[\"de\", \"same\"]], \"expected\": [[\"de\", \"same\"]], \"passed\": true}, {\"check\": \"trace-5\", \"actual\": [[\"en\", \"  x  \"]], \"expected\": [[\"en\", \"  x  \"]], \"passed\": true}, {\"check\": \"trace-6\", \"actual\": [], \"expected\": [], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}