FAILURE MAP
← Case archive

FA-33361 / Menu interactions / Open access

Hidden submenu indicator widens every visible menu row · case 01

Hidden submenu indicator widens every visible menu row.

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

ROOT CAUSE

The menu-row-decoration model applies `max((x['indicator_width'] for x in p),default=0)` at its indicator-column operation instead of the stipulated transformation.

VERIFIED REPAIR

Apply `max((x['indicator_width'] for x in p if x['visible']),default=0)` at indicator-column.

Unsuccessful approach: The attempted repair `sum(x['indicator_width'] for x in p)` still violates the indicator-column oracle.

Case contract

Menu decoration columns are measured from visible command rows; text, badges and submenu indicators remain separate from command identity.

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 == 'indicator-column':
        return max((x['indicator_width'] for x in p),default=0)
    if action == 'badge':
        return None if p['count'] is None else str(p['count'])
    if action == 'label-command':
        return p['command']
    if action == 'suffix-order':
        return p['label']+(' '+p['suffix'] if p['suffix'] else '')
    if action == 'icon-space':
        return p['column_width'] if p['column_enabled'] else 0
    if action == 'separator-span':
        return sum(p['columns'])+p['gap']*(len(p['columns'])-1)
    return {'error': 'unsupported menu operation'}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('indicator-column contract', solve('indicator-column', [{'visible':False,'indicator_width':N+10},{'visible':True,'indicator_width':2}]), 2)
check('badge contract', solve('badge', {'count':0,'revision':N}), '0')
check('label-command contract', solve('label-command', {'command':'cmd'+str(N),'label':'Copy','badge':'2'}), 'cmd'+str(N))
check('suffix-order contract', solve('suffix-order', {'label':'Item '+str(N),'suffix':'(new)'}), 'Item '+str(N)+' (new)')
check('icon-space contract', solve('icon-space', {'column_width':N+4,'column_enabled':True,'own_width':0}), N+4)
check('separator-span contract', solve('separator-span', {'columns':[N,10,4],'gap':2}), N+18)
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
indicator-column contract112Failed
badge contract00Passed
label-command contractcmd1cmd1Passed
suffix-order contractItem 1 (new)Item 1 (new)Passed
icon-space contract55Passed
separator-span contract1919Passed
unknown operation{'error': 'unsupported menu operation'}{'error': 'unsupported menu operation'}Passed

SHA-256 / 4493b5a15105e149a9c16b056f8131754b57c6b11e69a85c94218ca3ac946975

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 == 'indicator-column':
        return sum(x['indicator_width'] for x in p)
    if action == 'badge':
        return None if p['count'] is None else str(p['count'])
    if action == 'label-command':
        return p['command']
    if action == 'suffix-order':
        return p['label']+(' '+p['suffix'] if p['suffix'] else '')
    if action == 'icon-space':
        return p['column_width'] if p['column_enabled'] else 0
    if action == 'separator-span':
        return sum(p['columns'])+p['gap']*(len(p['columns'])-1)
    return {'error': 'unsupported menu operation'}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('indicator-column contract', solve('indicator-column', [{'visible':False,'indicator_width':N+10},{'visible':True,'indicator_width':2}]), 2)
check('badge contract', solve('badge', {'count':0,'revision':N}), '0')
check('label-command contract', solve('label-command', {'command':'cmd'+str(N),'label':'Copy','badge':'2'}), 'cmd'+str(N))
check('suffix-order contract', solve('suffix-order', {'label':'Item '+str(N),'suffix':'(new)'}), 'Item '+str(N)+' (new)')
check('icon-space contract', solve('icon-space', {'column_width':N+4,'column_enabled':True,'own_width':0}), N+4)
check('separator-span contract', solve('separator-span', {'columns':[N,10,4],'gap':2}), N+18)
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
indicator-column contract132Failed
badge contract00Passed
label-command contractcmd1cmd1Passed
suffix-order contractItem 1 (new)Item 1 (new)Passed
icon-space contract55Passed
separator-span contract1919Passed
unknown operation{'error': 'unsupported menu operation'}{'error': 'unsupported menu operation'}Passed

SHA-256 / 0b3fe14c7c71079e01e0e39b42cf20812bb5b72f579a04ce4c8ab42352e953e1

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 == 'indicator-column':
        return max((x['indicator_width'] for x in p if x['visible']),default=0)
    if action == 'badge':
        return None if p['count'] is None else str(p['count'])
    if action == 'label-command':
        return p['command']
    if action == 'suffix-order':
        return p['label']+(' '+p['suffix'] if p['suffix'] else '')
    if action == 'icon-space':
        return p['column_width'] if p['column_enabled'] else 0
    if action == 'separator-span':
        return sum(p['columns'])+p['gap']*(len(p['columns'])-1)
    return {'error': 'unsupported menu operation'}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('indicator-column contract', solve('indicator-column', [{'visible':False,'indicator_width':N+10},{'visible':True,'indicator_width':2}]), 2)
check('badge contract', solve('badge', {'count':0,'revision':N}), '0')
check('label-command contract', solve('label-command', {'command':'cmd'+str(N),'label':'Copy','badge':'2'}), 'cmd'+str(N))
check('suffix-order contract', solve('suffix-order', {'label':'Item '+str(N),'suffix':'(new)'}), 'Item '+str(N)+' (new)')
check('icon-space contract', solve('icon-space', {'column_width':N+4,'column_enabled':True,'own_width':0}), N+4)
check('separator-span contract', solve('separator-span', {'columns':[N,10,4],'gap':2}), N+18)
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
indicator-column contract22Passed
badge contract00Passed
label-command contractcmd1cmd1Passed
suffix-order contractItem 1 (new)Item 1 (new)Passed
icon-space contract55Passed
separator-span contract1919Passed
unknown operation{'error': 'unsupported menu operation'}{'error': 'unsupported menu operation'}Passed

SHA-256 / b25a4b2dbb7acabb0df2f8600c0094f4e65eff71c3b5dddb4702e3071755f959

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

Case digest / 6dab5458b1969851fe8120402aa6fc413e8af3aa71771a17d73aaa95a258009d