{"abstract":"The rebase completion transition produces an incorrect observable state.","category":"Autocomplete interactions","checks":22,"contract":"During IME composition, preedit is visible but never searched or committed. Starting composition saves the query snapshot; cancellation restores it; finalization schedules one final query. Candidate acceptance belongs to the IME, and result visibility is suspended until final text is available.","evaluation_group":"s3-autocomplete-composition","failed_approach":"The attempted repair uses `{'active':None,'query':d['preedit']}`, which still violates a normal or boundary completion fixture.","family":"s3-autocomplete-interactions-composition-rebase","id":"FA-21886","implementations":{"attempt":{"sha256":"5ac65dbd64cc2f66a9a98919af25db8168abb36d9ab5c4dc751cabe919c321b0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(event, d):\n    if event == 'start': return {'saved':d['query'],'composing':True}\n    if event == 'preedit': return {'display':d['preedit'],'query':d['query']}\n    if event == 'schedule': return [] if d['composing'] else [d['query']]\n    if event == 'finalize': return {'query':d['final'],'revision':d['revision']+1}\n    if event == 'cancel': return {'query':d['saved'],'composing':False}\n    if event == 'candidate': return None if d['composing'] else d['active']\n    if event == 'visibility': return [] if d['composing'] else d['results']\n    if event == 'invalidate': return {'pending':[],'revision':d['revision']+1}\n    if event == 'display-end': return d['final']\n    if event == 'rebase': return {'active':None,'query':d['preedit']}\n    return {'unchanged': True}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nnormal = {'query':'ca','preedit':'猫','final':'猫咪','saved':'cat','revision':N,'active':'cat-id','pending':['ca'],'results':['cat-id'],'composing':True}\nboundary = {'query':'','preedit':'','final':'','saved':'','revision':N,'active':None,'pending':[],'results':[],'composing':False}\ncheck('normal start', solve('start', normal), {'saved':'ca','composing':True})\ncheck('boundary start', solve('start', boundary), {'saved':'','composing':True})\ncheck('normal preedit', solve('preedit', normal), {'display':'猫','query':'ca'})\ncheck('boundary preedit', solve('preedit', boundary), {'display':'','query':''})\ncheck('normal schedule', solve('schedule', normal), [])\ncheck('boundary schedule', solve('schedule', boundary), [''])\ncheck('normal finalize', solve('finalize', normal), {'query':'猫咪','revision':N+1})\ncheck('boundary finalize', solve('finalize', boundary), {'query':'','revision':N+1})\ncheck('normal cancel', solve('cancel', normal), {'query':'cat','composing':False})\ncheck('boundary cancel', solve('cancel', boundary), {'query':'','composing':False})\ncheck('normal candidate', solve('candidate', normal), None)\ncheck('boundary candidate', solve('candidate', boundary), None)\ncheck('normal visibility', solve('visibility', normal), [])\ncheck('boundary visibility', solve('visibility', boundary), [])\ncheck('normal invalidate', solve('invalidate', normal), {'pending':[],'revision':N+1})\ncheck('boundary invalidate', solve('invalidate', boundary), {'pending':[],'revision':N+1})\ncheck('normal display-end', solve('display-end', normal), '猫咪')\ncheck('boundary display-end', solve('display-end', boundary), '')\ncheck('normal rebase', solve('rebase', normal), {'active':None,'query':'猫咪'})\ncheck('boundary rebase', solve('rebase', boundary), {'active':None,'query':''})\nvariant = dict(normal, **{'final':'猫'*N})\ncheck('variant query or selection payload', solve('display-end', variant), '猫'*N)\ncheck('unknown completion event', solve('unrecognized', normal), {'unchanged': True})\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"e672a4e339b85a41e2d9b8b6d9297460f211d49b735633f18c5e1c4789f921ba","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(event, d):\n    if event == 'start': return {'saved':d['query'],'composing':True}\n    if event == 'preedit': return {'display':d['preedit'],'query':d['query']}\n    if event == 'schedule': return [] if d['composing'] else [d['query']]\n    if event == 'finalize': return {'query':d['final'],'revision':d['revision']+1}\n    if event == 'cancel': return {'query':d['saved'],'composing':False}\n    if event == 'candidate': return None if d['composing'] else d['active']\n    if event == 'visibility': return [] if d['composing'] else d['results']\n    if event == 'invalidate': return {'pending':[],'revision':d['revision']+1}\n    if event == 'display-end': return d['final']\n    if event == 'rebase': return {'active':d['active'],'query':d['final']}\n    return {'unchanged': True}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nnormal = {'query':'ca','preedit':'猫','final':'猫咪','saved':'cat','revision':N,'active':'cat-id','pending':['ca'],'results':['cat-id'],'composing':True}\nboundary = {'query':'','preedit':'','final':'','saved':'','revision':N,'active':None,'pending':[],'results':[],'composing':False}\ncheck('normal start', solve('start', normal), {'saved':'ca','composing':True})\ncheck('boundary start', solve('start', boundary), {'saved':'','composing':True})\ncheck('normal preedit', solve('preedit', normal), {'display':'猫','query':'ca'})\ncheck('boundary preedit', solve('preedit', boundary), {'display':'','query':''})\ncheck('normal schedule', solve('schedule', normal), [])\ncheck('boundary schedule', solve('schedule', boundary), [''])\ncheck('normal finalize', solve('finalize', normal), {'query':'猫咪','revision':N+1})\ncheck('boundary finalize', solve('finalize', boundary), {'query':'','revision':N+1})\ncheck('normal cancel', solve('cancel', normal), {'query':'cat','composing':False})\ncheck('boundary cancel', solve('cancel', boundary), {'query':'','composing':False})\ncheck('normal candidate', solve('candidate', normal), None)\ncheck('boundary candidate', solve('candidate', boundary), None)\ncheck('normal visibility', solve('visibility', normal), [])\ncheck('boundary visibility', solve('visibility', boundary), [])\ncheck('normal invalidate', solve('invalidate', normal), {'pending':[],'revision':N+1})\ncheck('boundary invalidate', solve('invalidate', boundary), {'pending':[],'revision':N+1})\ncheck('normal display-end', solve('display-end', normal), '猫咪')\ncheck('boundary display-end', solve('display-end', boundary), '')\ncheck('normal rebase', solve('rebase', normal), {'active':None,'query':'猫咪'})\ncheck('boundary rebase', solve('rebase', boundary), {'active':None,'query':''})\nvariant = dict(normal, **{'final':'猫'*N})\ncheck('variant query or selection payload', solve('display-end', variant), '猫'*N)\ncheck('unknown completion event', solve('unrecognized', normal), {'unchanged': True})\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"6f31ef14522eb7101d5bada1f9149f312d1abb5fbc9e775a6f3acd059f4c0b53","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(event, d):\n    if event == 'start': return {'saved':d['query'],'composing':True}\n    if event == 'preedit': return {'display':d['preedit'],'query':d['query']}\n    if event == 'schedule': return [] if d['composing'] else [d['query']]\n    if event == 'finalize': return {'query':d['final'],'revision':d['revision']+1}\n    if event == 'cancel': return {'query':d['saved'],'composing':False}\n    if event == 'candidate': return None if d['composing'] else d['active']\n    if event == 'visibility': return [] if d['composing'] else d['results']\n    if event == 'invalidate': return {'pending':[],'revision':d['revision']+1}\n    if event == 'display-end': return d['final']\n    if event == 'rebase': return {'active':None,'query':d['final']}\n    return {'unchanged': True}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nnormal = {'query':'ca','preedit':'猫','final':'猫咪','saved':'cat','revision':N,'active':'cat-id','pending':['ca'],'results':['cat-id'],'composing':True}\nboundary = {'query':'','preedit':'','final':'','saved':'','revision':N,'active':None,'pending':[],'results':[],'composing':False}\ncheck('normal start', solve('start', normal), {'saved':'ca','composing':True})\ncheck('boundary start', solve('start', boundary), {'saved':'','composing':True})\ncheck('normal preedit', solve('preedit', normal), {'display':'猫','query':'ca'})\ncheck('boundary preedit', solve('preedit', boundary), {'display':'','query':''})\ncheck('normal schedule', solve('schedule', normal), [])\ncheck('boundary schedule', solve('schedule', boundary), [''])\ncheck('normal finalize', solve('finalize', normal), {'query':'猫咪','revision':N+1})\ncheck('boundary finalize', solve('finalize', boundary), {'query':'','revision':N+1})\ncheck('normal cancel', solve('cancel', normal), {'query':'cat','composing':False})\ncheck('boundary cancel', solve('cancel', boundary), {'query':'','composing':False})\ncheck('normal candidate', solve('candidate', normal), None)\ncheck('boundary candidate', solve('candidate', boundary), None)\ncheck('normal visibility', solve('visibility', normal), [])\ncheck('boundary visibility', solve('visibility', boundary), [])\ncheck('normal invalidate', solve('invalidate', normal), {'pending':[],'revision':N+1})\ncheck('boundary invalidate', solve('invalidate', boundary), {'pending':[],'revision':N+1})\ncheck('normal display-end', solve('display-end', normal), '猫咪')\ncheck('boundary display-end', solve('display-end', boundary), '')\ncheck('normal rebase', solve('rebase', normal), {'active':None,'query':'猫咪'})\ncheck('boundary rebase', solve('rebase', boundary), {'active':None,'query':''})\nvariant = dict(normal, **{'final':'猫'*N})\ncheck('variant query or selection payload', solve('display-end', variant), '猫'*N)\ncheck('unknown completion event', solve('unrecognized', normal), {'unchanged': True})\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"s3-autocomplete-interactions-composition-rebase","generated_at":"2026-09-29T14:40:33.123746+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Autocomplete couples draft text, suggestion identity and asynchronous presentation; this bounded lifecycle model isolates one observable interaction defect.","repair":"Implement the rebase contract using `{'active':None,'query':d['final']}`.","root_cause":"At composition/rebase, the implementation evaluates `{'active':d['active'],'query':d['final']}` instead of preserving the specified completion transition.","sha256":"997a9613cf6d7e6620ab898aa70241787ab2c9e6c43be6c7d98e1193a921910f","title":"Composition-aware suggestion lifecycle: post-composition matching retains the provisional highlight · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":51.68,"exit_code":1,"observations":[{"actual":{"composing":true,"saved":"ca"},"check":"normal start","expected":{"composing":true,"saved":"ca"},"passed":true},{"actual":{"composing":true,"saved":""},"check":"boundary start","expected":{"composing":true,"saved":""},"passed":true},{"actual":{"display":"猫","query":"ca"},"check":"normal preedit","expected":{"display":"猫","query":"ca"},"passed":true},{"actual":{"display":"","query":""},"check":"boundary preedit","expected":{"display":"","query":""},"passed":true},{"actual":[],"check":"normal schedule","expected":[],"passed":true},{"actual":[""],"check":"boundary schedule","expected":[""],"passed":true},{"actual":{"query":"猫咪","revision":2},"check":"normal finalize","expected":{"query":"猫咪","revision":2},"passed":true},{"actual":{"query":"","revision":2},"check":"boundary finalize","expected":{"query":"","revision":2},"passed":true},{"actual":{"composing":false,"query":"cat"},"check":"normal cancel","expected":{"composing":false,"query":"cat"},"passed":true},{"actual":{"composing":false,"query":""},"check":"boundary cancel","expected":{"composing":false,"query":""},"passed":true},{"actual":null,"check":"normal candidate","expected":null,"passed":true},{"actual":null,"check":"boundary candidate","expected":null,"passed":true},{"actual":[],"check":"normal visibility","expected":[],"passed":true},{"actual":[],"check":"boundary visibility","expected":[],"passed":true},{"actual":{"pending":[],"revision":2},"check":"normal invalidate","expected":{"pending":[],"revision":2},"passed":true},{"actual":{"pending":[],"revision":2},"check":"boundary invalidate","expected":{"pending":[],"revision":2},"passed":true},{"actual":"猫咪","check":"normal display-end","expected":"猫咪","passed":true},{"actual":"","check":"boundary display-end","expected":"","passed":true},{"actual":{"active":null,"query":"猫"},"check":"normal rebase","expected":{"active":null,"query":"猫咪"},"passed":false},{"actual":{"active":null,"query":""},"check":"boundary rebase","expected":{"active":null,"query":""},"passed":true},{"actual":"猫","check":"variant query or selection payload","expected":"猫","passed":true},{"actual":{"unchanged":true},"check":"unknown completion event","expected":{"unchanged":true},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"normal start\", \"actual\": {\"saved\": \"ca\", \"composing\": true}, \"expected\": {\"saved\": \"ca\", \"composing\": true}, \"passed\": true}, {\"check\": \"boundary start\", \"actual\": {\"saved\": \"\", \"composing\": true}, \"expected\": {\"saved\": \"\", \"composing\": true}, \"passed\": true}, {\"check\": \"normal preedit\", \"actual\": {\"display\": \"猫\", \"query\": \"ca\"}, \"expected\": {\"display\": \"猫\", \"query\": \"ca\"}, \"passed\": true}, {\"check\": \"boundary preedit\", \"actual\": {\"display\": \"\", \"query\": \"\"}, \"expected\": {\"display\": \"\", \"query\": \"\"}, \"passed\": true}, {\"check\": \"normal schedule\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"boundary schedule\", \"actual\": [\"\"], \"expected\": [\"\"], \"passed\": true}, {\"check\": \"normal finalize\", \"actual\": {\"query\": \"猫咪\", \"revision\": 2}, \"expected\": {\"query\": \"猫咪\", \"revision\": 2}, \"passed\": true}, {\"check\": \"boundary finalize\", \"actual\": {\"query\": \"\", \"revision\": 2}, \"expected\": {\"query\": \"\", \"revision\": 2}, \"passed\": true}, {\"check\": \"normal cancel\", \"actual\": {\"query\": \"cat\", \"composing\": false}, \"expected\": {\"query\": \"cat\", \"composing\": false}, \"passed\": true}, {\"check\": \"boundary cancel\", \"actual\": {\"query\": \"\", \"composing\": false}, \"expected\": {\"query\": \"\", \"composing\": false}, \"passed\": true}, {\"check\": \"normal candidate\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"boundary candidate\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"normal visibility\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"boundary visibility\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal invalidate\", \"actual\": {\"pending\": [], \"revision\": 2}, \"expected\": {\"pending\": [], \"revision\": 2}, \"passed\": true}, {\"check\": \"boundary invalidate\", \"actual\": {\"pending\": [], \"revision\": 2}, \"expected\": {\"pending\": [], \"revision\": 2}, \"passed\": true}, {\"check\": \"normal display-end\", \"actual\": \"猫咪\", \"expected\": \"猫咪\", \"passed\": true}, {\"check\": \"boundary display-end\", \"actual\": \"\", \"expected\": \"\", \"passed\": true}, {\"check\": \"normal rebase\", \"actual\": {\"active\": null, \"query\": \"猫\"}, \"expected\": {\"active\": null, \"query\": \"猫咪\"}, \"passed\": false}, {\"check\": \"boundary rebase\", \"actual\": {\"active\": null, \"query\": \"\"}, \"expected\": {\"active\": null, \"query\": \"\"}, \"passed\": true}, {\"check\": \"variant query or selection payload\", \"actual\": \"猫\", \"expected\": \"猫\", \"passed\": true}, {\"check\": \"unknown completion event\", \"actual\": {\"unchanged\": true}, \"expected\": {\"unchanged\": true}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.335,"exit_code":1,"observations":[{"actual":{"composing":true,"saved":"ca"},"check":"normal start","expected":{"composing":true,"saved":"ca"},"passed":true},{"actual":{"composing":true,"saved":""},"check":"boundary start","expected":{"composing":true,"saved":""},"passed":true},{"actual":{"display":"猫","query":"ca"},"check":"normal preedit","expected":{"display":"猫","query":"ca"},"passed":true},{"actual":{"display":"","query":""},"check":"boundary preedit","expected":{"display":"","query":""},"passed":true},{"actual":[],"check":"normal schedule","expected":[],"passed":true},{"actual":[""],"check":"boundary schedule","expected":[""],"passed":true},{"actual":{"query":"猫咪","revision":2},"check":"normal finalize","expected":{"query":"猫咪","revision":2},"passed":true},{"actual":{"query":"","revision":2},"check":"boundary finalize","expected":{"query":"","revision":2},"passed":true},{"actual":{"composing":false,"query":"cat"},"check":"normal cancel","expected":{"composing":false,"query":"cat"},"passed":true},{"actual":{"composing":false,"query":""},"check":"boundary cancel","expected":{"composing":false,"query":""},"passed":true},{"actual":null,"check":"normal candidate","expected":null,"passed":true},{"actual":null,"check":"boundary candidate","expected":null,"passed":true},{"actual":[],"check":"normal visibility","expected":[],"passed":true},{"actual":[],"check":"boundary visibility","expected":[],"passed":true},{"actual":{"pending":[],"revision":2},"check":"normal invalidate","expected":{"pending":[],"revision":2},"passed":true},{"actual":{"pending":[],"revision":2},"check":"boundary invalidate","expected":{"pending":[],"revision":2},"passed":true},{"actual":"猫咪","check":"normal display-end","expected":"猫咪","passed":true},{"actual":"","check":"boundary display-end","expected":"","passed":true},{"actual":{"active":"cat-id","query":"猫咪"},"check":"normal rebase","expected":{"active":null,"query":"猫咪"},"passed":false},{"actual":{"active":null,"query":""},"check":"boundary rebase","expected":{"active":null,"query":""},"passed":true},{"actual":"猫","check":"variant query or selection payload","expected":"猫","passed":true},{"actual":{"unchanged":true},"check":"unknown completion event","expected":{"unchanged":true},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"normal start\", \"actual\": {\"saved\": \"ca\", \"composing\": true}, \"expected\": {\"saved\": \"ca\", \"composing\": true}, \"passed\": true}, {\"check\": \"boundary start\", \"actual\": {\"saved\": \"\", \"composing\": true}, \"expected\": {\"saved\": \"\", \"composing\": true}, \"passed\": true}, {\"check\": \"normal preedit\", \"actual\": {\"display\": \"猫\", \"query\": \"ca\"}, \"expected\": {\"display\": \"猫\", \"query\": \"ca\"}, \"passed\": true}, {\"check\": \"boundary preedit\", \"actual\": {\"display\": \"\", \"query\": \"\"}, \"expected\": {\"display\": \"\", \"query\": \"\"}, \"passed\": true}, {\"check\": \"normal schedule\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"boundary schedule\", \"actual\": [\"\"], \"expected\": [\"\"], \"passed\": true}, {\"check\": \"normal finalize\", \"actual\": {\"query\": \"猫咪\", \"revision\": 2}, \"expected\": {\"query\": \"猫咪\", \"revision\": 2}, \"passed\": true}, {\"check\": \"boundary finalize\", \"actual\": {\"query\": \"\", \"revision\": 2}, \"expected\": {\"query\": \"\", \"revision\": 2}, \"passed\": true}, {\"check\": \"normal cancel\", \"actual\": {\"query\": \"cat\", \"composing\": false}, \"expected\": {\"query\": \"cat\", \"composing\": false}, \"passed\": true}, {\"check\": \"boundary cancel\", \"actual\": {\"query\": \"\", \"composing\": false}, \"expected\": {\"query\": \"\", \"composing\": false}, \"passed\": true}, {\"check\": \"normal candidate\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"boundary candidate\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"normal visibility\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"boundary visibility\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal invalidate\", \"actual\": {\"pending\": [], \"revision\": 2}, \"expected\": {\"pending\": [], \"revision\": 2}, \"passed\": true}, {\"check\": \"boundary invalidate\", \"actual\": {\"pending\": [], \"revision\": 2}, \"expected\": {\"pending\": [], \"revision\": 2}, \"passed\": true}, {\"check\": \"normal display-end\", \"actual\": \"猫咪\", \"expected\": \"猫咪\", \"passed\": true}, {\"check\": \"boundary display-end\", \"actual\": \"\", \"expected\": \"\", \"passed\": true}, {\"check\": \"normal rebase\", \"actual\": {\"active\": \"cat-id\", \"query\": \"猫咪\"}, \"expected\": {\"active\": null, \"query\": \"猫咪\"}, \"passed\": false}, {\"check\": \"boundary rebase\", \"actual\": {\"active\": null, \"query\": \"\"}, \"expected\": {\"active\": null, \"query\": \"\"}, \"passed\": true}, {\"check\": \"variant query or selection payload\", \"actual\": \"猫\", \"expected\": \"猫\", \"passed\": true}, {\"check\": \"unknown completion event\", \"actual\": {\"unchanged\": true}, \"expected\": {\"unchanged\": true}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.421,"exit_code":0,"observations":[{"actual":{"composing":true,"saved":"ca"},"check":"normal start","expected":{"composing":true,"saved":"ca"},"passed":true},{"actual":{"composing":true,"saved":""},"check":"boundary start","expected":{"composing":true,"saved":""},"passed":true},{"actual":{"display":"猫","query":"ca"},"check":"normal preedit","expected":{"display":"猫","query":"ca"},"passed":true},{"actual":{"display":"","query":""},"check":"boundary preedit","expected":{"display":"","query":""},"passed":true},{"actual":[],"check":"normal schedule","expected":[],"passed":true},{"actual":[""],"check":"boundary schedule","expected":[""],"passed":true},{"actual":{"query":"猫咪","revision":2},"check":"normal finalize","expected":{"query":"猫咪","revision":2},"passed":true},{"actual":{"query":"","revision":2},"check":"boundary finalize","expected":{"query":"","revision":2},"passed":true},{"actual":{"composing":false,"query":"cat"},"check":"normal cancel","expected":{"composing":false,"query":"cat"},"passed":true},{"actual":{"composing":false,"query":""},"check":"boundary cancel","expected":{"composing":false,"query":""},"passed":true},{"actual":null,"check":"normal candidate","expected":null,"passed":true},{"actual":null,"check":"boundary candidate","expected":null,"passed":true},{"actual":[],"check":"normal visibility","expected":[],"passed":true},{"actual":[],"check":"boundary visibility","expected":[],"passed":true},{"actual":{"pending":[],"revision":2},"check":"normal invalidate","expected":{"pending":[],"revision":2},"passed":true},{"actual":{"pending":[],"revision":2},"check":"boundary invalidate","expected":{"pending":[],"revision":2},"passed":true},{"actual":"猫咪","check":"normal display-end","expected":"猫咪","passed":true},{"actual":"","check":"boundary display-end","expected":"","passed":true},{"actual":{"active":null,"query":"猫咪"},"check":"normal rebase","expected":{"active":null,"query":"猫咪"},"passed":true},{"actual":{"active":null,"query":""},"check":"boundary rebase","expected":{"active":null,"query":""},"passed":true},{"actual":"猫","check":"variant query or selection payload","expected":"猫","passed":true},{"actual":{"unchanged":true},"check":"unknown completion event","expected":{"unchanged":true},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"normal start\", \"actual\": {\"saved\": \"ca\", \"composing\": true}, \"expected\": {\"saved\": \"ca\", \"composing\": true}, \"passed\": true}, {\"check\": \"boundary start\", \"actual\": {\"saved\": \"\", \"composing\": true}, \"expected\": {\"saved\": \"\", \"composing\": true}, \"passed\": true}, {\"check\": \"normal preedit\", \"actual\": {\"display\": \"猫\", \"query\": \"ca\"}, \"expected\": {\"display\": \"猫\", \"query\": \"ca\"}, \"passed\": true}, {\"check\": \"boundary preedit\", \"actual\": {\"display\": \"\", \"query\": \"\"}, \"expected\": {\"display\": \"\", \"query\": \"\"}, \"passed\": true}, {\"check\": \"normal schedule\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"boundary schedule\", \"actual\": [\"\"], \"expected\": [\"\"], \"passed\": true}, {\"check\": \"normal finalize\", \"actual\": {\"query\": \"猫咪\", \"revision\": 2}, \"expected\": {\"query\": \"猫咪\", \"revision\": 2}, \"passed\": true}, {\"check\": \"boundary finalize\", \"actual\": {\"query\": \"\", \"revision\": 2}, \"expected\": {\"query\": \"\", \"revision\": 2}, \"passed\": true}, {\"check\": \"normal cancel\", \"actual\": {\"query\": \"cat\", \"composing\": false}, \"expected\": {\"query\": \"cat\", \"composing\": false}, \"passed\": true}, {\"check\": \"boundary cancel\", \"actual\": {\"query\": \"\", \"composing\": false}, \"expected\": {\"query\": \"\", \"composing\": false}, \"passed\": true}, {\"check\": \"normal candidate\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"boundary candidate\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"normal visibility\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"boundary visibility\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal invalidate\", \"actual\": {\"pending\": [], \"revision\": 2}, \"expected\": {\"pending\": [], \"revision\": 2}, \"passed\": true}, {\"check\": \"boundary invalidate\", \"actual\": {\"pending\": [], \"revision\": 2}, \"expected\": {\"pending\": [], \"revision\": 2}, \"passed\": true}, {\"check\": \"normal display-end\", \"actual\": \"猫咪\", \"expected\": \"猫咪\", \"passed\": true}, {\"check\": \"boundary display-end\", \"actual\": \"\", \"expected\": \"\", \"passed\": true}, {\"check\": \"normal rebase\", \"actual\": {\"active\": null, \"query\": \"猫咪\"}, \"expected\": {\"active\": null, \"query\": \"猫咪\"}, \"passed\": true}, {\"check\": \"boundary rebase\", \"actual\": {\"active\": null, \"query\": \"\"}, \"expected\": {\"active\": null, \"query\": \"\"}, \"passed\": true}, {\"check\": \"variant query or selection payload\", \"actual\": \"猫\", \"expected\": \"猫\", \"passed\": true}, {\"check\": \"unknown completion event\", \"actual\": {\"unchanged\": true}, \"expected\": {\"unchanged\": true}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}