FAILURE MAP
← Case archive

FA-35946 / Tab interfaces / Open access

Tab group collapse: header count · case 01

The tab workspace reports an incorrect header count.

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

ROOT CAUSE

The header count decision uses 1 if x['collapsed'] else len(x['members']) instead of len(x['members']).

VERIFIED REPAIR

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

Unsuccessful approach: The partial repair max(0,len(x['members'])-1) 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 = 1 if x['collapsed'] else 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'], 1, 2, 'b', True, ['a', 'b', 'c']][['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[[], 1, 2, None, True, ['a', 'b', 'c']][[], 3, 2, None, True, ['a', 'b', 'c']]Failed
workspace regression 3[['b'], 1, 0, 'b', True, ['a', 'b', 'c']][['b'], 3, 0, 'b', True, ['a', 'b', 'c']]Failed
workspace regression 4[['b'], 1, 2, 'b', False, ['a', 'b', 'c']][['b'], 3, 2, 'b', False, ['a', 'b', 'c']]Failed
workspace regression 5[[], 1, 0, None, False, []][[], 0, 0, None, False, []]Failed

SHA-256 / 19374a9c8816457ed26a2f77b4d67323d35cd2e087c0e7e2fa447dde028a6860

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 = max(0,len(x['members'])-1)
    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'], 2, 2, 'b', True, ['a', 'b', 'c']][['b'], 3, 2, 'b', True, ['a', 'b', 'c']]Failed
workspace regression 1[['a', 'b', 'c'], 2, 2, None, False, ['a', 'b', 'c']][['a', 'b', 'c'], 3, 2, None, False, ['a', 'b', 'c']]Failed
workspace regression 2[[], 2, 2, None, True, ['a', 'b', 'c']][[], 3, 2, None, True, ['a', 'b', 'c']]Failed
workspace regression 3[['b'], 2, 0, 'b', True, ['a', 'b', 'c']][['b'], 3, 0, 'b', True, ['a', 'b', 'c']]Failed
workspace regression 4[['b'], 2, 2, 'b', False, ['a', 'b', 'c']][['b'], 3, 2, 'b', False, ['a', 'b', 'c']]Failed
workspace regression 5[[], 0, 0, None, False, []][[], 0, 0, None, False, []]Passed

SHA-256 / 8b7f033d026dc78565b551d497f891141a9b990030a77d03344e13b354cc574d

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

Case digest / 82468ee9d8bbe25738c10944f5fcade697a85df36e4a02984646735d6f3046ee