FAILURE MAP
← Case archive

FA-35966 / Tab interfaces / Open access

Tab group collapse: membership retention · case 01

The tab workspace reports an incorrect membership retention.

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

ROOT CAUSE

The membership retention decision uses [] if x['collapsed'] else x['members'] instead of x['members'].

VERIFIED REPAIR

Use the stipulated workspace rule: x['members'].

Unsuccessful approach: The partial repair [x['active']] if x['active'] in x['members'] else [] still violates a workspace boundary or normal case.

Case contract

Collapsed tab groups display only a header and active member placeholder; preserve membership, count dirty documents and expand before revealing an inactive member.

Why this case matters

Offline tab/panel workspace behavior; no browser or desktop framework is emulated.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    r0 = ([x['active']] if x['active'] in x['members'] else []) if x['collapsed'] else x['members']
    r1 = len(x['members'])
    r2 = sum(t in x['dirty'] for t in x['members'])
    r3 = x['active'] if x['collapsed'] and x['active'] in x['members'] else None
    r4 = x['collapsed'] and x['reveal'] in x['members'] and x['reveal']!=x['active']
    r5 = [] if x['collapsed'] else x['members']
    return [r0,r1,r2,r3,r4,r5]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'members': ['a', 'b', 'c'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['b'], 3, 2, 'b', True, ['a', 'b', 'c']]), ({'members': ['a', 'b', 'c'], 'active': 'b', 'collapsed': False, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['a', 'b', 'c'], 3, 2, None, False, ['a', 'b', 'c']]), ({'members': ['a', 'b', 'c'], 'active': 'z', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 3, 2, None, True, ['a', 'b', 'c']]), ({'members': ['a', 'b', 'c'], 'active': 'b', 'collapsed': True, 'dirty': [], 'reveal': 'c'}, [['b'], 3, 0, 'b', True, ['a', 'b', 'c']]), ({'members': ['a', 'b', 'c'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'b'}, [['b'], 3, 2, 'b', False, ['a', 'b', 'c']]), ({'members': [], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 0, 0, None, False, []])], 2: [({'members': ['a', 'b', 'c', 'extra0'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['b'], 4, 2, 'b', True, ['a', 'b', 'c', 'extra0']]), ({'members': ['a', 'b', 'c', 'extra0'], 'active': 'b', 'collapsed': False, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['a', 'b', 'c', 'extra0'], 4, 2, None, False, ['a', 'b', 'c', 'extra0']]), ({'members': ['a', 'b', 'c', 'extra0'], 'active': 'z', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 4, 2, None, True, ['a', 'b', 'c', 'extra0']]), ({'members': ['a', 'b', 'c', 'extra0'], 'active': 'b', 'collapsed': True, 'dirty': [], 'reveal': 'c'}, [['b'], 4, 0, 'b', True, ['a', 'b', 'c', 'extra0']]), ({'members': ['a', 'b', 'c', 'extra0'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'b'}, [['b'], 4, 2, 'b', False, ['a', 'b', 'c', 'extra0']]), ({'members': ['extra0'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 1, 0, None, False, ['extra0']])], 3: [({'members': ['a', 'b', 'c', 'extra0', 'extra1'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['b'], 5, 2, 'b', True, ['a', 'b', 'c', 'extra0', 'extra1']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1'], 'active': 'b', 'collapsed': False, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['a', 'b', 'c', 'extra0', 'extra1'], 5, 2, None, False, ['a', 'b', 'c', 'extra0', 'extra1']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1'], 'active': 'z', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 5, 2, None, True, ['a', 'b', 'c', 'extra0', 'extra1']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1'], 'active': 'b', 'collapsed': True, 'dirty': [], 'reveal': 'c'}, [['b'], 5, 0, 'b', True, ['a', 'b', 'c', 'extra0', 'extra1']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'b'}, [['b'], 5, 2, 'b', False, ['a', 'b', 'c', 'extra0', 'extra1']]), ({'members': ['extra0', 'extra1'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 2, 0, None, False, ['extra0', 'extra1']])], 4: [({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['b'], 6, 2, 'b', True, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2'], 'active': 'b', 'collapsed': False, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['a', 'b', 'c', 'extra0', 'extra1', 'extra2'], 6, 2, None, False, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2'], 'active': 'z', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 6, 2, None, True, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2'], 'active': 'b', 'collapsed': True, 'dirty': [], 'reveal': 'c'}, [['b'], 6, 0, 'b', True, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'b'}, [['b'], 6, 2, 'b', False, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2']]), ({'members': ['extra0', 'extra1', 'extra2'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 3, 0, None, False, ['extra0', 'extra1', 'extra2']])], 5: [({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['b'], 7, 2, 'b', True, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3'], 'active': 'b', 'collapsed': False, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3'], 7, 2, None, False, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3'], 'active': 'z', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 7, 2, None, True, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3'], 'active': 'b', 'collapsed': True, 'dirty': [], 'reveal': 'c'}, [['b'], 7, 0, 'b', True, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'b'}, [['b'], 7, 2, 'b', False, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3']]), ({'members': ['extra0', 'extra1', 'extra2', 'extra3'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 4, 0, None, False, ['extra0', 'extra1', 'extra2', 'extra3']])]}
