FAILURE MAP
← Case archive

FA-35611 / Tab interfaces / Open access

Recently closed stack: restore entry · case 01

The tab workspace reports an incorrect restore entry.

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

ROOT CAUSE

The restore entry decision uses x['stack'][0][0] instead of next((r[0] for r in reversed(x['stack']) if r[0] not in x['deleted']),None).

VERIFIED REPAIR

Use the stipulated workspace rule: next((r[0] for r in reversed(x['stack']) if r[0] not in x['deleted']),None).

Unsuccessful approach: The partial repair x['stack'][-1][0] 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 = x['stack'][0][0]
    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['a', 'h', 0, 50, ['a', 'b'], ['a']]['b', 'h', 0, 50, ['a', 'b'], ['a']]Failed
workspace regression 1['a', 'g', 1, 20, ['a', 'b', 'c'], ['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['a', 'h', 0, 50, ['a', 'b'], ['a']]['b', 'h', 0, 50, ['a', 'b'], ['a']]Failed
workspace regression 4['a', 'g', 1, 20, ['b', 'c'], ['b']]['c', 'g', 1, 20, ['b', 'c'], ['b']]Failed
workspace regression 5['a', 'h', 1, 0, ['a', 'b'], ['a']]['b', 'h', 1, 0, ['a', 'b'], ['a']]Failed

SHA-256 / 859cc59093a44023a8ec201467c8ab11ae81ae79bf9e9b417293a3e168d822c7

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(x):
    r0 = x['stack'][-1][0]
    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['c', 'h', 0, 50, ['a', 'b'], ['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['c', 'g', 1, 30, ['a'], []]['a', 'g', 1, 30, ['a'], []]Failed
workspace regression 3['c', 'h', 0, 50, ['a', 'b'], ['a']]['b', 'h', 0, 50, ['a', 'b'], ['a']]Failed
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 / 713db0dd42c8790637ea40ca9e457fbbe3352653b20d20d677db506756bdbb2a

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

Case digest / 7339b5240377a431733627497d00cc46c7789e3a8b72bc343805b7394da6d66a