FAILURE MAP
← Case archive

FA-22731 / Autocomplete interactions / Open access

Controlled autocomplete synchronization: same-value label refresh replaces the stable identity · case 01

The label-refresh completion transition produces an incorrect observable state.

Verified by executionVariant 1 · 22 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

At controlled-picker/label-refresh, the implementation evaluates `{'id':d['new_object']['label'],'label':d['new_object']['label']}` instead of preserving the specified completion transition.

VERIFIED REPAIR

Implement the label-refresh contract using `{'id':d['old_object']['id'],'label':d['new_object']['label']}`.

Unsuccessful approach: The attempted repair uses `d['old_object']`, which still violates a normal or boundary completion fixture.

Case contract

Parent-provided value updates are distinguished from unacknowledged draft edits. An acknowledged commit may reset the draft to its label; unrelated rerenders preserve dirty draft. External value replacement clears preview and invalidates result epoch. Object identity is irrelevant; stable option identifiers determine equality.

Why this case matters

Autocomplete couples draft text, suggestion identity and asynchronous presentation; this bounded lifecycle model isolates one observable interaction defect.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(event, d):
    if event == 'same-id': return d['old_object']['id']==d['new_object']['id']
    if event == 'rerender': return d['draft'] if d['dirty'] and not d['ack'] else d['label']
    if event == 'external-value': return d['incoming']
    if event == 'external-draft': return d['label']
    if event == 'external-preview': return ''
    if event == 'parent-echo': return [] if d['ack'] else [d['incoming']]
    if event == 'ack-dirty': return False if d['ack'] else d['dirty']
    if event == 'stale-parent': return d['incoming_epoch']==d['epoch']
    if event == 'label-refresh': return {'id':d['new_object']['label'],'label':d['new_object']['label']}
    if event == 'change-detection': return d['incoming']!=d['value']
    return {'unchanged': True}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
normal = {'value':'a','incoming':'b','label':'Bee','draft':'bea','dirty':True,'ack':False,'preview':'beam','epoch':N,'incoming_epoch':N-1,'old_object':{'id':'a','label':'A'},'new_object':{'id':'a','label':'A2'}}
boundary = {'value':None,'incoming':None,'label':'','draft':'','dirty':False,'ack':True,'preview':'','epoch':N,'incoming_epoch':N,'old_object':{'id':'','label':''},'new_object':{'id':'','label':''}}
check('normal same-id', solve('same-id', normal), True)
check('boundary same-id', solve('same-id', boundary), True)
check('normal rerender', solve('rerender', normal), 'bea')
check('boundary rerender', solve('rerender', boundary), '')
check('normal external-value', solve('external-value', normal), 'b')
check('boundary external-value', solve('external-value', boundary), None)
check('normal external-draft', solve('external-draft', normal), 'Bee')
check('boundary external-draft', solve('external-draft', boundary), '')
check('normal external-preview', solve('external-preview', normal), '')
check('boundary external-preview', solve('external-preview', boundary), '')
check('normal parent-echo', solve('parent-echo', normal), ['b'])
check('boundary parent-echo', solve('parent-echo', boundary), [])
check('normal ack-dirty', solve('ack-dirty', normal), True)
check('boundary ack-dirty', solve('ack-dirty', boundary), False)
check('normal stale-parent', solve('stale-parent', normal), False)
check('boundary stale-parent', solve('stale-parent', boundary), True)
check('normal label-refresh', solve('label-refresh', normal), {'id':'a','label':'A2'})
check('boundary label-refresh', solve('label-refresh', boundary), {'id':'','label':''})
check('normal change-detection', solve('change-detection', normal), True)
check('boundary change-detection', solve('change-detection', boundary), False)
variant = dict(normal, **{'incoming':'id'+str(N)})
check('variant query or selection payload', solve('external-value', variant), 'id'+str(N))
check('unknown completion event', solve('unrecognized', normal), {'unchanged': True})
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 fixtureActualExpectedOutcome
normal same-idTrueTruePassed
boundary same-idTrueTruePassed
normal rerenderbeabeaPassed
boundary rerenderPassed
normal external-valuebbPassed
boundary external-valueNoneNonePassed
normal external-draftBeeBeePassed
boundary external-draftPassed
normal external-previewPassed
boundary external-previewPassed
normal parent-echo['b']['b']Passed
boundary parent-echo[][]Passed
normal ack-dirtyTrueTruePassed
boundary ack-dirtyFalseFalsePassed
normal stale-parentFalseFalsePassed
boundary stale-parentTrueTruePassed
normal label-refresh{'id': 'A2', 'label': 'A2'}{'id': 'a', 'label': 'A2'}Failed
boundary label-refresh{'id': '', 'label': ''}{'id': '', 'label': ''}Passed
normal change-detectionTrueTruePassed
boundary change-detectionFalseFalsePassed
variant query or selection payloadid1id1Passed
unknown completion event{'unchanged': True}{'unchanged': True}Passed

