FA-33646 / Menu interactions / Open access
Busy document menu lane blocks unrelated document commands · case 01
Busy document menu lane blocks unrelated document commands.
ROOT CAUSE
The menu-command-queue model applies `[] if p['busy'] else p['queue']` at its lane operation instead of the stipulated transformation.
VERIFIED REPAIR
Apply `[x for x in p['queue'] if x['lane'] not in p['busy']]` at lane.
Unsuccessful approach: The attempted repair `p['queue']` still violates the lane oracle.
Case contract
Queued menu commands preserve invocation snapshots and FIFO order; cancellation and completion act on transaction identity without blocking unrelated command lanes.
Why this case matters
Cascading and context menus require coherent command and session state as content changes.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
import unicodedata
N = 1
observations = []
def solve(action, p):
if action == 'enqueue-snapshot':
return p['queue']+[{'id':p['id'],'context':p['captured']}]
if action == 'dequeue':
return (p[0],p[1:])
if action == 'cancel-id':
return [x for x in p['queue'] if x['id']!=p['id']]
if action == 'lane':
return [] if p['busy'] else p['queue']
if action == 'failure-next':
return p['remaining'] if p['continue_on_error'] else []
if action == 'close-policy':
return p['queue'] if p['survive_close'] else []
return {'error': 'unsupported menu operation'}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('enqueue-snapshot contract', solve('enqueue-snapshot', {'queue':[{'id':0,'context':'old'}],'id':N,'captured':'doc','ambient':'other'}), [{'id':0,'context':'old'},{'id':N,'context':'doc'}])
check('dequeue contract', solve('dequeue', [N,N+1,N+2]), (N,[N+1,N+2]))
check('cancel-id contract', solve('cancel-id', {'queue':[{'id':N,'command':'copy'},{'id':N+1,'command':'copy'}],'id':N,'command':'copy'}), [{'id':N+1,'command':'copy'}])
check('lane contract', solve('lane', {'queue':[{'lane':'a','id':N},{'lane':'b','id':N+1}],'busy':['a']}), [{'lane':'b','id':N+1}])
check('failure-next contract', solve('failure-next', {'remaining':[N+1],'failed':[N],'continue_on_error':True}), [N+1])
check('close-policy contract', solve('close-policy', {'queue':[N,N+1],'survive_close':True}), [N,N+1])
check('unknown operation', solve('unknown', {}), {'error': 'unsupported menu operation'})
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 |
|---|---|---|---|
| enqueue-snapshot contract | [{'context': 'old', 'id': 0}, {'context': 'doc', 'id': 1}] | [{'context': 'old', 'id': 0}, {'context': 'doc', 'id': 1}] | Passed |
| dequeue contract | [1, [2, 3]] | [1, [2, 3]] | Passed |
| cancel-id contract | [{'command': 'copy', 'id': 2}] | [{'command': 'copy', 'id': 2}] | Passed |
| lane contract | [] | [{'id': 2, 'lane': 'b'}] | Failed |
| failure-next contract | [2] | [2] | Passed |
| close-policy contract | [1, 2] | [1, 2] | Passed |
| unknown operation | {'error': 'unsupported menu operation'} | {'error': 'unsupported menu operation'} | Passed |
SHA-256 / d6cca2c3f7d82a84a7562fcb90445dfdd0bc7145d52975b674d3ac0d9ac43bb6
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
import unicodedata
N = 1
observations = []
def solve(action, p):
if action == 'enqueue-snapshot':
return p['queue']+[{'id':p['id'],'context':p['captured']}]
if action == 'dequeue':
return (p[0],p[1:])
if action == 'cancel-id':
return [x for x in p['queue'] if x['id']!=p['id']]
if action == 'lane':
return p['queue']
if action == 'failure-next':
return p['remaining'] if p['continue_on_error'] else []
if action == 'close-policy':
return p['queue'] if p['survive_close'] else []
return {'error': 'unsupported menu operation'}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('enqueue-snapshot contract', solve('enqueue-snapshot', {'queue':[{'id':0,'context':'old'}],'id':N,'captured':'doc','ambient':'other'}), [{'id':0,'context':'old'},{'id':N,'context':'doc'}])
check('dequeue contract', solve('dequeue', [N,N+1,N+2]), (N,[N+1,N+2]))
check('cancel-id contract', solve('cancel-id', {'queue':[{'id':N,'command':'copy'},{'id':N+1,'command':'copy'}],'id':N,'command':'copy'}), [{'id':N+1,'command':'copy'}])
check('lane contract', solve('lane', {'queue':[{'lane':'a','id':N},{'lane':'b','id':N+1}],'busy':['a']}), [{'lane':'b','id':N+1}])
check('failure-next contract', solve('failure-next', {'remaining':[N+1],'failed':[N],'continue_on_error':True}), [N+1])
check('close-policy contract', solve('close-policy', {'queue':[N,N+1],'survive_close':True}), [N,N+1])
check('unknown operation', solve('unknown', {}), {'error': 'unsupported menu operation'})
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 |
|---|---|---|---|
| enqueue-snapshot contract | [{'context': 'old', 'id': 0}, {'context': 'doc', 'id': 1}] | [{'context': 'old', 'id': 0}, {'context': 'doc', 'id': 1}] | Passed |
| dequeue contract | [1, [2, 3]] | [1, [2, 3]] | Passed |
| cancel-id contract | [{'command': 'copy', 'id': 2}] | [{'command': 'copy', 'id': 2}] | Passed |
| lane contract | [{'id': 1, 'lane': 'a'}, {'id': 2, 'lane': 'b'}] | [{'id': 2, 'lane': 'b'}] | Failed |
| failure-next contract | [2] | [2] | Passed |
| close-policy contract | [1, 2] | [1, 2] | Passed |
| unknown operation | {'error': 'unsupported menu operation'} | {'error': 'unsupported menu operation'} | Passed |
SHA-256 / a774ebbb54672637efd3c90902e8635a5424a2b91f832868997a778e2d3dd2be
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
import unicodedata
N = 1
observations = []
def solve(action, p):
if action == 'enqueue-snapshot':
return p['queue']+[{'id':p['id'],'context':p['captured']}]
if action == 'dequeue':
return (p[0],p[1:])
if action == 'cancel-id':
return [x for x in p['queue'] if x['id']!=p['id']]
if action == 'lane':
return [x for x in p['queue'] if x['lane'] not in p['busy']]
if action == 'failure-next':
return p['remaining'] if p['continue_on_error'] else []
if action == 'close-policy':
return p['queue'] if p['survive_close'] else []
return {'error': 'unsupported menu operation'}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('enqueue-snapshot contract', solve('enqueue-snapshot', {'queue':[{'id':0,'context':'old'}],'id':N,'captured':'doc','ambient':'other'}), [{'id':0,'context':'old'},{'id':N,'context':'doc'}])
check('dequeue contract', solve('dequeue', [N,N+1,N+2]), (N,[N+1,N+2]))
check('cancel-id contract', solve('cancel-id', {'queue':[{'id':N,'command':'copy'},{'id':N+1,'command':'copy'}],'id':N,'command':'copy'}), [{'id':N+1,'command':'copy'}])
check('lane contract', solve('lane', {'queue':[{'lane':'a','id':N},{'lane':'b','id':N+1}],'busy':['a']}), [{'lane':'b','id':N+1}])
check('failure-next contract', solve('failure-next', {'remaining':[N+1],'failed':[N],'continue_on_error':True}), [N+1])
check('close-policy contract', solve('close-policy', {'queue':[N,N+1],'survive_close':True}), [N,N+1])
check('unknown operation', solve('unknown', {}), {'error': 'unsupported menu operation'})
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 |
|---|---|---|---|
| enqueue-snapshot contract | [{'context': 'old', 'id': 0}, {'context': 'doc', 'id': 1}] | [{'context': 'old', 'id': 0}, {'context': 'doc', 'id': 1}] | Passed |
| dequeue contract | [1, [2, 3]] | [1, [2, 3]] | Passed |
| cancel-id contract | [{'command': 'copy', 'id': 2}] | [{'command': 'copy', 'id': 2}] | Passed |
| lane contract | [{'id': 2, 'lane': 'b'}] | [{'id': 2, 'lane': 'b'}] | Passed |
| failure-next contract | [2] | [2] | Passed |
| close-policy contract | [1, 2] | [1, 2] | Passed |
| unknown operation | {'error': 'unsupported menu operation'} | {'error': 'unsupported menu operation'} | Passed |
SHA-256 / 6859c24cf8fd36a7d1ce9f4be3cbab464829480ba910368736e5b967a0bca86d
Verification & scope
Offline supplied-valid-payload model; excludes DOM, keyboard, focus, selection, announcements and browser conformance. 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:42:24.415411+00:00.
Case digest / c8311d7fb3b3c58530283a03b654b51883b39b754f2d906a51a75da77aa0a9e1