FA-21706 / Assistive announcements / Open access
Collection count is based on last item index · case 01
The announcement trace violates the stated list-change-narration contract.
ROOT CAUSE
Fault site: elif op=='count': out.append(['count',len(items)]) is implemented as elif op=='count': out.append(['count',len(items)-1])
VERIFIED REPAIR
Restore the stated transition: elif op=='count': out.append(['count',len(items)])
Unsuccessful approach: The attempted repair substitutes elif op=='count': out.append(['count',len(items)+1]) and still violates a regression oracle.
Case contract
An ordered collection maps unique item IDs to spoken labels. Add inserts at clamped zero-based position; existing ID updates label without moving. Remove announces old one-based position. Move removes then inserts at clamped destination and announces old/new positions. Rename announces old/new labels. Begin silences individual cues while accumulating cue count; end announces only count and clears batching. Reset clears list with no cue. Count command reports current cardinality. Return cues and ordered [id,label].
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):
items=[]; batching=False; changes=0; out=[]
for e in events:
op=e[0]; cue=None
index=next((i for i,x in enumerate(items) if len(e)>1 and x[0]==e[1]),None)
if op=='begin': batching=True; changes=0
elif op=='end':
if batching and changes: out.append(['changes',changes])
batching=False; changes=0
elif op=='reset': items=[]
elif op=='count': out.append(['count',len(items)-1])
elif op=='add':
if index is not None: items[index][1]=e[2]
else:
position=max(0,min(len(items),e[3])); items.insert(position,[e[1],e[2]])
cue=['added',e[2],position+1]
elif index is not None:
if op=='remove':
item=items.pop(index); cue=['removed',item[1],index+1]
elif op=='rename': cue=['renamed',items[index][1],e[2]]; items[index][1]=e[2]
elif op=='move':
item=items.pop(index); position=max(0,min(len(items),e[2])); items.insert(position,item)
cue=['moved',item[1],index+1,position+1]
if cue is not None:
if batching: changes+=1
else: out.append(cue)
return [out,items,batching,changes]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = ["[['add','a','Alpha'*N,0],['add','b','Beta',0],['add','c','Gamma',1],['count'],['remove','c']]", "[['add','a','Old',0],['add','a','New'*N,4],['rename','a','Latest']]", "[['add','a','A'*N,0],['add','b','B',1],['add','c','C',2],['move','a',99],['move','c',0]]", "[['begin'],['add','a','A'*N,0],['add','b','B',1],['end'],['begin'],['end']]", "[['add','a','A'*N,0],['reset'],['count']]", "[['remove','missing'],['move','missing',N],['end']]", '[]']
expected = {1: [[[['added', 'Alpha', 1], ['added', 'Beta', 1], ['added', 'Gamma', 2], ['count', 3], ['removed', 'Gamma', 2]], [['b', 'Beta'], ['a', 'Alpha']], False, 0], [[['added', 'Old', 1], ['renamed', 'New', 'Latest']], [['a', 'Latest']], False, 0], [[['added', 'A', 1], ['added', 'B', 2], ['added', 'C', 3], ['moved', 'A', 1, 3], ['moved', 'C', 2, 1]], [['c', 'C'], ['b', 'B'], ['a', 'A']], False, 0], [[['changes', 2]], [['a', 'A'], ['b', 'B']], False, 0], [[['added', 'A', 1], ['count', 0]], [], False, 0], [[], [], False, 0], [[], [], False, 0]], 2: [[[['added', 'AlphaAlpha', 1], ['added', 'Beta', 1], ['added', 'Gamma', 2], ['count', 3], ['removed', 'Gamma', 2]], [['b', 'Beta'], ['a', 'AlphaAlpha']], False, 0], [[['added', 'Old', 1], ['renamed', 'NewNew', 'Latest']], [['a', 'Latest']], False, 0], [[['added', 'AA', 1], ['added', 'B', 2], ['added', 'C', 3], ['moved', 'AA', 1, 3], ['moved', 'C', 2, 1]], [['c', 'C'], ['b', 'B'], ['a', 'AA']], False, 0], [[['changes', 2]], [['a', 'AA'], ['b', 'B']], False, 0], [[['added', 'AA', 1], ['count', 0]], [], False, 0], [[], [], False, 0], [[], [], False, 0]], 3: [[[['added', 'AlphaAlphaAlpha', 1], ['added', 'Beta', 1], ['added', 'Gamma', 2], ['count', 3], ['removed', 'Gamma', 2]], [['b', 'Beta'], ['a', 'AlphaAlphaAlpha']], False, 0], [[['added', 'Old', 1], ['renamed', 'NewNewNew', 'Latest']], [['a', 'Latest']], False, 0], [[['added', 'AAA', 1], ['added', 'B', 2], ['added', 'C', 3], ['moved', 'AAA', 1, 3], ['moved', 'C', 2, 1]], [['c', 'C'], ['b', 'B'], ['a', 'AAA']], False, 0], [[['changes', 2]], [['a', 'AAA'], ['b', 'B']], False, 0], [[['added', 'AAA', 1], ['count', 0]], [], False, 0], [[], [], False, 0], [[], [], False, 0]], 4: [[[['added', 'AlphaAlphaAlphaAlpha', 1], ['added', 'Beta', 1], ['added', 'Gamma', 2], ['count', 3], ['removed', 'Gamma', 2]], [['b', 'Beta'], ['a', 'AlphaAlphaAlphaAlpha']], False, 0], [[['added', 'Old', 1], ['renamed', 'NewNewNewNew', 'Latest']], [['a', 'Latest']], False, 0], [[['added', 'AAAA', 1], ['added', 'B', 2], ['added', 'C', 3], ['moved', 'AAAA', 1, 3], ['moved', 'C', 2, 1]], [['c', 'C'], ['b', 'B'], ['a', 'AAAA']], False, 0], [[['changes', 2]], [['a', 'AAAA'], ['b', 'B']], False, 0], [[['added', 'AAAA', 1], ['count', 0]], [], False, 0], [[], [], False, 0], [[], [], False, 0]], 5: [[[['added', 'AlphaAlphaAlphaAlphaAlpha', 1], ['added', 'Beta', 1], ['added', 'Gamma', 2], ['count', 3], ['removed', 'Gamma', 2]], [['b', 'Beta'], ['a', 'AlphaAlphaAlphaAlphaAlpha']], False, 0], [[['added', 'Old', 1], ['renamed', 'NewNewNewNewNew', 'Latest']], [['a', 'Latest']], False, 0], [[['added', 'AAAAA', 1], ['added', 'B', 2], ['added', 'C', 3], ['moved', 'AAAAA', 1, 3], ['moved', 'C', 2, 1]], [['c', 'C'], ['b', 'B'], ['a', 'AAAAA']], False, 0], [[['changes', 2]], [['a', 'AAAAA'], ['b', 'B']], False, 0], [[['added', 'AAAAA', 1], ['count', 0]], [], False, 0], [[], [], False, 0], [[], [], False, 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 | [[['added', 'Alpha', 1], ['added', 'Beta', 1], ['added', 'Gamma', 2], ['count', 2], ['removed', 'Gamma', 2]], [['b', 'Beta'], ['a', 'Alpha']], False, 0] | [[['added', 'Alpha', 1], ['added', 'Beta', 1], ['added', 'Gamma', 2], ['count', 3], ['removed', 'Gamma', 2]], [['b', 'Beta'], ['a', 'Alpha']], False, 0] | Failed |
| trace-2 | [[['added', 'Old', 1], ['renamed', 'New', 'Latest']], [['a', 'Latest']], False, 0] | [[['added', 'Old', 1], ['renamed', 'New', 'Latest']], [['a', 'Latest']], False, 0] | Passed |
| trace-3 | [[['added', 'A', 1], ['added', 'B', 2], ['added', 'C', 3], ['moved', 'A', 1, 3], ['moved', 'C', 2, 1]], [['c', 'C'], ['b', 'B'], ['a', 'A']], False, 0] | [[['added', 'A', 1], ['added', 'B', 2], ['added', 'C', 3], ['moved', 'A', 1, 3], ['moved', 'C', 2, 1]], [['c', 'C'], ['b', 'B'], ['a', 'A']], False, 0] | Passed |
| trace-4 | [[['changes', 2]], [['a', 'A'], ['b', 'B']], False, 0] | [[['changes', 2]], [['a', 'A'], ['b', 'B']], False, 0] | Passed |
| trace-5 | [[['added', 'A', 1], ['count', -1]], [], False, 0] | [[['added', 'A', 1], ['count', 0]], [], False, 0] | Failed |
| trace-6 | [[], [], False, 0] | [[], [], False, 0] | Passed |
| trace-7 | [[], [], False, 0] | [[], [], False, 0] | Passed |
SHA-256 / 6f00bc218faaccfb6855ea5c0249e50a5269fd9bec7bf4789efc51680c35db56
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(events):
items=[]; batching=False; changes=0; out=[]
for e in events:
op=e[0]; cue=None
index=next((i for i,x in enumerate(items) if len(e)>1 and x[0]==e[1]),None)
if op=='begin': batching=True; changes=0
elif op=='end':
if batching and changes: out.append(['changes',changes])
batching=False; changes=0
elif op=='reset': items=[]
elif op=='count': out.append(['count',len(items)+1])
elif op=='add':
if index is not None: items[index][1]=e[2]
else:
position=max(0,min(len(items),e[3])); items.insert(position,[e[1],e[2]])
cue=['added',e[2],position+1]
elif index is not None:
if op=='remove':
item=items.pop(index); cue=['removed',item[1],index+1]
elif op=='rename': cue=['renamed',items[index][1],e[2]]; items[index][1]=e[2]
elif op=='move':
item=items.pop(index); position=max(0,min(len(items),e[2])); items.insert(position,item)
cue=['moved',item[1],index+1,position+1]
if cue is not None:
if batching: changes+=1
else: out.append(cue)
return [out,items,batching,changes]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = ["[['add','a','Alpha'*N,0],['add','b','Beta',0],['add','c','Gamma',1],['count'],['remove','c']]", "[['add','a','Old',0],['add','a','New'*N,4],['rename','a','Latest']]", "[['add','a','A'*N,0],['add','b','B',1],['add','c','C',2],['move','a',99],['move','c',0]]", "[['begin'],['add','a','A'*N,0],['add','b','B',1],['end'],['begin'],['end']]", "[['add','a','A'*N,0],['reset'],['count']]", "[['remove','missing'],['move','missing',N],['end']]", '[]']
expected = {1: [[[['added', 'Alpha', 1], ['added', 'Beta', 1], ['added', 'Gamma', 2], ['count', 3], ['removed', 'Gamma', 2]], [['b', 'Beta'], ['a', 'Alpha']], False, 0], [[['added', 'Old', 1], ['renamed', 'New', 'Latest']], [['a', 'Latest']], False, 0], [[['added', 'A', 1], ['added', 'B', 2], ['added', 'C', 3], ['moved', 'A', 1, 3], ['moved', 'C', 2, 1]], [['c', 'C'], ['b', 'B'], ['a', 'A']], False, 0], [[['changes', 2]], [['a', 'A'], ['b', 'B']], False, 0], [[['added', 'A', 1], ['count', 0]], [], False, 0], [[], [], False, 0], [[], [], False, 0]], 2: [[[['added', 'AlphaAlpha', 1], ['added', 'Beta', 1], ['added', 'Gamma', 2], ['count', 3], ['removed', 'Gamma', 2]], [['b', 'Beta'], ['a', 'AlphaAlpha']], False, 0], [[['added', 'Old', 1], ['renamed', 'NewNew', 'Latest']], [['a', 'Latest']], False, 0], [[['added', 'AA', 1], ['added', 'B', 2], ['added', 'C', 3], ['moved', 'AA', 1, 3], ['moved', 'C', 2, 1]], [['c', 'C'], ['b', 'B'], ['a', 'AA']], False, 0], [[['changes', 2]], [['a', 'AA'], ['b', 'B']], False, 0], [[['added', 'AA', 1], ['count', 0]], [], False, 0], [[], [], False, 0], [[], [], False, 0]], 3: [[[['added', 'AlphaAlphaAlpha', 1], ['added', 'Beta', 1], ['added', 'Gamma', 2], ['count', 3], ['removed', 'Gamma', 2]], [['b', 'Beta'], ['a', 'AlphaAlphaAlpha']], False, 0], [[['added', 'Old', 1], ['renamed', 'NewNewNew', 'Latest']], [['a', 'Latest']], False, 0], [[['added', 'AAA', 1], ['added', 'B', 2], ['added', 'C', 3], ['moved', 'AAA', 1, 3], ['moved', 'C', 2, 1]], [['c', 'C'], ['b', 'B'], ['a', 'AAA']], False, 0], [[['changes', 2]], [['a', 'AAA'], ['b', 'B']], False, 0], [[['added', 'AAA', 1], ['count', 0]], [], False, 0], [[], [], False, 0], [[], [], False, 0]], 4: [[[['added', 'AlphaAlphaAlphaAlpha', 1], ['added', 'Beta', 1], ['added', 'Gamma', 2], ['count', 3], ['removed', 'Gamma', 2]], [['b', 'Beta'], ['a', 'AlphaAlphaAlphaAlpha']], False, 0], [[['added', 'Old', 1], ['renamed', 'NewNewNewNew', 'Latest']], [['a', 'Latest']], False, 0], [[['added', 'AAAA', 1], ['added', 'B', 2], ['added', 'C', 3], ['moved', 'AAAA', 1, 3], ['moved', 'C', 2, 1]], [['c', 'C'], ['b', 'B'], ['a', 'AAAA']], False, 0], [[['changes', 2]], [['a', 'AAAA'], ['b', 'B']], False, 0], [[['added', 'AAAA', 1], ['count', 0]], [], False, 0], [[], [], False, 0], [[], [], False, 0]], 5: [[[['added', 'AlphaAlphaAlphaAlphaAlpha', 1], ['added', 'Beta', 1], ['added', 'Gamma', 2], ['count', 3], ['removed', 'Gamma', 2]], [['b', 'Beta'], ['a', 'AlphaAlphaAlphaAlphaAlpha']], False, 0], [[['added', 'Old', 1], ['renamed', 'NewNewNewNewNew', 'Latest']], [['a', 'Latest']], False, 0], [[['added', 'AAAAA', 1], ['added', 'B', 2], ['added', 'C', 3], ['moved', 'AAAAA', 1, 3], ['moved', 'C', 2, 1]], [['c', 'C'], ['b', 'B'], ['a', 'AAAAA']], False, 0], [[['changes', 2]], [['a', 'AAAAA'], ['b', 'B']], False, 0], [[['added', 'AAAAA', 1], ['count', 0]], [], False, 0], [[], [], False, 0], [[], [], False, 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 | [[['added', 'Alpha', 1], ['added', 'Beta', 1], ['added', 'Gamma', 2], ['count', 4], ['removed', 'Gamma', 2]], [['b', 'Beta'], ['a', 'Alpha']], False, 0] | [[['added', 'Alpha', 1], ['added', 'Beta', 1], ['added', 'Gamma', 2], ['count', 3], ['removed', 'Gamma', 2]], [['b', 'Beta'], ['a', 'Alpha']], False, 0] | Failed |
| trace-2 | [[['added', 'Old', 1], ['renamed', 'New', 'Latest']], [['a', 'Latest']], False, 0] | [[['added', 'Old', 1], ['renamed', 'New', 'Latest']], [['a', 'Latest']], False, 0] | Passed |
| trace-3 | [[['added', 'A', 1], ['added', 'B', 2], ['added', 'C', 3], ['moved', 'A', 1, 3], ['moved', 'C', 2, 1]], [['c', 'C'], ['b', 'B'], ['a', 'A']], False, 0] | [[['added', 'A', 1], ['added', 'B', 2], ['added', 'C', 3], ['moved', 'A', 1, 3], ['moved', 'C', 2, 1]], [['c', 'C'], ['b', 'B'], ['a', 'A']], False, 0] | Passed |
| trace-4 | [[['changes', 2]], [['a', 'A'], ['b', 'B']], False, 0] | [[['changes', 2]], [['a', 'A'], ['b', 'B']], False, 0] | Passed |
| trace-5 | [[['added', 'A', 1], ['count', 1]], [], False, 0] | [[['added', 'A', 1], ['count', 0]], [], False, 0] | Failed |
| trace-6 | [[], [], False, 0] | [[], [], False, 0] | Passed |
| trace-7 | [[], [], False, 0] | [[], [], False, 0] | Passed |
SHA-256 / 47ddf9ad48bcf388d1cc08b76ae292b109bd8d691af851aee16d89375c6d85ac
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(events):
items=[]; batching=False; changes=0; out=[]
for e in events:
op=e[0]; cue=None
index=next((i for i,x in enumerate(items) if len(e)>1 and x[0]==e[1]),None)
if op=='begin': batching=True; changes=0
elif op=='end':
if batching and changes: out.append(['changes',changes])
batching=False; changes=0
elif op=='reset': items=[]
elif op=='count': out.append(['count',len(items)])
elif op=='add':
if index is not None: items[index][1]=e[2]
else:
position=max(0,min(len(items),e[3])); items.insert(position,[e[1],e[2]])
cue=['added',e[2],position+1]
elif index is not None:
if op=='remove':
item=items.pop(index); cue=['removed',item[1],index+1]
elif op=='rename': cue=['renamed',items[index][1],e[2]]; items[index][1]=e[2]
elif op=='move':
item=items.pop(index); position=max(0,min(len(items),e[2])); items.insert(position,item)
cue=['moved',item[1],index+1,position+1]
if cue is not None:
if batching: changes+=1
else: out.append(cue)
return [out,items,batching,changes]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = ["[['add','a','Alpha'*N,0],['add','b','Beta',0],['add','c','Gamma',1],['count'],['remove','c']]", "[['add','a','Old',0],['add','a','New'*N,4],['rename','a','Latest']]", "[['add','a','A'*N,0],['add','b','B',1],['add','c','C',2],['move','a',99],['move','c',0]]", "[['begin'],['add','a','A'*N,0],['add','b','B',1],['end'],['begin'],['end']]", "[['add','a','A'*N,0],['reset'],['count']]", "[['remove','missing'],['move','missing',N],['end']]", '[]']
expected = {1: [[[['added', 'Alpha', 1], ['added', 'Beta', 1], ['added', 'Gamma', 2], ['count', 3], ['removed', 'Gamma', 2]], [['b', 'Beta'], ['a', 'Alpha']], False, 0], [[['added', 'Old', 1], ['renamed', 'New', 'Latest']], [['a', 'Latest']], False, 0], [[['added', 'A', 1], ['added', 'B', 2], ['added', 'C', 3], ['moved', 'A', 1, 3], ['moved', 'C', 2, 1]], [['c', 'C'], ['b', 'B'], ['a', 'A']], False, 0], [[['changes', 2]], [['a', 'A'], ['b', 'B']], False, 0], [[['added', 'A', 1], ['count', 0]], [], False, 0], [[], [], False, 0], [[], [], False, 0]], 2: [[[['added', 'AlphaAlpha', 1], ['added', 'Beta', 1], ['added', 'Gamma', 2], ['count', 3], ['removed', 'Gamma', 2]], [['b', 'Beta'], ['a', 'AlphaAlpha']], False, 0], [[['added', 'Old', 1], ['renamed', 'NewNew', 'Latest']], [['a', 'Latest']], False, 0], [[['added', 'AA', 1], ['added', 'B', 2], ['added', 'C', 3], ['moved', 'AA', 1, 3], ['moved', 'C', 2, 1]], [['c', 'C'], ['b', 'B'], ['a', 'AA']], False, 0], [[['changes', 2]], [['a', 'AA'], ['b', 'B']], False, 0], [[['added', 'AA', 1], ['count', 0]], [], False, 0], [[], [], False, 0], [[], [], False, 0]], 3: [[[['added', 'AlphaAlphaAlpha', 1], ['added', 'Beta', 1], ['added', 'Gamma', 2], ['count', 3], ['removed', 'Gamma', 2]], [['b', 'Beta'], ['a', 'AlphaAlphaAlpha']], False, 0], [[['added', 'Old', 1], ['renamed', 'NewNewNew', 'Latest']], [['a', 'Latest']], False, 0], [[['added', 'AAA', 1], ['added', 'B', 2], ['added', 'C', 3], ['moved', 'AAA', 1, 3], ['moved', 'C', 2, 1]], [['c', 'C'], ['b', 'B'], ['a', 'AAA']], False, 0], [[['changes', 2]], [['a', 'AAA'], ['b', 'B']], False, 0], [[['added', 'AAA', 1], ['count', 0]], [], False, 0], [[], [], False, 0], [[], [], False, 0]], 4: [[[['added', 'AlphaAlphaAlphaAlpha', 1], ['added', 'Beta', 1], ['added', 'Gamma', 2], ['count', 3], ['removed', 'Gamma', 2]], [['b', 'Beta'], ['a', 'AlphaAlphaAlphaAlpha']], False, 0], [[['added', 'Old', 1], ['renamed', 'NewNewNewNew', 'Latest']], [['a', 'Latest']], False, 0], [[['added', 'AAAA', 1], ['added', 'B', 2], ['added', 'C', 3], ['moved', 'AAAA', 1, 3], ['moved', 'C', 2, 1]], [['c', 'C'], ['b', 'B'], ['a', 'AAAA']], False, 0], [[['changes', 2]], [['a', 'AAAA'], ['b', 'B']], False, 0], [[['added', 'AAAA', 1], ['count', 0]], [], False, 0], [[], [], False, 0], [[], [], False, 0]], 5: [[[['added', 'AlphaAlphaAlphaAlphaAlpha', 1], ['added', 'Beta', 1], ['added', 'Gamma', 2], ['count', 3], ['removed', 'Gamma', 2]], [['b', 'Beta'], ['a', 'AlphaAlphaAlphaAlphaAlpha']], False, 0], [[['added', 'Old', 1], ['renamed', 'NewNewNewNewNew', 'Latest']], [['a', 'Latest']], False, 0], [[['added', 'AAAAA', 1], ['added', 'B', 2], ['added', 'C', 3], ['moved', 'AAAAA', 1, 3], ['moved', 'C', 2, 1]], [['c', 'C'], ['b', 'B'], ['a', 'AAAAA']], False, 0], [[['changes', 2]], [['a', 'AAAAA'], ['b', 'B']], False, 0], [[['added', 'AAAAA', 1], ['count', 0]], [], False, 0], [[], [], False, 0], [[], [], False, 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 | [[['added', 'Alpha', 1], ['added', 'Beta', 1], ['added', 'Gamma', 2], ['count', 3], ['removed', 'Gamma', 2]], [['b', 'Beta'], ['a', 'Alpha']], False, 0] | [[['added', 'Alpha', 1], ['added', 'Beta', 1], ['added', 'Gamma', 2], ['count', 3], ['removed', 'Gamma', 2]], [['b', 'Beta'], ['a', 'Alpha']], False, 0] | Passed |
| trace-2 | [[['added', 'Old', 1], ['renamed', 'New', 'Latest']], [['a', 'Latest']], False, 0] | [[['added', 'Old', 1], ['renamed', 'New', 'Latest']], [['a', 'Latest']], False, 0] | Passed |
| trace-3 | [[['added', 'A', 1], ['added', 'B', 2], ['added', 'C', 3], ['moved', 'A', 1, 3], ['moved', 'C', 2, 1]], [['c', 'C'], ['b', 'B'], ['a', 'A']], False, 0] | [[['added', 'A', 1], ['added', 'B', 2], ['added', 'C', 3], ['moved', 'A', 1, 3], ['moved', 'C', 2, 1]], [['c', 'C'], ['b', 'B'], ['a', 'A']], False, 0] | Passed |
| trace-4 | [[['changes', 2]], [['a', 'A'], ['b', 'B']], False, 0] | [[['changes', 2]], [['a', 'A'], ['b', 'B']], False, 0] | Passed |
| trace-5 | [[['added', 'A', 1], ['count', 0]], [], False, 0] | [[['added', 'A', 1], ['count', 0]], [], False, 0] | Passed |
| trace-6 | [[], [], False, 0] | [[], [], False, 0] | Passed |
| trace-7 | [[], [], False, 0] | [[], [], False, 0] | Passed |
SHA-256 / 206d60a0fed2b5f69ecb70b492894accdfc4c5309f278aa5475be18275c0e9b6
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:31.373334+00:00.
Case digest / 1c6daac3a68b349a25f54f6ee3cd57b2de80e7932bdb2c6ad17fc6714fe6ab58