FA-21631 / Assistive announcements / Open access
Digit narration drops leading zeros · case 01
The announcement trace violates the stated speech-markup contract.
ROOT CAUSE
Fault site: for c in e[1]) is implemented as for c in str(int(e[1])))
VERIFIED REPAIR
Restore the stated transition: for c in e[1])
Unsuccessful approach: The attempted repair substitutes for c in e[1].lstrip('0')) and still violates a regression oracle.
Case contract
Bounded token renderer has independent language and emphasis stacks. Text emits [language,emphasis,text]. Push/pop scopes restore prior values; unmatched pops are ignored. Spell emits characters separated by spaces; digits uses fixed English digit words preserving zeros. Pause emits [pause,nonnegative duration] without text. Mark emits named bookmark and current spoken-text count. Break emits newline. Reset restores base en/normal without deleting output. Empty text emits nothing.
Why this case matters
Deterministic controlled model of assistive announcement delivery.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(events):
languages=['en']; emphasis=['normal']; out=[]; count=0
for e in events:
op=e[0]
if op=='language': languages.append(e[1])
elif op=='end-language':
if len(languages)>1: languages.pop()
elif op=='emphasis': emphasis.append(e[1])
elif op=='end-emphasis':
if len(emphasis)>1: emphasis.pop()
elif op=='reset': languages=['en']; emphasis=['normal']
elif op=='pause': out.append(['pause',max(0,e[1])])
elif op=='mark': out.append(['mark',e[1],count])
else:
if op=='spell': text=' '.join(e[1])
elif op=='digits': text=' '.join(['zero','one','two','three','four','five','six','seven','eight','nine'][int(c)] for c in str(int(e[1])))
elif op=='break': text='\n'
else: text=e[1]
if text: out.append([languages[-1],emphasis[-1],text]); count+=1
return [out,languages,emphasis,count]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = ["[['language','fr'],['language','de'],['text','hallo'*N],['end-language'],['text','salut'],['end-language'],['text','hello']]", "[['emphasis','strong'],['emphasis','soft'],['text','word'*N],['end-emphasis'],['text','more'],['end-emphasis']]", "[['text','x'*N],['pause',-N],['pause',N],['mark','here'],['spell','AB'],['digits','00'+str(N)]]", "[['emphasis','strong'],['text','before'*N],['reset'],['text','after']]", "[['text',''],['break'],['mark','after']]", "[['end-language'],['end-emphasis'],['digits','0']]", '[]']
expected = {1: [[[['de', 'normal', 'hallo'], ['fr', 'normal', 'salut'], ['en', 'normal', 'hello']], ['en'], ['normal'], 3], [[['en', 'soft', 'word'], ['en', 'strong', 'more']], ['en'], ['normal'], 2], [[['en', 'normal', 'x'], ['pause', 0], ['pause', 1], ['mark', 'here', 1], ['en', 'normal', 'A B'], ['en', 'normal', 'zero zero one']], ['en'], ['normal'], 3], [[['en', 'strong', 'before'], ['en', 'normal', 'after']], ['en'], ['normal'], 2], [[['en', 'normal', '\n'], ['mark', 'after', 1]], ['en'], ['normal'], 1], [[['en', 'normal', 'zero']], ['en'], ['normal'], 1], [[], ['en'], ['normal'], 0]], 2: [[[['de', 'normal', 'hallohallo'], ['fr', 'normal', 'salut'], ['en', 'normal', 'hello']], ['en'], ['normal'], 3], [[['en', 'soft', 'wordword'], ['en', 'strong', 'more']], ['en'], ['normal'], 2], [[['en', 'normal', 'xx'], ['pause', 0], ['pause', 2], ['mark', 'here', 1], ['en', 'normal', 'A B'], ['en', 'normal', 'zero zero two']], ['en'], ['normal'], 3], [[['en', 'strong', 'beforebefore'], ['en', 'normal', 'after']], ['en'], ['normal'], 2], [[['en', 'normal', '\n'], ['mark', 'after', 1]], ['en'], ['normal'], 1], [[['en', 'normal', 'zero']], ['en'], ['normal'], 1], [[], ['en'], ['normal'], 0]], 3: [[[['de', 'normal', 'hallohallohallo'], ['fr', 'normal', 'salut'], ['en', 'normal', 'hello']], ['en'], ['normal'], 3], [[['en', 'soft', 'wordwordword'], ['en', 'strong', 'more']], ['en'], ['normal'], 2], [[['en', 'normal', 'xxx'], ['pause', 0], ['pause', 3], ['mark', 'here', 1], ['en', 'normal', 'A B'], ['en', 'normal', 'zero zero three']], ['en'], ['normal'], 3], [[['en', 'strong', 'beforebeforebefore'], ['en', 'normal', 'after']], ['en'], ['normal'], 2], [[['en', 'normal', '\n'], ['mark', 'after', 1]], ['en'], ['normal'], 1], [[['en', 'normal', 'zero']], ['en'], ['normal'], 1], [[], ['en'], ['normal'], 0]], 4: [[[['de', 'normal', 'hallohallohallohallo'], ['fr', 'normal', 'salut'], ['en', 'normal', 'hello']], ['en'], ['normal'], 3], [[['en', 'soft', 'wordwordwordword'], ['en', 'strong', 'more']], ['en'], ['normal'], 2], [[['en', 'normal', 'xxxx'], ['pause', 0], ['pause', 4], ['mark', 'here', 1], ['en', 'normal', 'A B'], ['en', 'normal', 'zero zero four']], ['en'], ['normal'], 3], [[['en', 'strong', 'beforebeforebeforebefore'], ['en', 'normal', 'after']], ['en'], ['normal'], 2], [[['en', 'normal', '\n'], ['mark', 'after', 1]], ['en'], ['normal'], 1], [[['en', 'normal', 'zero']], ['en'], ['normal'], 1], [[], ['en'], ['normal'], 0]], 5: [[[['de', 'normal', 'hallohallohallohallohallo'], ['fr', 'normal', 'salut'], ['en', 'normal', 'hello']], ['en'], ['normal'], 3], [[['en', 'soft', 'wordwordwordwordword'], ['en', 'strong', 'more']], ['en'], ['normal'], 2], [[['en', 'normal', 'xxxxx'], ['pause', 0], ['pause', 5], ['mark', 'here', 1], ['en', 'normal', 'A B'], ['en', 'normal', 'zero zero five']], ['en'], ['normal'], 3], [[['en', 'strong', 'beforebeforebeforebeforebefore'], ['en', 'normal', 'after']], ['en'], ['normal'], 2], [[['en', 'normal', '\n'], ['mark', 'after', 1]], ['en'], ['normal'], 1], [[['en', 'normal', 'zero']], ['en'], ['normal'], 1], [[], ['en'], ['normal'], 0]]}[N]
for i, expression in enumerate(fixtures):
check("trace-"+str(i+1), solve(eval(expression)), expected[i])
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 |
|---|---|---|---|
| trace-1 | [[['de', 'normal', 'hallo'], ['fr', 'normal', 'salut'], ['en', 'normal', 'hello']], ['en'], ['normal'], 3] | [[['de', 'normal', 'hallo'], ['fr', 'normal', 'salut'], ['en', 'normal', 'hello']], ['en'], ['normal'], 3] | Passed |
| trace-2 | [[['en', 'soft', 'word'], ['en', 'strong', 'more']], ['en'], ['normal'], 2] | [[['en', 'soft', 'word'], ['en', 'strong', 'more']], ['en'], ['normal'], 2] | Passed |
| trace-3 | [[['en', 'normal', 'x'], ['pause', 0], ['pause', 1], ['mark', 'here', 1], ['en', 'normal', 'A B'], ['en', 'normal', 'one']], ['en'], ['normal'], 3] | [[['en', 'normal', 'x'], ['pause', 0], ['pause', 1], ['mark', 'here', 1], ['en', 'normal', 'A B'], ['en', 'normal', 'zero zero one']], ['en'], ['normal'], 3] | Failed |
| trace-4 | [[['en', 'strong', 'before'], ['en', 'normal', 'after']], ['en'], ['normal'], 2] | [[['en', 'strong', 'before'], ['en', 'normal', 'after']], ['en'], ['normal'], 2] | Passed |
| trace-5 | [[['en', 'normal', '\n'], ['mark', 'after', 1]], ['en'], ['normal'], 1] | [[['en', 'normal', '\n'], ['mark', 'after', 1]], ['en'], ['normal'], 1] | Passed |
| trace-6 | [[['en', 'normal', 'zero']], ['en'], ['normal'], 1] | [[['en', 'normal', 'zero']], ['en'], ['normal'], 1] | Passed |
| trace-7 | [[], ['en'], ['normal'], 0] | [[], ['en'], ['normal'], 0] | Passed |
SHA-256 / c79c01fba2f32726f40ce084251452d8e51e48fc2bfeba5fb5bda4d5b75201c5
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(events):
languages=['en']; emphasis=['normal']; out=[]; count=0
for e in events:
op=e[0]
if op=='language': languages.append(e[1])
elif op=='end-language':
if len(languages)>1: languages.pop()
elif op=='emphasis': emphasis.append(e[1])
elif op=='end-emphasis':
if len(emphasis)>1: emphasis.pop()
elif op=='reset': languages=['en']; emphasis=['normal']
elif op=='pause': out.append(['pause',max(0,e[1])])
elif op=='mark': out.append(['mark',e[1],count])
else:
if op=='spell': text=' '.join(e[1])
elif op=='digits': text=' '.join(['zero','one','two','three','four','five','six','seven','eight','nine'][int(c)] for c in e[1].lstrip('0'))
elif op=='break': text='\n'
else: text=e[1]
if text: out.append([languages[-1],emphasis[-1],text]); count+=1
return [out,languages,emphasis,count]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = ["[['language','fr'],['language','de'],['text','hallo'*N],['end-language'],['text','salut'],['end-language'],['text','hello']]", "[['emphasis','strong'],['emphasis','soft'],['text','word'*N],['end-emphasis'],['text','more'],['end-emphasis']]", "[['text','x'*N],['pause',-N],['pause',N],['mark','here'],['spell','AB'],['digits','00'+str(N)]]", "[['emphasis','strong'],['text','before'*N],['reset'],['text','after']]", "[['text',''],['break'],['mark','after']]", "[['end-language'],['end-emphasis'],['digits','0']]", '[]']
expected = {1: [[[['de', 'normal', 'hallo'], ['fr', 'normal', 'salut'], ['en', 'normal', 'hello']], ['en'], ['normal'], 3], [[['en', 'soft', 'word'], ['en', 'strong', 'more']], ['en'], ['normal'], 2], [[['en', 'normal', 'x'], ['pause', 0], ['pause', 1], ['mark', 'here', 1], ['en', 'normal', 'A B'], ['en', 'normal', 'zero zero one']], ['en'], ['normal'], 3], [[['en', 'strong', 'before'], ['en', 'normal', 'after']], ['en'], ['normal'], 2], [[['en', 'normal', '\n'], ['mark', 'after', 1]], ['en'], ['normal'], 1], [[['en', 'normal', 'zero']], ['en'], ['normal'], 1], [[], ['en'], ['normal'], 0]], 2: [[[['de', 'normal', 'hallohallo'], ['fr', 'normal', 'salut'], ['en', 'normal', 'hello']], ['en'], ['normal'], 3], [[['en', 'soft', 'wordword'], ['en', 'strong', 'more']], ['en'], ['normal'], 2], [[['en', 'normal', 'xx'], ['pause', 0], ['pause', 2], ['mark', 'here', 1], ['en', 'normal', 'A B'], ['en', 'normal', 'zero zero two']], ['en'], ['normal'], 3], [[['en', 'strong', 'beforebefore'], ['en', 'normal', 'after']], ['en'], ['normal'], 2], [[['en', 'normal', '\n'], ['mark', 'after', 1]], ['en'], ['normal'], 1], [[['en', 'normal', 'zero']], ['en'], ['normal'], 1], [[], ['en'], ['normal'], 0]], 3: [[[['de', 'normal', 'hallohallohallo'], ['fr', 'normal', 'salut'], ['en', 'normal', 'hello']], ['en'], ['normal'], 3], [[['en', 'soft', 'wordwordword'], ['en', 'strong', 'more']], ['en'], ['normal'], 2], [[['en', 'normal', 'xxx'], ['pause', 0], ['pause', 3], ['mark', 'here', 1], ['en', 'normal', 'A B'], ['en', 'normal', 'zero zero three']], ['en'], ['normal'], 3], [[['en', 'strong', 'beforebeforebefore'], ['en', 'normal', 'after']], ['en'], ['normal'], 2], [[['en', 'normal', '\n'], ['mark', 'after', 1]], ['en'], ['normal'], 1], [[['en', 'normal', 'zero']], ['en'], ['normal'], 1], [[], ['en'], ['normal'], 0]], 4: [[[['de', 'normal', 'hallohallohallohallo'], ['fr', 'normal', 'salut'], ['en', 'normal', 'hello']], ['en'], ['normal'], 3], [[['en', 'soft', 'wordwordwordword'], ['en', 'strong', 'more']], ['en'], ['normal'], 2], [[['en', 'normal', 'xxxx'], ['pause', 0], ['pause', 4], ['mark', 'here', 1], ['en', 'normal', 'A B'], ['en', 'normal', 'zero zero four']], ['en'], ['normal'], 3], [[['en', 'strong', 'beforebeforebeforebefore'], ['en', 'normal', 'after']], ['en'], ['normal'], 2], [[['en', 'normal', '\n'], ['mark', 'after', 1]], ['en'], ['normal'], 1], [[['en', 'normal', 'zero']], ['en'], ['normal'], 1], [[], ['en'], ['normal'], 0]], 5: [[[['de', 'normal', 'hallohallohallohallohallo'], ['fr', 'normal', 'salut'], ['en', 'normal', 'hello']], ['en'], ['normal'], 3], [[['en', 'soft', 'wordwordwordwordword'], ['en', 'strong', 'more']], ['en'], ['normal'], 2], [[['en', 'normal', 'xxxxx'], ['pause', 0], ['pause', 5], ['mark', 'here', 1], ['en', 'normal', 'A B'], ['en', 'normal', 'zero zero five']], ['en'], ['normal'], 3], [[['en', 'strong', 'beforebeforebeforebeforebefore'], ['en', 'normal', 'after']], ['en'], ['normal'], 2], [[['en', 'normal', '\n'], ['mark', 'after', 1]], ['en'], ['normal'], 1], [[['en', 'normal', 'zero']], ['en'], ['normal'], 1], [[], ['en'], ['normal'], 0]]}[N]
for i, expression in enumerate(fixtures):
check("trace-"+str(i+1), solve(eval(expression)), expected[i])
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 |
|---|---|---|---|
| trace-1 | [[['de', 'normal', 'hallo'], ['fr', 'normal', 'salut'], ['en', 'normal', 'hello']], ['en'], ['normal'], 3] | [[['de', 'normal', 'hallo'], ['fr', 'normal', 'salut'], ['en', 'normal', 'hello']], ['en'], ['normal'], 3] | Passed |
| trace-2 | [[['en', 'soft', 'word'], ['en', 'strong', 'more']], ['en'], ['normal'], 2] | [[['en', 'soft', 'word'], ['en', 'strong', 'more']], ['en'], ['normal'], 2] | Passed |
| trace-3 | [[['en', 'normal', 'x'], ['pause', 0], ['pause', 1], ['mark', 'here', 1], ['en', 'normal', 'A B'], ['en', 'normal', 'one']], ['en'], ['normal'], 3] | [[['en', 'normal', 'x'], ['pause', 0], ['pause', 1], ['mark', 'here', 1], ['en', 'normal', 'A B'], ['en', 'normal', 'zero zero one']], ['en'], ['normal'], 3] | Failed |
| trace-4 | [[['en', 'strong', 'before'], ['en', 'normal', 'after']], ['en'], ['normal'], 2] | [[['en', 'strong', 'before'], ['en', 'normal', 'after']], ['en'], ['normal'], 2] | Passed |
| trace-5 | [[['en', 'normal', '\n'], ['mark', 'after', 1]], ['en'], ['normal'], 1] | [[['en', 'normal', '\n'], ['mark', 'after', 1]], ['en'], ['normal'], 1] | Passed |
| trace-6 | [[], ['en'], ['normal'], 0] | [[['en', 'normal', 'zero']], ['en'], ['normal'], 1] | Failed |
| trace-7 | [[], ['en'], ['normal'], 0] | [[], ['en'], ['normal'], 0] | Passed |
SHA-256 / 8e7299cd6913b9a88281c8b8ec2019c95c7d151e77d99cab1042171d11b5aaf8
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(events):
languages=['en']; emphasis=['normal']; out=[]; count=0
for e in events:
op=e[0]
if op=='language': languages.append(e[1])
elif op=='end-language':
if len(languages)>1: languages.pop()
elif op=='emphasis': emphasis.append(e[1])
elif op=='end-emphasis':
if len(emphasis)>1: emphasis.pop()
elif op=='reset': languages=['en']; emphasis=['normal']
elif op=='pause': out.append(['pause',max(0,e[1])])
elif op=='mark': out.append(['mark',e[1],count])
else:
if op=='spell': text=' '.join(e[1])
elif op=='digits': text=' '.join(['zero','one','two','three','four','five','six','seven','eight','nine'][int(c)] for c in e[1])
elif op=='break': text='\n'
else: text=e[1]
if text: out.append([languages[-1],emphasis[-1],text]); count+=1
return [out,languages,emphasis,count]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = ["[['language','fr'],['language','de'],['text','hallo'*N],['end-language'],['text','salut'],['end-language'],['text','hello']]", "[['emphasis','strong'],['emphasis','soft'],['text','word'*N],['end-emphasis'],['text','more'],['end-emphasis']]", "[['text','x'*N],['pause',-N],['pause',N],['mark','here'],['spell','AB'],['digits','00'+str(N)]]", "[['emphasis','strong'],['text','before'*N],['reset'],['text','after']]", "[['text',''],['break'],['mark','after']]", "[['end-language'],['end-emphasis'],['digits','0']]", '[]']
expected = {1: [[[['de', 'normal', 'hallo'], ['fr', 'normal', 'salut'], ['en', 'normal', 'hello']], ['en'], ['normal'], 3], [[['en', 'soft', 'word'], ['en', 'strong', 'more']], ['en'], ['normal'], 2], [[['en', 'normal', 'x'], ['pause', 0], ['pause', 1], ['mark', 'here', 1], ['en', 'normal', 'A B'], ['en', 'normal', 'zero zero one']], ['en'], ['normal'], 3], [[['en', 'strong', 'before'], ['en', 'normal', 'after']], ['en'], ['normal'], 2], [[['en', 'normal', '\n'], ['mark', 'after', 1]], ['en'], ['normal'], 1], [[['en', 'normal', 'zero']], ['en'], ['normal'], 1], [[], ['en'], ['normal'], 0]], 2: [[[['de', 'normal', 'hallohallo'], ['fr', 'normal', 'salut'], ['en', 'normal', 'hello']], ['en'], ['normal'], 3], [[['en', 'soft', 'wordword'], ['en', 'strong', 'more']], ['en'], ['normal'], 2], [[['en', 'normal', 'xx'], ['pause', 0], ['pause', 2], ['mark', 'here', 1], ['en', 'normal', 'A B'], ['en', 'normal', 'zero zero two']], ['en'], ['normal'], 3], [[['en', 'strong', 'beforebefore'], ['en', 'normal', 'after']], ['en'], ['normal'], 2], [[['en', 'normal', '\n'], ['mark', 'after', 1]], ['en'], ['normal'], 1], [[['en', 'normal', 'zero']], ['en'], ['normal'], 1], [[], ['en'], ['normal'], 0]], 3: [[[['de', 'normal', 'hallohallohallo'], ['fr', 'normal', 'salut'], ['en', 'normal', 'hello']], ['en'], ['normal'], 3], [[['en', 'soft', 'wordwordword'], ['en', 'strong', 'more']], ['en'], ['normal'], 2], [[['en', 'normal', 'xxx'], ['pause', 0], ['pause', 3], ['mark', 'here', 1], ['en', 'normal', 'A B'], ['en', 'normal', 'zero zero three']], ['en'], ['normal'], 3], [[['en', 'strong', 'beforebeforebefore'], ['en', 'normal', 'after']], ['en'], ['normal'], 2], [[['en', 'normal', '\n'], ['mark', 'after', 1]], ['en'], ['normal'], 1], [[['en', 'normal', 'zero']], ['en'], ['normal'], 1], [[], ['en'], ['normal'], 0]], 4: [[[['de', 'normal', 'hallohallohallohallo'], ['fr', 'normal', 'salut'], ['en', 'normal', 'hello']], ['en'], ['normal'], 3], [[['en', 'soft', 'wordwordwordword'], ['en', 'strong', 'more']], ['en'], ['normal'], 2], [[['en', 'normal', 'xxxx'], ['pause', 0], ['pause', 4], ['mark', 'here', 1], ['en', 'normal', 'A B'], ['en', 'normal', 'zero zero four']], ['en'], ['normal'], 3], [[['en', 'strong', 'beforebeforebeforebefore'], ['en', 'normal', 'after']], ['en'], ['normal'], 2], [[['en', 'normal', '\n'], ['mark', 'after', 1]], ['en'], ['normal'], 1], [[['en', 'normal', 'zero']], ['en'], ['normal'], 1], [[], ['en'], ['normal'], 0]], 5: [[[['de', 'normal', 'hallohallohallohallohallo'], ['fr', 'normal', 'salut'], ['en', 'normal', 'hello']], ['en'], ['normal'], 3], [[['en', 'soft', 'wordwordwordwordword'], ['en', 'strong', 'more']], ['en'], ['normal'], 2], [[['en', 'normal', 'xxxxx'], ['pause', 0], ['pause', 5], ['mark', 'here', 1], ['en', 'normal', 'A B'], ['en', 'normal', 'zero zero five']], ['en'], ['normal'], 3], [[['en', 'strong', 'beforebeforebeforebeforebefore'], ['en', 'normal', 'after']], ['en'], ['normal'], 2], [[['en', 'normal', '\n'], ['mark', 'after', 1]], ['en'], ['normal'], 1], [[['en', 'normal', 'zero']], ['en'], ['normal'], 1], [[], ['en'], ['normal'], 0]]}[N]
for i, expression in enumerate(fixtures):
check("trace-"+str(i+1), solve(eval(expression)), expected[i])
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 |
|---|---|---|---|
| trace-1 | [[['de', 'normal', 'hallo'], ['fr', 'normal', 'salut'], ['en', 'normal', 'hello']], ['en'], ['normal'], 3] | [[['de', 'normal', 'hallo'], ['fr', 'normal', 'salut'], ['en', 'normal', 'hello']], ['en'], ['normal'], 3] | Passed |
| trace-2 | [[['en', 'soft', 'word'], ['en', 'strong', 'more']], ['en'], ['normal'], 2] | [[['en', 'soft', 'word'], ['en', 'strong', 'more']], ['en'], ['normal'], 2] | Passed |
| trace-3 | [[['en', 'normal', 'x'], ['pause', 0], ['pause', 1], ['mark', 'here', 1], ['en', 'normal', 'A B'], ['en', 'normal', 'zero zero one']], ['en'], ['normal'], 3] | [[['en', 'normal', 'x'], ['pause', 0], ['pause', 1], ['mark', 'here', 1], ['en', 'normal', 'A B'], ['en', 'normal', 'zero zero one']], ['en'], ['normal'], 3] | Passed |
| trace-4 | [[['en', 'strong', 'before'], ['en', 'normal', 'after']], ['en'], ['normal'], 2] | [[['en', 'strong', 'before'], ['en', 'normal', 'after']], ['en'], ['normal'], 2] | Passed |
| trace-5 | [[['en', 'normal', '\n'], ['mark', 'after', 1]], ['en'], ['normal'], 1] | [[['en', 'normal', '\n'], ['mark', 'after', 1]], ['en'], ['normal'], 1] | Passed |
| trace-6 | [[['en', 'normal', 'zero']], ['en'], ['normal'], 1] | [[['en', 'normal', 'zero']], ['en'], ['normal'], 1] | Passed |
| trace-7 | [[], ['en'], ['normal'], 0] | [[], ['en'], ['normal'], 0] | Passed |
SHA-256 / 689ecfea67653544fd886594e53d64a21552486326d6d9f2515c6414718315da
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:40:30.651695+00:00.
Case digest / fcc7ff18f35e6ab66eccc748770dca8651e05166172190036f408d9d45ebf9af