FAILURE MAP
← Case archive

FA-35631 / Tab interfaces / Open access

Recently closed stack: tombstone filter · case 01

The tab workspace reports an incorrect tombstone filter.

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

ROOT CAUSE

The tombstone filter decision uses [r[0] for r in x['stack']] instead of [r[0] for r in x['stack'] if r[0] not in x['deleted']].

VERIFIED REPAIR

Use the stipulated workspace rule: [r[0] for r in x['stack'] if r[0] not in x['deleted']].

Unsuccessful approach: The partial repair [r[0] for r in x['stack'] if r[0] not in x['deleted']][:1] still violates a workspace boundary or normal case.

Case contract

Closed tabs are restored LIFO with original group, insertion slot, document and viewport; skip tombstones and keep remaining stack order.

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 = next((r[0] for r in reversed(x['stack']) if r[0] not in x['deleted']),None)
    r1 = next((r[1] for r in reversed(x['stack']) if r[0] not in x['deleted']),None)
    r2 = next((min(r[2],x['group_sizes'][r[1]]) for r in reversed(x['stack']) if r[0] not in x['deleted']),None)
    r3 = next((r[3] for r in reversed(x['stack']) if r[0] not in x['deleted']),None)
    r4 = [r[0] for r in x['stack']]
    r5 = [r[0] for r in x['stack'] if r[0] not in x['deleted']][:-1]
    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: [({'stack': [['a', 'g', 2, 30], ['b', 'h', 0, 50], ['c', 'g', 1, 20]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 0, 50, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 30], ['b', 'h', 0, 50], ['c', 'g', 1, 20]], 'deleted': [], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 20, ['a', 'b', 'c'], ['a', 'b']]), ({'stack': [['a', 'g', 2, 30], ['b', 'h', 0, 50], ['c', 'g', 1, 20]], 'deleted': ['b', 'c'], 'group_sizes': {'g': 1, 'h': 2}}, ['a', 'g', 1, 30, ['a'], []]), ({'stack': [['a', 'g', 2, 30], ['b', 'h', 0, 50], ['c', 'g', 1, 20]], 'deleted': ['c'], 'group_sizes': {'g': 4, 'h': 0}}, ['b', 'h', 0, 50, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 30], ['b', 'h', 0, 50], ['c', 'g', 1, 20]], 'deleted': ['a'], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 20, ['b', 'c'], ['b']]), ({'stack': [['a', 'g', 2, 30], ['b', 'h', 1, 0]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 1, 0, ['a', 'b'], ['a']])], 2: [({'stack': [['a', 'g', 2, 60], ['b', 'h', 0, 100], ['c', 'g', 1, 40]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 0, 100, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 60], ['b', 'h', 0, 100], ['c', 'g', 1, 40]], 'deleted': [], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 40, ['a', 'b', 'c'], ['a', 'b']]), ({'stack': [['a', 'g', 2, 60], ['b', 'h', 0, 100], ['c', 'g', 1, 40]], 'deleted': ['b', 'c'], 'group_sizes': {'g': 1, 'h': 2}}, ['a', 'g', 1, 60, ['a'], []]), ({'stack': [['a', 'g', 2, 60], ['b', 'h', 0, 100], ['c', 'g', 1, 40]], 'deleted': ['c'], 'group_sizes': {'g': 4, 'h': 0}}, ['b', 'h', 0, 100, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 60], ['b', 'h', 0, 100], ['c', 'g', 1, 40]], 'deleted': ['a'], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 40, ['b', 'c'], ['b']]), ({'stack': [['a', 'g', 2, 60], ['b', 'h', 1, 0]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 1, 0, ['a', 'b'], ['a']])], 3: [({'stack': [['a', 'g', 2, 90], ['b', 'h', 0, 150], ['c', 'g', 1, 60]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 0, 150, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 90], ['b', 'h', 0, 150], ['c', 'g', 1, 60]], 'deleted': [], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 60, ['a', 'b', 'c'], ['a', 'b']]), ({'stack': [['a', 'g', 2, 90], ['b', 'h', 0, 150], ['c', 'g', 1, 60]], 'deleted': ['b', 'c'], 'group_sizes': {'g': 1, 'h': 2}}, ['a', 'g', 1, 90, ['a'], []]), ({'stack': [['a', 'g', 2, 90], ['b', 'h', 0, 150], ['c', 'g', 1, 60]], 'deleted': ['c'], 'group_sizes': {'g': 4, 'h': 0}}, ['b', 'h', 0, 150, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 90], ['b', 'h', 0, 150], ['c', 'g', 1, 60]], 'deleted': ['a'], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 60, ['b', 'c'], ['b']]), ({'stack': [['a', 'g', 2, 90], ['b', 'h', 1, 0]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 1, 0, ['a', 'b'], ['a']])], 4: [({'stack': [['a', 'g', 2, 120], ['b', 'h', 0, 200], ['c', 'g', 1, 80]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 0, 200, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 120], ['b', 'h', 0, 200], ['c', 'g', 1, 80]], 'deleted': [], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 80, ['a', 'b', 'c'], ['a', 'b']]), ({'stack': [['a', 'g', 2, 120], ['b', 'h', 0, 200], ['c', 'g', 1, 80]], 'deleted': ['b', 'c'], 'group_sizes': {'g': 1, 'h': 2}}, ['a', 'g', 1, 120, ['a'], []]), ({'stack': [['a', 'g', 2, 120], ['b', 'h', 0, 200], ['c', 'g', 1, 80]], 'deleted': ['c'], 'group_sizes': {'g': 4, 'h': 0}}, ['b', 'h', 0, 200, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 120], ['b', 'h', 0, 200], ['c', 'g', 1, 80]], 'deleted': ['a'], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 80, ['b', 'c'], ['b']]), ({'stack': [['a', 'g', 2, 120], ['b', 'h', 1, 0]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 1, 0, ['a', 'b'], ['a']])], 5: [({'stack': [['a', 'g', 2, 150], ['b', 'h', 0, 250], ['c', 'g', 1, 100]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 0, 250, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 150], ['b', 'h', 0, 250], ['c', 'g', 1, 100]], 'deleted': [], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 100, ['a', 'b', 'c'], ['a', 'b']]), ({'stack': [['a', 'g', 2, 150], ['b', 'h', 0, 250], ['c', 'g', 1, 100]], 'deleted': ['b', 'c'], 'group_sizes': {'g': 1, 'h': 2}}, ['a', 'g', 1, 150, ['a'], []]), ({'stack': [['a', 'g', 2, 150], ['b', 'h', 0, 250], ['c', 'g', 1, 100]], 'deleted': ['c'], 'group_sizes': {'g': 4, 'h': 0}}, ['b', 'h', 0, 250, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 150], ['b', 'h', 0, 250], ['c', 'g', 1, 100]], 'deleted': ['a'], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 100, ['b', 'c'], ['b']]), ({'stack': [['a', 'g', 2, 150], ['b', 'h', 1, 0]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 1, 0, ['a', 'b'], ['a']])]}
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', 'h', 0, 50, ['a', 'b', 'c'], ['a']]['b', 'h', 0, 50, ['a', 'b'], ['a']]Failed
workspace regression 1['c', 'g', 1, 20, ['a', 'b', 'c'], ['a', 'b']]['c', 'g', 1, 20, ['a', 'b', 'c'], ['a', 'b']]Passed
workspace regression 2['a', 'g', 1, 30, ['a', 'b', 'c'], []]['a', 'g', 1, 30, ['a'], []]Failed
workspace regression 3['b', 'h', 0, 50, ['a', 'b', 'c'], ['a']]['b', 'h', 0, 50, ['a', 'b'], ['a']]Failed
workspace regression 4['c', 'g', 1, 20, ['a', 'b', 'c'], ['b']]['c', 'g', 1, 20, ['b', 'c'], ['b']]Failed
workspace regression 5['b', 'h', 1, 0, ['a', 'b'], ['a']]['b', 'h', 1, 0, ['a', 'b'], ['a']]Passed