for i, (inputs, expected) in enumerate(fixtures[N]):
    check("workspace regression "+str(i), solve(inputs), expected)
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
workspace regression 0[['b'], 3, 2, 'b', True, []][['b'], 3, 2, 'b', True, ['a', 'b', 'c']]Failed
workspace regression 1[['a', 'b', 'c'], 3, 2, None, False, ['a', 'b', 'c']][['a', 'b', 'c'], 3, 2, None, False, ['a', 'b', 'c']]Passed
workspace regression 2[[], 3, 2, None, True, []][[], 3, 2, None, True, ['a', 'b', 'c']]Failed
workspace regression 3[['b'], 3, 0, 'b', True, []][['b'], 3, 0, 'b', True, ['a', 'b', 'c']]Failed
workspace regression 4[['b'], 3, 2, 'b', False, []][['b'], 3, 2, 'b', False, ['a', 'b', 'c']]Failed
workspace regression 5[[], 0, 0, None, False, []][[], 0, 0, None, False, []]Passed

SHA-256 / b8026823fb032f11280b0fb98bac6ffe1bfcbc7b24045351c9f8069008935f8f

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    r0 = ([x['active']] if x['active'] in x['members'] else []) if x['collapsed'] else x['members']
    r1 = len(x['members'])
    r2 = sum(t in x['dirty'] for t in x['members'])
    r3 = x['active'] if x['collapsed'] and x['active'] in x['members'] else None
    r4 = x['collapsed'] and x['reveal'] in x['members'] and x['reveal']!=x['active']
    r5 = [x['active']] if x['active'] in x['members'] else []
    return [r0,r1,r2,r3,r4,r5]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'members': ['a', 'b', 'c'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['b'], 3, 2, 'b', True, ['a', 'b', 'c']]), ({'members': ['a', 'b', 'c'], 'active': 'b', 'collapsed': False, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['a', 'b', 'c'], 3, 2, None, False, ['a', 'b', 'c']]), ({'members': ['a', 'b', 'c'], 'active': 'z', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 3, 2, None, True, ['a', 'b', 'c']]), ({'members': ['a', 'b', 'c'], 'active': 'b', 'collapsed': True, 'dirty': [], 'reveal': 'c'}, [['b'], 3, 0, 'b', True, ['a', 'b', 'c']]), ({'members': ['a', 'b', 'c'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'b'}, [['b'], 3, 2, 'b', False, ['a', 'b', 'c']]), ({'members': [], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 0, 0, None, False, []])], 2: [({'members': ['a', 'b', 'c', 'extra0'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['b'], 4, 2, 'b', True, ['a', 'b', 'c', 'extra0']]), ({'members': ['a', 'b', 'c', 'extra0'], 'active': 'b', 'collapsed': False, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['a', 'b', 'c', 'extra0'], 4, 2, None, False, ['a', 'b', 'c', 'extra0']]), ({'members': ['a', 'b', 'c', 'extra0'], 'active': 'z', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 4, 2, None, True, ['a', 'b', 'c', 'extra0']]), ({'members': ['a', 'b', 'c', 'extra0'], 'active': 'b', 'collapsed': True, 'dirty': [], 'reveal': 'c'}, [['b'], 4, 0, 'b', True, ['a', 'b', 'c', 'extra0']]), ({'members': ['a', 'b', 'c', 'extra0'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'b'}, [['b'], 4, 2, 'b', False, ['a', 'b', 'c', 'extra0']]), ({'members': ['extra0'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 1, 0, None, False, ['extra0']])], 3: [({'members': ['a', 'b', 'c', 'extra0', 'extra1'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['b'], 5, 2, 'b', True, ['a', 'b', 'c', 'extra0', 'extra1']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1'], 'active': 'b', 'collapsed': False, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['a', 'b', 'c', 'extra0', 'extra1'], 5, 2, None, False, ['a', 'b', 'c', 'extra0', 'extra1']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1'], 'active': 'z', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 5, 2, None, True, ['a', 'b', 'c', 'extra0', 'extra1']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1'], 'active': 'b', 'collapsed': True, 'dirty': [], 'reveal': 'c'}, [['b'], 5, 0, 'b', True, ['a', 'b', 'c', 'extra0', 'extra1']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'b'}, [['b'], 5, 2, 'b', False, ['a', 'b', 'c', 'extra0', 'extra1']]), ({'members': ['extra0', 'extra1'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 2, 0, None, False, ['extra0', 'extra1']])], 4: [({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['b'], 6, 2, 'b', True, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2'], 'active': 'b', 'collapsed': False, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['a', 'b', 'c', 'extra0', 'extra1', 'extra2'], 6, 2, None, False, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2'], 'active': 'z', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 6, 2, None, True, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2'], 'active': 'b', 'collapsed': True, 'dirty': [], 'reveal': 'c'}, [['b'], 6, 0, 'b', True, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'b'}, [['b'], 6, 2, 'b', False, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2']]), ({'members': ['extra0', 'extra1', 'extra2'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 3, 0, None, False, ['extra0', 'extra1', 'extra2']])], 5: [({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['b'], 7, 2, 'b', True, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3'], 'active': 'b', 'collapsed': False, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3'], 7, 2, None, False, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3'], 'active': 'z', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 7, 2, None, True, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3'], 'active': 'b', 'collapsed': True, 'dirty': [], 'reveal': 'c'}, [['b'], 7, 0, 'b', True, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'b'}, [['b'], 7, 2, 'b', False, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3']]), ({'members': ['extra0', 'extra1', 'extra2', 'extra3'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 4, 0, None, False, ['extra0', 'extra1', 'extra2', 'extra3']])]}
