FA-21301 / Assistive announcements / Open access
Clearing one form removes other forms errors · case 01
The announcement trace violates the stated error-announcement-digest contract.
ROOT CAUSE
Fault site: elif e[0]=='clear': errors={k:v for k,v in errors.items() if k[0]!=e[1]} is implemented as elif e[0]=='clear': errors.clear()
VERIFIED REPAIR
Restore the stated transition: elif e[0]=='clear': errors={k:v for k,v in errors.items() if k[0]!=e[1]}
Unsuccessful approach: The attempted repair substitutes elif e[0]=='clear': errors={k:v for k,v in errors.items() if k[1]!=e[1]} and still violates a regression oracle.
Case contract
Errors are keyed by [form,field,code] and retain first-seen ordering. Add replaces text for same key. Resolve deletes exact key. Rename-form transfers its keys preserving per-key text. Digest for a form emits first error text plus remaining count, or all-clear if none; consecutive identical digests for the same form are suppressed. Invalidate clears only that form digest cache. Clear-form removes its errors. Return digest output and ordered errors.
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):
errors={}; last={}; out=[]
for e in events:
if e[0]=='add': errors[(e[1],e[2],e[3])]=e[4]
elif e[0]=='resolve': errors.pop((e[1],e[2],e[3]),None)
elif e[0]=='clear': errors.clear()
elif e[0]=='rename':
errors={(e[2] if k[0]==e[1] else k[0],k[1],k[2]):v for k,v in errors.items()}
last.pop(e[1],None); last.pop(e[2],None)
elif e[0]=='invalidate': last.pop(e[1],None)
elif e[0]=='digest':
rows=[v for k,v in errors.items() if k[0]==e[1]]
text=rows[0]+'; '+str(len(rows)-1)+' more' if rows else 'all clear'
if last.get(e[1])==text: continue
out.append([e[1],text])
last[e[1]]=text
return [out,[[*k,v] for k,v in errors.items()]]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = ["[['add','f','x','required','missing'*N],['add','f','x','format','bad'],['digest','f'],['add','f','x','required','updated'],['digest','f'],['digest','f'],['resolve','f','x','required'],['digest','f']]", "[['add','f','x','bad','same'*N],['add','g','y','bad','same'*N],['digest','f'],['digest','g'],['invalidate','f'],['digest','g'],['digest','f']]", "[['add','f','x','bad','one'*N],['add','g','y','bad','two'],['clear','f']]", "[['digest','f'],['digest','g'],['rename','f','g'],['digest','g'],['digest','f']]", "[['add','f','x','bad','one'*N],['add','h','y','bad','two'],['rename','f','g'],['digest','g']]", "[['digest','empty'],['digest','empty']]", '[]']
expected = {1: [[[['f', 'missing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'same; 0 more'], ['g', 'same; 0 more'], ['f', 'same; 0 more']], [['f', 'x', 'bad', 'same'], ['g', 'y', 'bad', 'same']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'one; 0 more']], [['g', 'x', 'bad', 'one'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 2: [[[['f', 'missingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesame; 0 more'], ['g', 'samesame; 0 more'], ['f', 'samesame; 0 more']], [['f', 'x', 'bad', 'samesame'], ['g', 'y', 'bad', 'samesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneone; 0 more']], [['g', 'x', 'bad', 'oneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 3: [[[['f', 'missingmissingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesamesame; 0 more'], ['g', 'samesamesame; 0 more'], ['f', 'samesamesame; 0 more']], [['f', 'x', 'bad', 'samesamesame'], ['g', 'y', 'bad', 'samesamesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneoneone; 0 more']], [['g', 'x', 'bad', 'oneoneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 4: [[[['f', 'missingmissingmissingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesamesamesame; 0 more'], ['g', 'samesamesamesame; 0 more'], ['f', 'samesamesamesame; 0 more']], [['f', 'x', 'bad', 'samesamesamesame'], ['g', 'y', 'bad', 'samesamesamesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneoneoneone; 0 more']], [['g', 'x', 'bad', 'oneoneoneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 5: [[[['f', 'missingmissingmissingmissingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesamesamesamesame; 0 more'], ['g', 'samesamesamesamesame; 0 more'], ['f', 'samesamesamesamesame; 0 more']], [['f', 'x', 'bad', 'samesamesamesamesame'], ['g', 'y', 'bad', 'samesamesamesamesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneoneoneoneone; 0 more']], [['g', 'x', 'bad', 'oneoneoneoneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]]}[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 | [[['f', 'missing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]] | [[['f', 'missing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]] | Passed |
| trace-2 | [[['f', 'same; 0 more'], ['g', 'same; 0 more'], ['f', 'same; 0 more']], [['f', 'x', 'bad', 'same'], ['g', 'y', 'bad', 'same']]] | [[['f', 'same; 0 more'], ['g', 'same; 0 more'], ['f', 'same; 0 more']], [['f', 'x', 'bad', 'same'], ['g', 'y', 'bad', 'same']]] | Passed |
| trace-3 | [[], []] | [[], [['g', 'y', 'bad', 'two']]] | Failed |
| trace-4 | [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []] | [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []] | Passed |
| trace-5 | [[['g', 'one; 0 more']], [['g', 'x', 'bad', 'one'], ['h', 'y', 'bad', 'two']]] | [[['g', 'one; 0 more']], [['g', 'x', 'bad', 'one'], ['h', 'y', 'bad', 'two']]] | Passed |
| trace-6 | [[['empty', 'all clear']], []] | [[['empty', 'all clear']], []] | Passed |
| trace-7 | [[], []] | [[], []] | Passed |
SHA-256 / c0f8630c7e7b59c5c2e294b247069ed3a2c5b19e59f2f355756762835e3e40d9
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(events):
errors={}; last={}; out=[]
for e in events:
if e[0]=='add': errors[(e[1],e[2],e[3])]=e[4]
elif e[0]=='resolve': errors.pop((e[1],e[2],e[3]),None)
elif e[0]=='clear': errors={k:v for k,v in errors.items() if k[1]!=e[1]}
elif e[0]=='rename':
errors={(e[2] if k[0]==e[1] else k[0],k[1],k[2]):v for k,v in errors.items()}
last.pop(e[1],None); last.pop(e[2],None)
elif e[0]=='invalidate': last.pop(e[1],None)
elif e[0]=='digest':
rows=[v for k,v in errors.items() if k[0]==e[1]]
text=rows[0]+'; '+str(len(rows)-1)+' more' if rows else 'all clear'
if last.get(e[1])==text: continue
out.append([e[1],text])
last[e[1]]=text
return [out,[[*k,v] for k,v in errors.items()]]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = ["[['add','f','x','required','missing'*N],['add','f','x','format','bad'],['digest','f'],['add','f','x','required','updated'],['digest','f'],['digest','f'],['resolve','f','x','required'],['digest','f']]", "[['add','f','x','bad','same'*N],['add','g','y','bad','same'*N],['digest','f'],['digest','g'],['invalidate','f'],['digest','g'],['digest','f']]", "[['add','f','x','bad','one'*N],['add','g','y','bad','two'],['clear','f']]", "[['digest','f'],['digest','g'],['rename','f','g'],['digest','g'],['digest','f']]", "[['add','f','x','bad','one'*N],['add','h','y','bad','two'],['rename','f','g'],['digest','g']]", "[['digest','empty'],['digest','empty']]", '[]']
expected = {1: [[[['f', 'missing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'same; 0 more'], ['g', 'same; 0 more'], ['f', 'same; 0 more']], [['f', 'x', 'bad', 'same'], ['g', 'y', 'bad', 'same']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'one; 0 more']], [['g', 'x', 'bad', 'one'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 2: [[[['f', 'missingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesame; 0 more'], ['g', 'samesame; 0 more'], ['f', 'samesame; 0 more']], [['f', 'x', 'bad', 'samesame'], ['g', 'y', 'bad', 'samesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneone; 0 more']], [['g', 'x', 'bad', 'oneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 3: [[[['f', 'missingmissingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesamesame; 0 more'], ['g', 'samesamesame; 0 more'], ['f', 'samesamesame; 0 more']], [['f', 'x', 'bad', 'samesamesame'], ['g', 'y', 'bad', 'samesamesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneoneone; 0 more']], [['g', 'x', 'bad', 'oneoneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 4: [[[['f', 'missingmissingmissingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesamesamesame; 0 more'], ['g', 'samesamesamesame; 0 more'], ['f', 'samesamesamesame; 0 more']], [['f', 'x', 'bad', 'samesamesamesame'], ['g', 'y', 'bad', 'samesamesamesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneoneoneone; 0 more']], [['g', 'x', 'bad', 'oneoneoneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 5: [[[['f', 'missingmissingmissingmissingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesamesamesamesame; 0 more'], ['g', 'samesamesamesamesame; 0 more'], ['f', 'samesamesamesamesame; 0 more']], [['f', 'x', 'bad', 'samesamesamesamesame'], ['g', 'y', 'bad', 'samesamesamesamesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneoneoneoneone; 0 more']], [['g', 'x', 'bad', 'oneoneoneoneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]]}[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 | [[['f', 'missing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]] | [[['f', 'missing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]] | Passed |
| trace-2 | [[['f', 'same; 0 more'], ['g', 'same; 0 more'], ['f', 'same; 0 more']], [['f', 'x', 'bad', 'same'], ['g', 'y', 'bad', 'same']]] | [[['f', 'same; 0 more'], ['g', 'same; 0 more'], ['f', 'same; 0 more']], [['f', 'x', 'bad', 'same'], ['g', 'y', 'bad', 'same']]] | Passed |
| trace-3 | [[], [['f', 'x', 'bad', 'one'], ['g', 'y', 'bad', 'two']]] | [[], [['g', 'y', 'bad', 'two']]] | Failed |
| trace-4 | [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []] | [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []] | Passed |
| trace-5 | [[['g', 'one; 0 more']], [['g', 'x', 'bad', 'one'], ['h', 'y', 'bad', 'two']]] | [[['g', 'one; 0 more']], [['g', 'x', 'bad', 'one'], ['h', 'y', 'bad', 'two']]] | Passed |
| trace-6 | [[['empty', 'all clear']], []] | [[['empty', 'all clear']], []] | Passed |
| trace-7 | [[], []] | [[], []] | Passed |
SHA-256 / fad068a7237a7e7d827ed4d180bdf0596376379ac94cce25690bd9f336341982
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(events):
errors={}; last={}; out=[]
for e in events:
if e[0]=='add': errors[(e[1],e[2],e[3])]=e[4]
elif e[0]=='resolve': errors.pop((e[1],e[2],e[3]),None)
elif e[0]=='clear': errors={k:v for k,v in errors.items() if k[0]!=e[1]}
elif e[0]=='rename':
errors={(e[2] if k[0]==e[1] else k[0],k[1],k[2]):v for k,v in errors.items()}
last.pop(e[1],None); last.pop(e[2],None)
elif e[0]=='invalidate': last.pop(e[1],None)
elif e[0]=='digest':
rows=[v for k,v in errors.items() if k[0]==e[1]]
text=rows[0]+'; '+str(len(rows)-1)+' more' if rows else 'all clear'
if last.get(e[1])==text: continue
out.append([e[1],text])
last[e[1]]=text
return [out,[[*k,v] for k,v in errors.items()]]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = ["[['add','f','x','required','missing'*N],['add','f','x','format','bad'],['digest','f'],['add','f','x','required','updated'],['digest','f'],['digest','f'],['resolve','f','x','required'],['digest','f']]", "[['add','f','x','bad','same'*N],['add','g','y','bad','same'*N],['digest','f'],['digest','g'],['invalidate','f'],['digest','g'],['digest','f']]", "[['add','f','x','bad','one'*N],['add','g','y','bad','two'],['clear','f']]", "[['digest','f'],['digest','g'],['rename','f','g'],['digest','g'],['digest','f']]", "[['add','f','x','bad','one'*N],['add','h','y','bad','two'],['rename','f','g'],['digest','g']]", "[['digest','empty'],['digest','empty']]", '[]']
expected = {1: [[[['f', 'missing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'same; 0 more'], ['g', 'same; 0 more'], ['f', 'same; 0 more']], [['f', 'x', 'bad', 'same'], ['g', 'y', 'bad', 'same']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'one; 0 more']], [['g', 'x', 'bad', 'one'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 2: [[[['f', 'missingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesame; 0 more'], ['g', 'samesame; 0 more'], ['f', 'samesame; 0 more']], [['f', 'x', 'bad', 'samesame'], ['g', 'y', 'bad', 'samesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneone; 0 more']], [['g', 'x', 'bad', 'oneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 3: [[[['f', 'missingmissingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesamesame; 0 more'], ['g', 'samesamesame; 0 more'], ['f', 'samesamesame; 0 more']], [['f', 'x', 'bad', 'samesamesame'], ['g', 'y', 'bad', 'samesamesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneoneone; 0 more']], [['g', 'x', 'bad', 'oneoneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 4: [[[['f', 'missingmissingmissingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesamesamesame; 0 more'], ['g', 'samesamesamesame; 0 more'], ['f', 'samesamesamesame; 0 more']], [['f', 'x', 'bad', 'samesamesamesame'], ['g', 'y', 'bad', 'samesamesamesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneoneoneone; 0 more']], [['g', 'x', 'bad', 'oneoneoneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]], 5: [[[['f', 'missingmissingmissingmissingmissing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]], [[['f', 'samesamesamesamesame; 0 more'], ['g', 'samesamesamesamesame; 0 more'], ['f', 'samesamesamesamesame; 0 more']], [['f', 'x', 'bad', 'samesamesamesamesame'], ['g', 'y', 'bad', 'samesamesamesamesame']]], [[], [['g', 'y', 'bad', 'two']]], [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []], [[['g', 'oneoneoneoneone; 0 more']], [['g', 'x', 'bad', 'oneoneoneoneone'], ['h', 'y', 'bad', 'two']]], [[['empty', 'all clear']], []], [[], []]]}[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 | [[['f', 'missing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]] | [[['f', 'missing; 1 more'], ['f', 'updated; 1 more'], ['f', 'bad; 0 more']], [['f', 'x', 'format', 'bad']]] | Passed |
| trace-2 | [[['f', 'same; 0 more'], ['g', 'same; 0 more'], ['f', 'same; 0 more']], [['f', 'x', 'bad', 'same'], ['g', 'y', 'bad', 'same']]] | [[['f', 'same; 0 more'], ['g', 'same; 0 more'], ['f', 'same; 0 more']], [['f', 'x', 'bad', 'same'], ['g', 'y', 'bad', 'same']]] | Passed |
| trace-3 | [[], [['g', 'y', 'bad', 'two']]] | [[], [['g', 'y', 'bad', 'two']]] | Passed |
| trace-4 | [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []] | [[['f', 'all clear'], ['g', 'all clear'], ['g', 'all clear'], ['f', 'all clear']], []] | Passed |
| trace-5 | [[['g', 'one; 0 more']], [['g', 'x', 'bad', 'one'], ['h', 'y', 'bad', 'two']]] | [[['g', 'one; 0 more']], [['g', 'x', 'bad', 'one'], ['h', 'y', 'bad', 'two']]] | Passed |
| trace-6 | [[['empty', 'all clear']], []] | [[['empty', 'all clear']], []] | Passed |
| trace-7 | [[], []] | [[], []] | Passed |
SHA-256 / 35daf018dc3b2620363bdcf7d1857aff207286797769e8952193119462874032
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:27.417897+00:00.
Case digest / f2fb9107fe12921896ea4adba023713806fd739d526c897304b9134eeac81f18