SHA-256 / 2372aefa15f2382060dc9e99ea15ffc25d7c6b4f9cb81a983057b482907b0c56

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(x):
    r0 = next((r[0] for r in reversed(x['stack']) if r[0] not in x['deleted']),None)
    r1 = next((r[1] for r in reversed(x['stack']) if r[0] not in x['deleted']),None)
    r2 = next((min(r[2],x['group_sizes'][r[1]]) for r in reversed(x['stack']) if r[0] not in x['deleted']),None)
    r3 = next((r[3] for r in reversed(x['stack']) if r[0] not in x['deleted']),None)
    r4 = [r[0] for r in x['stack'] if r[0] not in x['deleted']][:1]
    r5 = [r[0] for r in x['stack'] if r[0] not in x['deleted']][:-1]
    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: [({'stack': [['a', 'g', 2, 30], ['b', 'h', 0, 50], ['c', 'g', 1, 20]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 0, 50, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 30], ['b', 'h', 0, 50], ['c', 'g', 1, 20]], 'deleted': [], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 20, ['a', 'b', 'c'], ['a', 'b']]), ({'stack': [['a', 'g', 2, 30], ['b', 'h', 0, 50], ['c', 'g', 1, 20]], 'deleted': ['b', 'c'], 'group_sizes': {'g': 1, 'h': 2}}, ['a', 'g', 1, 30, ['a'], []]), ({'stack': [['a', 'g', 2, 30], ['b', 'h', 0, 50], ['c', 'g', 1, 20]], 'deleted': ['c'], 'group_sizes': {'g': 4, 'h': 0}}, ['b', 'h', 0, 50, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 30], ['b', 'h', 0, 50], ['c', 'g', 1, 20]], 'deleted': ['a'], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 20, ['b', 'c'], ['b']]), ({'stack': [['a', 'g', 2, 30], ['b', 'h', 1, 0]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 1, 0, ['a', 'b'], ['a']])], 2: [({'stack': [['a', 'g', 2, 60], ['b', 'h', 0, 100], ['c', 'g', 1, 40]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 0, 100, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 60], ['b', 'h', 0, 100], ['c', 'g', 1, 40]], 'deleted': [], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 40, ['a', 'b', 'c'], ['a', 'b']]), ({'stack': [['a', 'g', 2, 60], ['b', 'h', 0, 100], ['c', 'g', 1, 40]], 'deleted': ['b', 'c'], 'group_sizes': {'g': 1, 'h': 2}}, ['a', 'g', 1, 60, ['a'], []]), ({'stack': [['a', 'g', 2, 60], ['b', 'h', 0, 100], ['c', 'g', 1, 40]], 'deleted': ['c'], 'group_sizes': {'g': 4, 'h': 0}}, ['b', 'h', 0, 100, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 60], ['b', 'h', 0, 100], ['c', 'g', 1, 40]], 'deleted': ['a'], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 40, ['b', 'c'], ['b']]), ({'stack': [['a', 'g', 2, 60], ['b', 'h', 1, 0]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 1, 0, ['a', 'b'], ['a']])], 3: [({'stack': [['a', 'g', 2, 90], ['b', 'h', 0, 150], ['c', 'g', 1, 60]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 0, 150, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 90], ['b', 'h', 0, 150], ['c', 'g', 1, 60]], 'deleted': [], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 60, ['a', 'b', 'c'], ['a', 'b']]), ({'stack': [['a', 'g', 2, 90], ['b', 'h', 0, 150], ['c', 'g', 1, 60]], 'deleted': ['b', 'c'], 'group_sizes': {'g': 1, 'h': 2}}, ['a', 'g', 1, 90, ['a'], []]), ({'stack': [['a', 'g', 2, 90], ['b', 'h', 0, 150], ['c', 'g', 1, 60]], 'deleted': ['c'], 'group_sizes': {'g': 4, 'h': 0}}, ['b', 'h', 0, 150, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 90], ['b', 'h', 0, 150], ['c', 'g', 1, 60]], 'deleted': ['a'], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 60, ['b', 'c'], ['b']]), ({'stack': [['a', 'g', 2, 90], ['b', 'h', 1, 0]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 1, 0, ['a', 'b'], ['a']])], 4: [({'stack': [['a', 'g', 2, 120], ['b', 'h', 0, 200], ['c', 'g', 1, 80]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 0, 200, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 120], ['b', 'h', 0, 200], ['c', 'g', 1, 80]], 'deleted': [], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 80, ['a', 'b', 'c'], ['a', 'b']]), ({'stack': [['a', 'g', 2, 120], ['b', 'h', 0, 200], ['c', 'g', 1, 80]], 'deleted': ['b', 'c'], 'group_sizes': {'g': 1, 'h': 2}}, ['a', 'g', 1, 120, ['a'], []]), ({'stack': [['a', 'g', 2, 120], ['b', 'h', 0, 200], ['c', 'g', 1, 80]], 'deleted': ['c'], 'group_sizes': {'g': 4, 'h': 0}}, ['b', 'h', 0, 200, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 120], ['b', 'h', 0, 200], ['c', 'g', 1, 80]], 'deleted': ['a'], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 80, ['b', 'c'], ['b']]), ({'stack': [['a', 'g', 2, 120], ['b', 'h', 1, 0]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 1, 0, ['a', 'b'], ['a']])], 5: [({'stack': [['a', 'g', 2, 150], ['b', 'h', 0, 250], ['c', 'g', 1, 100]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 0, 250, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 150], ['b', 'h', 0, 250], ['c', 'g', 1, 100]], 'deleted': [], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 100, ['a', 'b', 'c'], ['a', 'b']]), ({'stack': [['a', 'g', 2, 150], ['b', 'h', 0, 250], ['c', 'g', 1, 100]], 'deleted': ['b', 'c'], 'group_sizes': {'g': 1, 'h': 2}}, ['a', 'g', 1, 150, ['a'], []]), ({'stack': [['a', 'g', 2, 150], ['b', 'h', 0, 250], ['c', 'g', 1, 100]], 'deleted': ['c'], 'group_sizes': {'g': 4, 'h': 0}}, ['b', 'h', 0, 250, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 150], ['b', 'h', 0, 250], ['c', 'g', 1, 100]], 'deleted': ['a'], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 100, ['b', 'c'], ['b']]), ({'stack': [['a', 'g', 2, 150], ['b', 'h', 1, 0]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 1, 0, ['a', 'b'], ['a']])]}
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', 'h', 0, 50, ['a'], ['a']]['b', 'h', 0, 50, ['a', 'b'], ['a']]Failed
workspace regression 1['c', 'g', 1, 20, ['a'], ['a', 'b']]['c', 'g', 1, 20, ['a', 'b', 'c'], ['a', 'b']]Failed
workspace regression 2['a', 'g', 1, 30, ['a'], []]['a', 'g', 1, 30, ['a'], []]Passed
workspace regression 3['b', 'h', 0, 50, ['a'], ['a']]['b', 'h', 0, 50, ['a', 'b'], ['a']]Failed
workspace regression 4['c', 'g', 1, 20, ['b'], ['b']]['c', 'g', 1, 20, ['b', 'c'], ['b']]Failed
workspace regression 5['b', 'h', 1, 0, ['a'], ['a']]['b', 'h', 1, 0, ['a', 'b'], ['a']]Failed

