FAILURE MAP
← Case archive

FA-32531 / Menu interactions / Open access

Unloading an extension removes unrelated menu commands · case 01

Unloading an extension removes unrelated menu commands.

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

ROOT CAUSE

The contributor-merge model applies `[]` at its unload operation instead of the stipulated transformation.

VERIFIED REPAIR

Apply `[x for x in p['rows'] if x['provider']!=p['provider']]` at unload.

Unsuccessful approach: The attempted repair `[x for x in p['rows'] if x['id']!=p['provider']]` still violates the unload oracle.

Case contract

Contributed menu commands are namespaced, rank-stable, and replaceable only by their provider; removals retain unrelated content.

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 == 'namespace':
        return p['provider']+':'+p['id']
    if action == 'rank':
        return sorted(p,key=lambda x:x['rank'])
    if action == 'unload':
        return []
    if action == 'replace':
        return [p['new'] if x['provider']==p['new']['provider'] and x['id']==p['new']['id'] else x for x in p['rows']]
    if action == 'disabled-provider':
        return [x for x in p['rows'] if x['provider'] not in p['disabled']]
    if action == 'revision-owner':
        return p['revision'].get(p['provider'],0)
    return {'error': 'unsupported menu operation'}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('namespace contract', solve('namespace', {'provider':'ext'+str(N),'id':'open'}), 'ext'+str(N)+':open')
check('rank contract', solve('rank', [{'id':'z','rank':N},{'id':'a','rank':N+1}]), [{'id':'z','rank':N},{'id':'a','rank':N+1}])
check('unload contract', solve('unload', {'rows':[{'provider':'a','id':N},{'provider':'b','id':N+1}],'provider':'a'}), [{'provider':'b','id':N+1}])
check('replace contract', solve('replace', {'rows':[{'provider':'a','id':N,'v':0},{'provider':'b','id':N,'v':0}],'new':{'provider':'b','id':N,'v':1}}), [{'provider':'a','id':N,'v':0},{'provider':'b','id':N,'v':1}])
check('disabled-provider contract', solve('disabled-provider', {'rows':[{'provider':'off','id':N},{'provider':'on','id':N+1}],'disabled':['off']}), [{'provider':'on','id':N+1}])
check('revision-owner contract', solve('revision-owner', {'provider':'a','revision':{'a':N,'b':N+10}}), N)
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 fixtureActualExpectedOutcome
namespace contractext1:openext1:openPassed
rank contract[{'id': 'z', 'rank': 1}, {'id': 'a', 'rank': 2}][{'id': 'z', 'rank': 1}, {'id': 'a', 'rank': 2}]Passed
unload contract[][{'id': 2, 'provider': 'b'}]Failed
replace contract[{'id': 1, 'provider': 'a', 'v': 0}, {'id': 1, 'provider': 'b', 'v': 1}][{'id': 1, 'provider': 'a', 'v': 0}, {'id': 1, 'provider': 'b', 'v': 1}]Passed
disabled-provider contract[{'id': 2, 'provider': 'on'}][{'id': 2, 'provider': 'on'}]Passed
revision-owner contract11Passed
unknown operation{'error': 'unsupported menu operation'}{'error': 'unsupported menu operation'}Passed

SHA-256 / e54c53fe3b72d85f9a57c7324d69d275d75049cbe74202cdf6a01306bba2ba55

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 == 'namespace':
        return p['provider']+':'+p['id']
    if action == 'rank':
        return sorted(p,key=lambda x:x['rank'])
    if action == 'unload':
        return [x for x in p['rows'] if x['id']!=p['provider']]
    if action == 'replace':
        return [p['new'] if x['provider']==p['new']['provider'] and x['id']==p['new']['id'] else x for x in p['rows']]
    if action == 'disabled-provider':
        return [x for x in p['rows'] if x['provider'] not in p['disabled']]
    if action == 'revision-owner':
        return p['revision'].get(p['provider'],0)
    return {'error': 'unsupported menu operation'}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('namespace contract', solve('namespace', {'provider':'ext'+str(N),'id':'open'}), 'ext'+str(N)+':open')
