FA-33286 / Menu interactions / Open access
Dismissing touch menu leaves its root sheet registered · case 01
Dismissing touch menu leaves its root sheet registered.
ROOT CAUSE
The touch-submenu-sheet model applies `p[:-1]` at its dismiss operation instead of the stipulated transformation.
VERIFIED REPAIR
Apply `[]` at dismiss.
Unsuccessful approach: The attempted repair `p[:1]` still violates the dismiss oracle.
Case contract
A compact touch menu displays one submenu sheet at a time with a reversible page stack; dismissal removes the entire stack and back preserves the context.
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 == 'push':
return p['stack']+[p['page']]
if action == 'back':
return p[:-1] if len(p)>1 else p
if action == 'visible':
return p[-1:]
if action == 'dismiss':
return p[:-1]
if action == 'back-context':
return {'stack':p['stack'][:-1],'context':p['context']}
if action == 'root-back':
return 'dismiss' if len(p)==1 else 'pop'
return {'error': 'unsupported menu operation'}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('push contract', solve('push', {'stack':['root'],'page':'child'+str(N)}), ['root','child'+str(N)])
check('back contract', solve('back', ['root','child'+str(N)]), ['root'])
check('visible contract', solve('visible', ['root','child'+str(N)]), ['child'+str(N)])
check('dismiss contract', solve('dismiss', ['root','a','b'+str(N)]), [])
check('back-context contract', solve('back-context', {'stack':['r','a'],'context':N,'ambient':N+1}), {'stack':['r'],'context':N})
check('root-back contract', solve('root-back', ['root'+str(N)]), 'dismiss')
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 |
|---|---|---|---|
| push contract | ['root', 'child1'] | ['root', 'child1'] | Passed |
| back contract | ['root'] | ['root'] | Passed |
| visible contract | ['child1'] | ['child1'] | Passed |
| dismiss contract | ['root', 'a'] | [] | Failed |
| back-context contract | {'context': 1, 'stack': ['r']} | {'context': 1, 'stack': ['r']} | Passed |
| root-back contract | dismiss | dismiss | Passed |
| unknown operation | {'error': 'unsupported menu operation'} | {'error': 'unsupported menu operation'} | Passed |
SHA-256 / 7354518632aedb82fc3a82a120c55a946816b2b3f4b1c5af84969c7f1061131e
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 == 'push':
return p['stack']+[p['page']]
if action == 'back':
return p[:-1] if len(p)>1 else p
if action == 'visible':
return p[-1:]
if action == 'dismiss':
return p[:1]
if action == 'back-context':
return {'stack':p['stack'][:-1],'context':p['context']}
if action == 'root-back':
return 'dismiss' if len(p)==1 else 'pop'
return {'error': 'unsupported menu operation'}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('push contract', solve('push', {'stack':['root'],'page':'child'+str(N)}), ['root','child'+str(N)])
check('back contract', solve('back', ['root','child'+str(N)]), ['root'])
check('visible contract', solve('visible', ['root','child'+str(N)]), ['child'+str(N)])
check('dismiss contract', solve('dismiss', ['root','a','b'+str(N)]), [])
check('back-context contract', solve('back-context', {'stack':['r','a'],'context':N,'ambient':N+1}), {'stack':['r'],'context':N})
check('root-back contract', solve('root-back', ['root'+str(N)]), 'dismiss')
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 |
|---|---|---|---|
| push contract | ['root', 'child1'] | ['root', 'child1'] | Passed |
| back contract | ['root'] | ['root'] | Passed |
| visible contract | ['child1'] | ['child1'] | Passed |
| dismiss contract | ['root'] | [] | Failed |
| back-context contract | {'context': 1, 'stack': ['r']} | {'context': 1, 'stack': ['r']} | Passed |
| root-back contract | dismiss | dismiss | Passed |
| unknown operation | {'error': 'unsupported menu operation'} | {'error': 'unsupported menu operation'} | Passed |
SHA-256 / 4059f98abda8323377f4195472249cc92e972b732f6d19dac2330eb6e0a1fad4
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 == 'push':
return p['stack']+[p['page']]
if action == 'back':
return p[:-1] if len(p)>1 else p
if action == 'visible':
return p[-1:]
if action == 'dismiss':
return []
if action == 'back-context':
return {'stack':p['stack'][:-1],'context':p['context']}
if action == 'root-back':
return 'dismiss' if len(p)==1 else 'pop'
return {'error': 'unsupported menu operation'}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('push contract', solve('push', {'stack':['root'],'page':'child'+str(N)}), ['root','child'+str(N)])
check('back contract', solve('back', ['root','child'+str(N)]), ['root'])
check('visible contract', solve('visible', ['root','child'+str(N)]), ['child'+str(N)])
check('dismiss contract', solve('dismiss', ['root','a','b'+str(N)]), [])
check('back-context contract', solve('back-context', {'stack':['r','a'],'context':N,'ambient':N+1}), {'stack':['r'],'context':N})
check('root-back contract', solve('root-back', ['root'+str(N)]), 'dismiss')
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 |
|---|---|---|---|
| push contract | ['root', 'child1'] | ['root', 'child1'] | Passed |
| back contract | ['root'] | ['root'] | Passed |
| visible contract | ['child1'] | ['child1'] | Passed |
| dismiss contract | [] | [] | Passed |
| back-context contract | {'context': 1, 'stack': ['r']} | {'context': 1, 'stack': ['r']} | Passed |
| root-back contract | dismiss | dismiss | Passed |
| unknown operation | {'error': 'unsupported menu operation'} | {'error': 'unsupported menu operation'} | Passed |
SHA-256 / 132b35730e68d499733cf6dbaca7a81ffd87981e65f2995af1eb474295ab635b
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:20.851738+00:00.
Case digest / 39d8b6eb3b7b8b26d04ef681e68bacd98a1397915c966b5355b338068d2fccef