SHA-256 / 75d599d2b717496e81a8b3370bc9dfc29b6f8f7107bc51070d92130446b323b9

3 / The verified repair

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

N = 1
observations = []
def solve(x):
    r0 = next((r[0] for r in reversed(x['stack']) if r[0] not in x['deleted']),None)
    r1 = next((r[1] for r in reversed(x['stack']) if r[0] not in x['deleted']),None)
    r2 = next((min(r[2],x['group_sizes'][r[1]]) for r in reversed(x['stack']) if r[0] not in x['deleted']),None)
    r3 = next((r[3] for r in reversed(x['stack']) if r[0] not in x['deleted']),None)
    r4 = [r[0] for r in x['stack'] if r[0] not in x['deleted']]
    r5 = [r[0] for r in x['stack'] if r[0] not in x['deleted']][:-1]
    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: [({'stack': [['a', 'g', 2, 30], ['b', 'h', 0, 50], ['c', 'g', 1, 20]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 0, 50, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 30], ['b', 'h', 0, 50], ['c', 'g', 1, 20]], 'deleted': [], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 20, ['a', 'b', 'c'], ['a', 'b']]), ({'stack': [['a', 'g', 2, 30], ['b', 'h', 0, 50], ['c', 'g', 1, 20]], 'deleted': ['b', 'c'], 'group_sizes': {'g': 1, 'h': 2}}, ['a', 'g', 1, 30, ['a'], []]), ({'stack': [['a', 'g', 2, 30], ['b', 'h', 0, 50], ['c', 'g', 1, 20]], 'deleted': ['c'], 'group_sizes': {'g': 4, 'h': 0}}, ['b', 'h', 0, 50, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 30], ['b', 'h', 0, 50], ['c', 'g', 1, 20]], 'deleted': ['a'], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 20, ['b', 'c'], ['b']]), ({'stack': [['a', 'g', 2, 30], ['b', 'h', 1, 0]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 1, 0, ['a', 'b'], ['a']])], 2: [({'stack': [['a', 'g', 2, 60], ['b', 'h', 0, 100], ['c', 'g', 1, 40]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 0, 100, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 60], ['b', 'h', 0, 100], ['c', 'g', 1, 40]], 'deleted': [], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 40, ['a', 'b', 'c'], ['a', 'b']]), ({'stack': [['a', 'g', 2, 60], ['b', 'h', 0, 100], ['c', 'g', 1, 40]], 'deleted': ['b', 'c'], 'group_sizes': {'g': 1, 'h': 2}}, ['a', 'g', 1, 60, ['a'], []]), ({'stack': [['a', 'g', 2, 60], ['b', 'h', 0, 100], ['c', 'g', 1, 40]], 'deleted': ['c'], 'group_sizes': {'g': 4, 'h': 0}}, ['b', 'h', 0, 100, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 60], ['b', 'h', 0, 100], ['c', 'g', 1, 40]], 'deleted': ['a'], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 40, ['b', 'c'], ['b']]), ({'stack': [['a', 'g', 2, 60], ['b', 'h', 1, 0]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 1, 0, ['a', 'b'], ['a']])], 3: [({'stack': [['a', 'g', 2, 90], ['b', 'h', 0, 150], ['c', 'g', 1, 60]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 0, 150, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 90], ['b', 'h', 0, 150], ['c', 'g', 1, 60]], 'deleted': [], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 60, ['a', 'b', 'c'], ['a', 'b']]), ({'stack': [['a', 'g', 2, 90], ['b', 'h', 0, 150], ['c', 'g', 1, 60]], 'deleted': ['b', 'c'], 'group_sizes': {'g': 1, 'h': 2}}, ['a', 'g', 1, 90, ['a'], []]), ({'stack': [['a', 'g', 2, 90], ['b', 'h', 0, 150], ['c', 'g', 1, 60]], 'deleted': ['c'], 'group_sizes': {'g': 4, 'h': 0}}, ['b', 'h', 0, 150, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 90], ['b', 'h', 0, 150], ['c', 'g', 1, 60]], 'deleted': ['a'], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 60, ['b', 'c'], ['b']]), ({'stack': [['a', 'g', 2, 90], ['b', 'h', 1, 0]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 1, 0, ['a', 'b'], ['a']])], 4: [({'stack': [['a', 'g', 2, 120], ['b', 'h', 0, 200], ['c', 'g', 1, 80]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 0, 200, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 120], ['b', 'h', 0, 200], ['c', 'g', 1, 80]], 'deleted': [], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 80, ['a', 'b', 'c'], ['a', 'b']]), ({'stack': [['a', 'g', 2, 120], ['b', 'h', 0, 200], ['c', 'g', 1, 80]], 'deleted': ['b', 'c'], 'group_sizes': {'g': 1, 'h': 2}}, ['a', 'g', 1, 120, ['a'], []]), ({'stack': [['a', 'g', 2, 120], ['b', 'h', 0, 200], ['c', 'g', 1, 80]], 'deleted': ['c'], 'group_sizes': {'g': 4, 'h': 0}}, ['b', 'h', 0, 200, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 120], ['b', 'h', 0, 200], ['c', 'g', 1, 80]], 'deleted': ['a'], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 80, ['b', 'c'], ['b']]), ({'stack': [['a', 'g', 2, 120], ['b', 'h', 1, 0]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 1, 0, ['a', 'b'], ['a']])], 5: [({'stack': [['a', 'g', 2, 150], ['b', 'h', 0, 250], ['c', 'g', 1, 100]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 0, 250, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 150], ['b', 'h', 0, 250], ['c', 'g', 1, 100]], 'deleted': [], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 100, ['a', 'b', 'c'], ['a', 'b']]), ({'stack': [['a', 'g', 2, 150], ['b', 'h', 0, 250], ['c', 'g', 1, 100]], 'deleted': ['b', 'c'], 'group_sizes': {'g': 1, 'h': 2}}, ['a', 'g', 1, 150, ['a'], []]), ({'stack': [['a', 'g', 2, 150], ['b', 'h', 0, 250], ['c', 'g', 1, 100]], 'deleted': ['c'], 'group_sizes': {'g': 4, 'h': 0}}, ['b', 'h', 0, 250, ['a', 'b'], ['a']]), ({'stack': [['a', 'g', 2, 150], ['b', 'h', 0, 250], ['c', 'g', 1, 100]], 'deleted': ['a'], 'group_sizes': {'g': 1, 'h': 2}}, ['c', 'g', 1, 100, ['b', 'c'], ['b']]), ({'stack': [['a', 'g', 2, 150], ['b', 'h', 1, 0]], 'deleted': ['c'], 'group_sizes': {'g': 1, 'h': 2}}, ['b', 'h', 1, 0, ['a', 'b'], ['a']])]}
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', 'h', 0, 50, ['a', 'b'], ['a']]['b', 'h', 0, 50, ['a', 'b'], ['a']]Passed
workspace regression 1['c', 'g', 1, 20, ['a', 'b', 'c'], ['a', 'b']]['c', 'g', 1, 20, ['a', 'b', 'c'], ['a', 'b']]Passed
workspace regression 2['a', 'g', 1, 30, ['a'], []]['a', 'g', 1, 30, ['a'], []]Passed
workspace regression 3['b', 'h', 0, 50, ['a', 'b'], ['a']]['b', 'h', 0, 50, ['a', 'b'], ['a']]Passed
workspace regression 4['c', 'g', 1, 20, ['b', 'c'], ['b']]['c', 'g', 1, 20, ['b', 'c'], ['b']]Passed
workspace regression 5['b', 'h', 1, 0, ['a', 'b'], ['a']]['b', 'h', 1, 0, ['a', 'b'], ['a']]Passed

SHA-256 / e60bd678a02720fc761c7b9e201f6a3ea39cd6dea6a2e5e3c5293d954ad9a112

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

Case digest / ce6ceb2efa77ad50c3c0189c1f3c1f228f2f5f6a9291f22a5da60d6f82af5f38