SHA-256 / 6653f4089f0aafdee252ed0a0c2006322399d12e0ae4219fdc23b2a73f9de045

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(event, d):
    if event == 'same-id': return d['old_object']['id']==d['new_object']['id']
    if event == 'rerender': return d['draft'] if d['dirty'] and not d['ack'] else d['label']
    if event == 'external-value': return d['incoming']
    if event == 'external-draft': return d['label']
    if event == 'external-preview': return ''
    if event == 'parent-echo': return [] if d['ack'] else [d['incoming']]
    if event == 'ack-dirty': return False if d['ack'] else d['dirty']
    if event == 'stale-parent': return d['incoming_epoch']==d['epoch']
    if event == 'label-refresh': return d['old_object']
    if event == 'change-detection': return d['incoming']!=d['value']
    return {'unchanged': True}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
normal = {'value':'a','incoming':'b','label':'Bee','draft':'bea','dirty':True,'ack':False,'preview':'beam','epoch':N,'incoming_epoch':N-1,'old_object':{'id':'a','label':'A'},'new_object':{'id':'a','label':'A2'}}
boundary = {'value':None,'incoming':None,'label':'','draft':'','dirty':False,'ack':True,'preview':'','epoch':N,'incoming_epoch':N,'old_object':{'id':'','label':''},'new_object':{'id':'','label':''}}
check('normal same-id', solve('same-id', normal), True)
check('boundary same-id', solve('same-id', boundary), True)
check('normal rerender', solve('rerender', normal), 'bea')
check('boundary rerender', solve('rerender', boundary), '')
check('normal external-value', solve('external-value', normal), 'b')
check('boundary external-value', solve('external-value', boundary), None)
check('normal external-draft', solve('external-draft', normal), 'Bee')
check('boundary external-draft', solve('external-draft', boundary), '')
check('normal external-preview', solve('external-preview', normal), '')
check('boundary external-preview', solve('external-preview', boundary), '')
check('normal parent-echo', solve('parent-echo', normal), ['b'])
check('boundary parent-echo', solve('parent-echo', boundary), [])
check('normal ack-dirty', solve('ack-dirty', normal), True)
check('boundary ack-dirty', solve('ack-dirty', boundary), False)
check('normal stale-parent', solve('stale-parent', normal), False)
check('boundary stale-parent', solve('stale-parent', boundary), True)
check('normal label-refresh', solve('label-refresh', normal), {'id':'a','label':'A2'})
check('boundary label-refresh', solve('label-refresh', boundary), {'id':'','label':''})
check('normal change-detection', solve('change-detection', normal), True)
check('boundary change-detection', solve('change-detection', boundary), False)
variant = dict(normal, **{'incoming':'id'+str(N)})
check('variant query or selection payload', solve('external-value', variant), 'id'+str(N))
check('unknown completion event', solve('unrecognized', normal), {'unchanged': True})
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 fixtureActualExpectedOutcome
normal same-idTrueTruePassed
boundary same-idTrueTruePassed
normal rerenderbeabeaPassed
boundary rerenderPassed
normal external-valuebbPassed
boundary external-valueNoneNonePassed
normal external-draftBeeBeePassed
boundary external-draftPassed
normal external-previewPassed
boundary external-previewPassed
normal parent-echo['b']['b']Passed
boundary parent-echo[][]Passed
normal ack-dirtyTrueTruePassed
boundary ack-dirtyFalseFalsePassed
normal stale-parentFalseFalsePassed
boundary stale-parentTrueTruePassed
normal label-refresh{'id': 'a', 'label': 'A'}{'id': 'a', 'label': 'A2'}Failed
boundary label-refresh{'id': '', 'label': ''}{'id': '', 'label': ''}Passed
normal change-detectionTrueTruePassed
boundary change-detectionFalseFalsePassed
variant query or selection payloadid1id1Passed
unknown completion event{'unchanged': True}{'unchanged': True}Passed

