FA-22361 / Autocomplete interactions / Open access
Federated suggestion sections: pending remote query suppresses available local suggestions · case 01
The local-ready completion transition produces an incorrect observable state.
ROOT CAUSE
At source-sections/local-ready, the implementation evaluates `[] if d['remote_pending'] else d['local']` instead of preserving the specified completion transition.
VERIFIED REPAIR
Implement the local-ready contract using `d['local']`.
Unsuccessful approach: The attempted repair uses `d['remote']`, which still violates a normal or boundary completion fixture.
Case contract
Local-history and remote suggestions are separate ordered sections. Stable identity includes source namespace. Empty sections have no header; pending remote work does not hide completed local results. Section headers are display rows, never commit candidates.
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 == 'order': return d['local']+d['remote']
if event == 'identity': return [d['row_source'],d['row_id']]
if event == 'local-header': return d['local_title'] if d['local'] else None
if event == 'remote-header': return d['remote_title'] if d['remote'] else None
if event == 'local-ready': return [] if d['remote_pending'] else d['local']
if event == 'header-commit': return d['row_id'] if d['row_kind']=='option' else None
if event == 'count': return len(d['local'])+len(d['remote'])
if event == 'source-empty': return not d['local'] and not d['remote']
if event == 'remote-marker': return d['remote_pending']
if event == 'remote-offset': return len(d['local'])+(1 if d['local'] else 0)
return {'unchanged': True}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
normal = {'local':['x','y'],'remote':['x','z'],'local_title':'Recent','remote_title':'Directory','remote_pending':True,'row_kind':'header','row_source':'remote','row_id':'x','epoch':N}
boundary = {'local':[],'remote':['w'],'local_title':'Recent','remote_title':'Directory','remote_pending':False,'row_kind':'option','row_source':'local','row_id':'','epoch':N}
check('normal order', solve('order', normal), ['x','y','x','z'])
check('boundary order', solve('order', boundary), ['w'])
check('normal identity', solve('identity', normal), ['remote','x'])
check('boundary identity', solve('identity', boundary), ['local',''])
check('normal local-header', solve('local-header', normal), 'Recent')
check('boundary local-header', solve('local-header', boundary), None)
check('normal remote-header', solve('remote-header', normal), 'Directory')
check('boundary remote-header', solve('remote-header', boundary), 'Directory')
check('normal local-ready', solve('local-ready', normal), ['x','y'])
check('boundary local-ready', solve('local-ready', boundary), [])
check('normal header-commit', solve('header-commit', normal), None)
check('boundary header-commit', solve('header-commit', boundary), '')
check('normal count', solve('count', normal), 4)
check('boundary count', solve('count', boundary), 1)
check('normal source-empty', solve('source-empty', normal), False)
check('boundary source-empty', solve('source-empty', boundary), False)
check('normal remote-marker', solve('remote-marker', normal), True)
check('boundary remote-marker', solve('remote-marker', boundary), False)
check('normal remote-offset', solve('remote-offset', normal), 3)
check('boundary remote-offset', solve('remote-offset', boundary), 0)
variant = dict(normal, **{'row_id':'id'+str(N)})
check('variant query or selection payload', solve('identity', variant), ['remote','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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| normal order | ['x', 'y', 'x', 'z'] | ['x', 'y', 'x', 'z'] | Passed |
| boundary order | ['w'] | ['w'] | Passed |
| normal identity | ['remote', 'x'] | ['remote', 'x'] | Passed |
| boundary identity | ['local', ''] | ['local', ''] | Passed |
| normal local-header | Recent | Recent | Passed |
| boundary local-header | None | None | Passed |
| normal remote-header | Directory | Directory | Passed |
| boundary remote-header | Directory | Directory | Passed |
| normal local-ready | [] | ['x', 'y'] | Failed |
| boundary local-ready | [] | [] | Passed |
| normal header-commit | None | None | Passed |
| boundary header-commit | | | Passed |
| normal count | 4 | 4 | Passed |
| boundary count | 1 | 1 | Passed |
| normal source-empty | False | False | Passed |
| boundary source-empty | False | False | Passed |
| normal remote-marker | True | True | Passed |
| boundary remote-marker | False | False | Passed |
| normal remote-offset | 3 | 3 | Passed |
| boundary remote-offset | 0 | 0 | Passed |
| variant query or selection payload | ['remote', 'id1'] | ['remote', 'id1'] | Passed |
| unknown completion event | {'unchanged': True} | {'unchanged': True} | Passed |
SHA-256 / 9bd735cac21f110c4290c4ad17f982d090da4cbbbf6dfdacd3f5371defea052d
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 == 'order': return d['local']+d['remote']
if event == 'identity': return [d['row_source'],d['row_id']]
if event == 'local-header': return d['local_title'] if d['local'] else None
if event == 'remote-header': return d['remote_title'] if d['remote'] else None
if event == 'local-ready': return d['remote']
if event == 'header-commit': return d['row_id'] if d['row_kind']=='option' else None
if event == 'count': return len(d['local'])+len(d['remote'])
if event == 'source-empty': return not d['local'] and not d['remote']
if event == 'remote-marker': return d['remote_pending']
if event == 'remote-offset': return len(d['local'])+(1 if d['local'] else 0)
return {'unchanged': True}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
normal = {'local':['x','y'],'remote':['x','z'],'local_title':'Recent','remote_title':'Directory','remote_pending':True,'row_kind':'header','row_source':'remote','row_id':'x','epoch':N}
boundary = {'local':[],'remote':['w'],'local_title':'Recent','remote_title':'Directory','remote_pending':False,'row_kind':'option','row_source':'local','row_id':'','epoch':N}
check('normal order', solve('order', normal), ['x','y','x','z'])
check('boundary order', solve('order', boundary), ['w'])
check('normal identity', solve('identity', normal), ['remote','x'])
check('boundary identity', solve('identity', boundary), ['local',''])
check('normal local-header', solve('local-header', normal), 'Recent')
check('boundary local-header', solve('local-header', boundary), None)
check('normal remote-header', solve('remote-header', normal), 'Directory')
check('boundary remote-header', solve('remote-header', boundary), 'Directory')
check('normal local-ready', solve('local-ready', normal), ['x','y'])
check('boundary local-ready', solve('local-ready', boundary), [])
check('normal header-commit', solve('header-commit', normal), None)
check('boundary header-commit', solve('header-commit', boundary), '')
check('normal count', solve('count', normal), 4)
check('boundary count', solve('count', boundary), 1)
check('normal source-empty', solve('source-empty', normal), False)
check('boundary source-empty', solve('source-empty', boundary), False)
check('normal remote-marker', solve('remote-marker', normal), True)
check('boundary remote-marker', solve('remote-marker', boundary), False)
check('normal remote-offset', solve('remote-offset', normal), 3)
check('boundary remote-offset', solve('remote-offset', boundary), 0)
variant = dict(normal, **{'row_id':'id'+str(N)})
check('variant query or selection payload', solve('identity', variant), ['remote','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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| normal order | ['x', 'y', 'x', 'z'] | ['x', 'y', 'x', 'z'] | Passed |
| boundary order | ['w'] | ['w'] | Passed |
| normal identity | ['remote', 'x'] | ['remote', 'x'] | Passed |
| boundary identity | ['local', ''] | ['local', ''] | Passed |
| normal local-header | Recent | Recent | Passed |
| boundary local-header | None | None | Passed |
| normal remote-header | Directory | Directory | Passed |
| boundary remote-header | Directory | Directory | Passed |
| normal local-ready | ['x', 'z'] | ['x', 'y'] | Failed |
| boundary local-ready | ['w'] | [] | Failed |
| normal header-commit | None | None | Passed |
| boundary header-commit | | | Passed |
| normal count | 4 | 4 | Passed |
| boundary count | 1 | 1 | Passed |
| normal source-empty | False | False | Passed |
| boundary source-empty | False | False | Passed |
| normal remote-marker | True | True | Passed |
| boundary remote-marker | False | False | Passed |
| normal remote-offset | 3 | 3 | Passed |
| boundary remote-offset | 0 | 0 | Passed |
| variant query or selection payload | ['remote', 'id1'] | ['remote', 'id1'] | Passed |
| unknown completion event | {'unchanged': True} | {'unchanged': True} | Passed |
SHA-256 / 2e1a43ee5a2aee6ce8753f0b48bea98bc2cf3852477435138dcfd8c4334ae134
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 == 'order': return d['local']+d['remote']
if event == 'identity': return [d['row_source'],d['row_id']]
if event == 'local-header': return d['local_title'] if d['local'] else None
if event == 'remote-header': return d['remote_title'] if d['remote'] else None
if event == 'local-ready': return d['local']
if event == 'header-commit': return d['row_id'] if d['row_kind']=='option' else None
if event == 'count': return len(d['local'])+len(d['remote'])
if event == 'source-empty': return not d['local'] and not d['remote']
if event == 'remote-marker': return d['remote_pending']
if event == 'remote-offset': return len(d['local'])+(1 if d['local'] else 0)
return {'unchanged': True}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
normal = {'local':['x','y'],'remote':['x','z'],'local_title':'Recent','remote_title':'Directory','remote_pending':True,'row_kind':'header','row_source':'remote','row_id':'x','epoch':N}
boundary = {'local':[],'remote':['w'],'local_title':'Recent','remote_title':'Directory','remote_pending':False,'row_kind':'option','row_source':'local','row_id':'','epoch':N}
check('normal order', solve('order', normal), ['x','y','x','z'])
check('boundary order', solve('order', boundary), ['w'])
check('normal identity', solve('identity', normal), ['remote','x'])
check('boundary identity', solve('identity', boundary), ['local',''])
check('normal local-header', solve('local-header', normal), 'Recent')
check('boundary local-header', solve('local-header', boundary), None)
check('normal remote-header', solve('remote-header', normal), 'Directory')
check('boundary remote-header', solve('remote-header', boundary), 'Directory')
check('normal local-ready', solve('local-ready', normal), ['x','y'])
check('boundary local-ready', solve('local-ready', boundary), [])
check('normal header-commit', solve('header-commit', normal), None)
check('boundary header-commit', solve('header-commit', boundary), '')
check('normal count', solve('count', normal), 4)
check('boundary count', solve('count', boundary), 1)
check('normal source-empty', solve('source-empty', normal), False)
check('boundary source-empty', solve('source-empty', boundary), False)
check('normal remote-marker', solve('remote-marker', normal), True)
check('boundary remote-marker', solve('remote-marker', boundary), False)
check('normal remote-offset', solve('remote-offset', normal), 3)
check('boundary remote-offset', solve('remote-offset', boundary), 0)
variant = dict(normal, **{'row_id':'id'+str(N)})
check('variant query or selection payload', solve('identity', variant), ['remote','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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| normal order | ['x', 'y', 'x', 'z'] | ['x', 'y', 'x', 'z'] | Passed |
| boundary order | ['w'] | ['w'] | Passed |
| normal identity | ['remote', 'x'] | ['remote', 'x'] | Passed |
| boundary identity | ['local', ''] | ['local', ''] | Passed |
| normal local-header | Recent | Recent | Passed |
| boundary local-header | None | None | Passed |
| normal remote-header | Directory | Directory | Passed |
| boundary remote-header | Directory | Directory | Passed |
| normal local-ready | ['x', 'y'] | ['x', 'y'] | Passed |
| boundary local-ready | [] | [] | Passed |
| normal header-commit | None | None | Passed |
| boundary header-commit | | | Passed |
| normal count | 4 | 4 | Passed |
| boundary count | 1 | 1 | Passed |
| normal source-empty | False | False | Passed |
| boundary source-empty | False | False | Passed |
| normal remote-marker | True | True | Passed |
| boundary remote-marker | False | False | Passed |
| normal remote-offset | 3 | 3 | Passed |
| boundary remote-offset | 0 | 0 | Passed |
| variant query or selection payload | ['remote', 'id1'] | ['remote', 'id1'] | Passed |
| unknown completion event | {'unchanged': True} | {'unchanged': True} | Passed |
SHA-256 / 4d1de8bb97d7fbc80ea9ad117718c4dea9fb70b183c783c6c9a4e09af2da2340
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:37.652835+00:00.
Case digest / ae5a4e8e3c1132b3ce95c7a69ee780353aa64ed1b00d8e969d316bc5e4997727