for i, (inputs, expected) in enumerate(fixtures[N]):
    check("workspace regression "+str(i), solve(inputs), expected)
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
workspace regression 0[['b'], 3, 2, 'b', True, ['b']][['b'], 3, 2, 'b', True, ['a', 'b', 'c']]Failed
workspace regression 1[['a', 'b', 'c'], 3, 2, None, False, ['b']][['a', 'b', 'c'], 3, 2, None, False, ['a', 'b', 'c']]Failed
workspace regression 2[[], 3, 2, None, True, []][[], 3, 2, None, True, ['a', 'b', 'c']]Failed
workspace regression 3[['b'], 3, 0, 'b', True, ['b']][['b'], 3, 0, 'b', True, ['a', 'b', 'c']]Failed
workspace regression 4[['b'], 3, 2, 'b', False, ['b']][['b'], 3, 2, 'b', False, ['a', 'b', 'c']]Failed
workspace regression 5[[], 0, 0, None, False, []][[], 0, 0, None, False, []]Passed

SHA-256 / ae072bbbfdbb83ef367423845ab7ab533ecc9e503b760095a160c60567ff5a48

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    r0 = ([x['active']] if x['active'] in x['members'] else []) if x['collapsed'] else x['members']
    r1 = len(x['members'])
    r2 = sum(t in x['dirty'] for t in x['members'])
    r3 = x['active'] if x['collapsed'] and x['active'] in x['members'] else None
    r4 = x['collapsed'] and x['reveal'] in x['members'] and x['reveal']!=x['active']
    r5 = x['members']
    return [r0,r1,r2,r3,r4,r5]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'members': ['a', 'b', 'c'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['b'], 3, 2, 'b', True, ['a', 'b', 'c']]), ({'members': ['a', 'b', 'c'], 'active': 'b', 'collapsed': False, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['a', 'b', 'c'], 3, 2, None, False, ['a', 'b', 'c']]), ({'members': ['a', 'b', 'c'], 'active': 'z', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 3, 2, None, True, ['a', 'b', 'c']]), ({'members': ['a', 'b', 'c'], 'active': 'b', 'collapsed': True, 'dirty': [], 'reveal': 'c'}, [['b'], 3, 0, 'b', True, ['a', 'b', 'c']]), ({'members': ['a', 'b', 'c'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'b'}, [['b'], 3, 2, 'b', False, ['a', 'b', 'c']]), ({'members': [], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 0, 0, None, False, []])], 2: [({'members': ['a', 'b', 'c', 'extra0'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['b'], 4, 2, 'b', True, ['a', 'b', 'c', 'extra0']]), ({'members': ['a', 'b', 'c', 'extra0'], 'active': 'b', 'collapsed': False, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['a', 'b', 'c', 'extra0'], 4, 2, None, False, ['a', 'b', 'c', 'extra0']]), ({'members': ['a', 'b', 'c', 'extra0'], 'active': 'z', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 4, 2, None, True, ['a', 'b', 'c', 'extra0']]), ({'members': ['a', 'b', 'c', 'extra0'], 'active': 'b', 'collapsed': True, 'dirty': [], 'reveal': 'c'}, [['b'], 4, 0, 'b', True, ['a', 'b', 'c', 'extra0']]), ({'members': ['a', 'b', 'c', 'extra0'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'b'}, [['b'], 4, 2, 'b', False, ['a', 'b', 'c', 'extra0']]), ({'members': ['extra0'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 1, 0, None, False, ['extra0']])], 3: [({'members': ['a', 'b', 'c', 'extra0', 'extra1'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['b'], 5, 2, 'b', True, ['a', 'b', 'c', 'extra0', 'extra1']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1'], 'active': 'b', 'collapsed': False, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['a', 'b', 'c', 'extra0', 'extra1'], 5, 2, None, False, ['a', 'b', 'c', 'extra0', 'extra1']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1'], 'active': 'z', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 5, 2, None, True, ['a', 'b', 'c', 'extra0', 'extra1']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1'], 'active': 'b', 'collapsed': True, 'dirty': [], 'reveal': 'c'}, [['b'], 5, 0, 'b', True, ['a', 'b', 'c', 'extra0', 'extra1']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'b'}, [['b'], 5, 2, 'b', False, ['a', 'b', 'c', 'extra0', 'extra1']]), ({'members': ['extra0', 'extra1'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 2, 0, None, False, ['extra0', 'extra1']])], 4: [({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['b'], 6, 2, 'b', True, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2'], 'active': 'b', 'collapsed': False, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['a', 'b', 'c', 'extra0', 'extra1', 'extra2'], 6, 2, None, False, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2'], 'active': 'z', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 6, 2, None, True, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2'], 'active': 'b', 'collapsed': True, 'dirty': [], 'reveal': 'c'}, [['b'], 6, 0, 'b', True, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'b'}, [['b'], 6, 2, 'b', False, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2']]), ({'members': ['extra0', 'extra1', 'extra2'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 3, 0, None, False, ['extra0', 'extra1', 'extra2']])], 5: [({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['b'], 7, 2, 'b', True, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3'], 'active': 'b', 'collapsed': False, 'dirty': ['a', 'c'], 'reveal': 'c'}, [['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3'], 7, 2, None, False, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3'], 'active': 'z', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 7, 2, None, True, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3'], 'active': 'b', 'collapsed': True, 'dirty': [], 'reveal': 'c'}, [['b'], 7, 0, 'b', True, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3']]), ({'members': ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'b'}, [['b'], 7, 2, 'b', False, ['a', 'b', 'c', 'extra0', 'extra1', 'extra2', 'extra3']]), ({'members': ['extra0', 'extra1', 'extra2', 'extra3'], 'active': 'b', 'collapsed': True, 'dirty': ['a', 'c'], 'reveal': 'c'}, [[], 4, 0, None, False, ['extra0', 'extra1', 'extra2', 'extra3']])]}
for i, (inputs, expected) in enumerate(fixtures[N]):
    check("workspace regression "+str(i), solve(inputs), expected)
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
workspace regression 0[['b'], 3, 2, 'b', True, ['a', 'b', 'c']][['b'], 3, 2, 'b', True, ['a', 'b', 'c']]Passed
workspace regression 1[['a', 'b', 'c'], 3, 2, None, False, ['a', 'b', 'c']][['a', 'b', 'c'], 3, 2, None, False, ['a', 'b', 'c']]Passed
workspace regression 2[[], 3, 2, None, True, ['a', 'b', 'c']][[], 3, 2, None, True, ['a', 'b', 'c']]Passed
workspace regression 3[['b'], 3, 0, 'b', True, ['a', 'b', 'c']][['b'], 3, 0, 'b', True, ['a', 'b', 'c']]Passed
workspace regression 4[['b'], 3, 2, 'b', False, ['a', 'b', 'c']][['b'], 3, 2, 'b', False, ['a', 'b', 'c']]Passed
workspace regression 5[[], 0, 0, None, False, []][[], 0, 0, None, False, []]Passed

SHA-256 / 9496b1ce66a74a5b50096d260b882b51bc4d1155ded22392cd1744823dd5bb30

Verification & scope

Finite stipulated workspace snapshots only. Independent result fields describe observable obligations, not a full UI runtime. 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:46.635487+00:00.

Case digest / ec3af0f5e8efa71f9e4ad171a39dc95b73049bc5b62e20b1a627eb991407d050