SHA-256 / 9376ce21eaa97310b7a8a867e722f1e23d55d3d68702b789efbb33aed7fba0dc

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(event, d):
    if event == 'same-id': return d['old_object']['id']==d['new_object']['id']
    if event == 'rerender': return d['draft'] if d['dirty'] and not d['ack'] else d['label']
    if event == 'external-value': return d['incoming']
    if event == 'external-draft': return d['label']
    if event == 'external-preview': return ''
    if event == 'parent-echo': return [] if d['ack'] else [d['incoming']]
    if event == 'ack-dirty': return False if d['ack'] else d['dirty']
    if event == 'stale-parent': return d['incoming_epoch']==d['epoch']
    if event == 'label-refresh': return {'id':d['old_object']['id'],'label':d['new_object']['label']}
    if event == 'change-detection': return d['incoming']!=d['value']
    return {'unchanged': True}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
normal = {'value':'a','incoming':'b','label':'Bee','draft':'bea','dirty':True,'ack':False,'preview':'beam','epoch':N,'incoming_epoch':N-1,'old_object':{'id':'a','label':'A'},'new_object':{'id':'a','label':'A2'}}
boundary = {'value':None,'incoming':None,'label':'','draft':'','dirty':False,'ack':True,'preview':'','epoch':N,'incoming_epoch':N,'old_object':{'id':'','label':''},'new_object':{'id':'','label':''}}
check('normal same-id', solve('same-id', normal), True)
check('boundary same-id', solve('same-id', boundary), True)
check('normal rerender', solve('rerender', normal), 'bea')
check('boundary rerender', solve('rerender', boundary), '')
check('normal external-value', solve('external-value', normal), 'b')
check('boundary external-value', solve('external-value', boundary), None)
check('normal external-draft', solve('external-draft', normal), 'Bee')
check('boundary external-draft', solve('external-draft', boundary), '')
check('normal external-preview', solve('external-preview', normal), '')
check('boundary external-preview', solve('external-preview', boundary), '')
check('normal parent-echo', solve('parent-echo', normal), ['b'])
check('boundary parent-echo', solve('parent-echo', boundary), [])
check('normal ack-dirty', solve('ack-dirty', normal), True)
check('boundary ack-dirty', solve('ack-dirty', boundary), False)
check('normal stale-parent', solve('stale-parent', normal), False)
check('boundary stale-parent', solve('stale-parent', boundary), True)
check('normal label-refresh', solve('label-refresh', normal), {'id':'a','label':'A2'})
check('boundary label-refresh', solve('label-refresh', boundary), {'id':'','label':''})
check('normal change-detection', solve('change-detection', normal), True)
check('boundary change-detection', solve('change-detection', boundary), False)
variant = dict(normal, **{'incoming':'id'+str(N)})
check('variant query or selection payload', solve('external-value', variant), 'id'+str(N))
check('unknown completion event', solve('unrecognized', normal), {'unchanged': True})
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 fixtureActualExpectedOutcome
normal same-idTrueTruePassed
boundary same-idTrueTruePassed
normal rerenderbeabeaPassed
boundary rerenderPassed
normal external-valuebbPassed
boundary external-valueNoneNonePassed
normal external-draftBeeBeePassed
boundary external-draftPassed
normal external-previewPassed
boundary external-previewPassed
normal parent-echo['b']['b']Passed
boundary parent-echo[][]Passed
normal ack-dirtyTrueTruePassed
boundary ack-dirtyFalseFalsePassed
normal stale-parentFalseFalsePassed
boundary stale-parentTrueTruePassed
normal label-refresh{'id': 'a', 'label': 'A2'}{'id': 'a', 'label': 'A2'}Passed
boundary label-refresh{'id': '', 'label': ''}{'id': '', 'label': ''}Passed
normal change-detectionTrueTruePassed
boundary change-detectionFalseFalsePassed
variant query or selection payloadid1id1Passed
unknown completion event{'unchanged': True}{'unchanged': True}Passed

SHA-256 / 5cf9aa1e84cdf8353d8b5a1af8ceb569beb4fe6289e7afe1fb5cc5eda59ad5a8

Verification & scope

Stipulated deterministic widget transition model; inputs are validated snapshots. It does not model browser event dispatch, network transport, or linguistic standards. 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:41.207215+00:00.

Case digest / 78a3a8ab5da18b47d43e57b5ecbbc58fb084defb3ac24f0da2ebfa90e3fa5b53