check('rank contract', solve('rank', [{'id':'z','rank':N},{'id':'a','rank':N+1}]), [{'id':'z','rank':N},{'id':'a','rank':N+1}])
check('unload contract', solve('unload', {'rows':[{'provider':'a','id':N},{'provider':'b','id':N+1}],'provider':'a'}), [{'provider':'b','id':N+1}])
check('replace contract', solve('replace', {'rows':[{'provider':'a','id':N,'v':0},{'provider':'b','id':N,'v':0}],'new':{'provider':'b','id':N,'v':1}}), [{'provider':'a','id':N,'v':0},{'provider':'b','id':N,'v':1}])
check('disabled-provider contract', solve('disabled-provider', {'rows':[{'provider':'off','id':N},{'provider':'on','id':N+1}],'disabled':['off']}), [{'provider':'on','id':N+1}])
check('revision-owner contract', solve('revision-owner', {'provider':'a','revision':{'a':N,'b':N+10}}), N)
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 fixtureActualExpectedOutcome
namespace contractext1:openext1:openPassed
rank contract[{'id': 'z', 'rank': 1}, {'id': 'a', 'rank': 2}][{'id': 'z', 'rank': 1}, {'id': 'a', 'rank': 2}]Passed
unload contract[{'id': 1, 'provider': 'a'}, {'id': 2, 'provider': 'b'}][{'id': 2, 'provider': 'b'}]Failed
replace contract[{'id': 1, 'provider': 'a', 'v': 0}, {'id': 1, 'provider': 'b', 'v': 1}][{'id': 1, 'provider': 'a', 'v': 0}, {'id': 1, 'provider': 'b', 'v': 1}]Passed
disabled-provider contract[{'id': 2, 'provider': 'on'}][{'id': 2, 'provider': 'on'}]Passed
revision-owner contract11Passed
unknown operation{'error': 'unsupported menu operation'}{'error': 'unsupported menu operation'}Passed

SHA-256 / 5fc12a709ac43d2fb46566b8a4349661aad108ce319378f3bb9c80f7fba543af

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 == 'namespace':
        return p['provider']+':'+p['id']
    if action == 'rank':
        return sorted(p,key=lambda x:x['rank'])
    if action == 'unload':
        return [x for x in p['rows'] if x['provider']!=p['provider']]
    if action == 'replace':
        return [p['new'] if x['provider']==p['new']['provider'] and x['id']==p['new']['id'] else x for x in p['rows']]
    if action == 'disabled-provider':
        return [x for x in p['rows'] if x['provider'] not in p['disabled']]
    if action == 'revision-owner':
        return p['revision'].get(p['provider'],0)
    return {'error': 'unsupported menu operation'}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('namespace contract', solve('namespace', {'provider':'ext'+str(N),'id':'open'}), 'ext'+str(N)+':open')
check('rank contract', solve('rank', [{'id':'z','rank':N},{'id':'a','rank':N+1}]), [{'id':'z','rank':N},{'id':'a','rank':N+1}])
check('unload contract', solve('unload', {'rows':[{'provider':'a','id':N},{'provider':'b','id':N+1}],'provider':'a'}), [{'provider':'b','id':N+1}])
check('replace contract', solve('replace', {'rows':[{'provider':'a','id':N,'v':0},{'provider':'b','id':N,'v':0}],'new':{'provider':'b','id':N,'v':1}}), [{'provider':'a','id':N,'v':0},{'provider':'b','id':N,'v':1}])
check('disabled-provider contract', solve('disabled-provider', {'rows':[{'provider':'off','id':N},{'provider':'on','id':N+1}],'disabled':['off']}), [{'provider':'on','id':N+1}])
check('revision-owner contract', solve('revision-owner', {'provider':'a','revision':{'a':N,'b':N+10}}), N)
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 fixtureActualExpectedOutcome
namespace contractext1:openext1:openPassed
rank contract[{'id': 'z', 'rank': 1}, {'id': 'a', 'rank': 2}][{'id': 'z', 'rank': 1}, {'id': 'a', 'rank': 2}]Passed
unload contract[{'id': 2, 'provider': 'b'}][{'id': 2, 'provider': 'b'}]Passed
replace contract[{'id': 1, 'provider': 'a', 'v': 0}, {'id': 1, 'provider': 'b', 'v': 1}][{'id': 1, 'provider': 'a', 'v': 0}, {'id': 1, 'provider': 'b', 'v': 1}]Passed
disabled-provider contract[{'id': 2, 'provider': 'on'}][{'id': 2, 'provider': 'on'}]Passed
revision-owner contract11Passed
unknown operation{'error': 'unsupported menu operation'}{'error': 'unsupported menu operation'}Passed

SHA-256 / 84e36f3efd0f4e52e8bb14088bace565ea69dec4949863c08758c8a21ef5fb79

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:13.170443+00:00.

Case digest / 3eff198d848bca51d3fc5d0e48f30af64418e6e7035aeca0fa2e95e40dd3a266