FAILURE MAP
← Case archive

FA-32536 / Menu interactions / Open access

Replacing one extension command overwrites a peer command · case 01

Replacing one extension command overwrites a peer command.

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

ROOT CAUSE

The contributor-merge model applies `[p['new'] if x['id']==p['new']['id'] else x for x in p['rows']]` at its replace operation instead of the stipulated transformation.

VERIFIED REPAIR

Apply `[p['new'] if x['provider']==p['new']['provider'] and x['id']==p['new']['id'] else x for x in p['rows']]` at replace.

Unsuccessful approach: The attempted repair `p['rows']+[p['new']]` still violates the replace 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 [x for x in p['rows'] if x['provider']!=p['provider']]
    if action == 'replace':
        return [p['new'] if 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': 'b', 'v': 1}, {'id': 1, 'provider': 'b', 'v': 1}][{'id': 1, 'provider': 'a', 'v': 0}, {'id': 1, 'provider': 'b', 'v': 1}]Failed
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 / e5326bc1bf2176ade8c6c49fa33efe299ad08b6f1f93e91a250a6f63c91a1e22

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['provider']!=p['provider']]
    if action == 'replace':
        return p['rows']+[p['new']]
    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': 0}, {'id': 1, 'provider': 'b', 'v': 1}][{'id': 1, 'provider': 'a', 'v': 0}, {'id': 1, 'provider': 'b', 'v': 1}]Failed
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 / 7016d49d0440fa542816d0547928b3782104fa7b2ac6e9a5cbec5f50e8fda014

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

Case digest / bd424658d35148d505e0a11339ac2209a76278ad53bc6daf6b42a00e0552f14e