FA-36146 / Tab interfaces / Open access
Drag auto scroll: right clamp · case 01
The tab workspace reports an incorrect right clamp.
ROOT CAUSE
The right clamp decision uses x['scroll']+x['speed'] instead of min(x['max_scroll'],x['scroll']+x['speed']).
VERIFIED REPAIR
Use the stipulated workspace rule: min(x['max_scroll'],x['scroll']+x['speed']).
Unsuccessful approach: The partial repair max(x['max_scroll'],x['scroll']+x['speed']) still violates a workspace boundary or normal case.
Case contract
While dragging a tab, the strip scrolls within edge zones proportional to penetration, stops outside strip and clamps movement to available scroll range.
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['start']<=x['pointer']<x['start']+x['zone']
r1 = x['end']-x['zone']<x['pointer']<x['end']
r2 = x['dragging']
r3 = max(0,min(x['zone'],x['pointer']-(x['end']-x['zone'])))
r4 = x['speed']*max(0,min(x['zone'],x['pointer']-(x['end']-x['zone'])))//x['zone']
r5 = x['scroll']+x['speed']
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: [({'pointer': 195, 'start': 0, 'end': 200, 'zone': 20, 'scroll': 50, 'max_scroll': 300, 'speed': 12, 'dragging': True}, [False, True, True, 15, 9, 62]), ({'pointer': 5, 'start': 0, 'end': 200, 'zone': 20, 'scroll': 50, 'max_scroll': 300, 'speed': 12, 'dragging': True}, [True, False, True, 0, 0, 62]), ({'pointer': 100, 'start': 0, 'end': 200, 'zone': 20, 'scroll': 50, 'max_scroll': 300, 'speed': 12, 'dragging': True}, [False, False, True, 0, 0, 62]), ({'pointer': 220, 'start': 0, 'end': 200, 'zone': 20, 'scroll': 50, 'max_scroll': 300, 'speed': 12, 'dragging': True}, [False, False, True, 20, 12, 62]), ({'pointer': 195, 'start': 0, 'end': 200, 'zone': 20, 'scroll': 298, 'max_scroll': 300, 'speed': 12, 'dragging': True}, [False, True, True, 15, 9, 300]), ({'pointer': 195, 'start': 0, 'end': 200, 'zone': 20, 'scroll': 50, 'max_scroll': 300, 'speed': 12, 'dragging': False}, [False, True, False, 15, 9, 62]), ({'pointer': -1, 'start': 0, 'end': 200, 'zone': 20, 'scroll': 50, 'max_scroll': 300, 'speed': 12, 'dragging': True}, [False, False, True, 0, 0, 62])], 2: [({'pointer': 390, 'start': 0, 'end': 400, 'zone': 40, 'scroll': 100, 'max_scroll': 600, 'speed': 24, 'dragging': True}, [False, True, True, 30, 18, 124]), ({'pointer': 10, 'start': 0, 'end': 400, 'zone': 40, 'scroll': 100, 'max_scroll': 600, 'speed': 24, 'dragging': True}, [True, False, True, 0, 0, 124]), ({'pointer': 200, 'start': 0, 'end': 400, 'zone': 40, 'scroll': 100, 'max_scroll': 600, 'speed': 24, 'dragging': True}, [False, False, True, 0, 0, 124]), ({'pointer': 440, 'start': 0, 'end': 400, 'zone': 40, 'scroll': 100, 'max_scroll': 600, 'speed': 24, 'dragging': True}, [False, False, True, 40, 24, 124]), ({'pointer': 390, 'start': 0, 'end': 400, 'zone': 40, 'scroll': 596, 'max_scroll': 600, 'speed': 24, 'dragging': True}, [False, True, True, 30, 18, 600]), ({'pointer': 390, 'start': 0, 'end': 400, 'zone': 40, 'scroll': 100, 'max_scroll': 600, 'speed': 24, 'dragging': False}, [False, True, False, 30, 18, 124]), ({'pointer': -2, 'start': 0, 'end': 400, 'zone': 40, 'scroll': 100, 'max_scroll': 600, 'speed': 24, 'dragging': True}, [False, False, True, 0, 0, 124])], 3: [({'pointer': 585, 'start': 0, 'end': 600, 'zone': 60, 'scroll': 150, 'max_scroll': 900, 'speed': 36, 'dragging': True}, [False, True, True, 45, 27, 186]), ({'pointer': 15, 'start': 0, 'end': 600, 'zone': 60, 'scroll': 150, 'max_scroll': 900, 'speed': 36, 'dragging': True}, [True, False, True, 0, 0, 186]), ({'pointer': 300, 'start': 0, 'end': 600, 'zone': 60, 'scroll': 150, 'max_scroll': 900, 'speed': 36, 'dragging': True}, [False, False, True, 0, 0, 186]), ({'pointer': 660, 'start': 0, 'end': 600, 'zone': 60, 'scroll': 150, 'max_scroll': 900, 'speed': 36, 'dragging': True}, [False, False, True, 60, 36, 186]), ({'pointer': 585, 'start': 0, 'end': 600, 'zone': 60, 'scroll': 894, 'max_scroll': 900, 'speed': 36, 'dragging': True}, [False, True, True, 45, 27, 900]), ({'pointer': 585, 'start': 0, 'end': 600, 'zone': 60, 'scroll': 150, 'max_scroll': 900, 'speed': 36, 'dragging': False}, [False, True, False, 45, 27, 186]), ({'pointer': -3, 'start': 0, 'end': 600, 'zone': 60, 'scroll': 150, 'max_scroll': 900, 'speed': 36, 'dragging': True}, [False, False, True, 0, 0, 186])], 4: [({'pointer': 780, 'start': 0, 'end': 800, 'zone': 80, 'scroll': 200, 'max_scroll': 1200, 'speed': 48, 'dragging': True}, [False, True, True, 60, 36, 248]), ({'pointer': 20, 'start': 0, 'end': 800, 'zone': 80, 'scroll': 200, 'max_scroll': 1200, 'speed': 48, 'dragging': True}, [True, False, True, 0, 0, 248]), ({'pointer': 400, 'start': 0, 'end': 800, 'zone': 80, 'scroll': 200, 'max_scroll': 1200, 'speed': 48, 'dragging': True}, [False, False, True, 0, 0, 248]), ({'pointer': 880, 'start': 0, 'end': 800, 'zone': 80, 'scroll': 200, 'max_scroll': 1200, 'speed': 48, 'dragging': True}, [False, False, True, 80, 48, 248]), ({'pointer': 780, 'start': 0, 'end': 800, 'zone': 80, 'scroll': 1192, 'max_scroll': 1200, 'speed': 48, 'dragging': True}, [False, True, True, 60, 36, 1200]), ({'pointer': 780, 'start': 0, 'end': 800, 'zone': 80, 'scroll': 200, 'max_scroll': 1200, 'speed': 48, 'dragging': False}, [False, True, False, 60, 36, 248]), ({'pointer': -4, 'start': 0, 'end': 800, 'zone': 80, 'scroll': 200, 'max_scroll': 1200, 'speed': 48, 'dragging': True}, [False, False, True, 0, 0, 248])], 5: [({'pointer': 975, 'start': 0, 'end': 1000, 'zone': 100, 'scroll': 250, 'max_scroll': 1500, 'speed': 60, 'dragging': True}, [False, True, True, 75, 45, 310]), ({'pointer': 25, 'start': 0, 'end': 1000, 'zone': 100, 'scroll': 250, 'max_scroll': 1500, 'speed': 60, 'dragging': True}, [True, False, True, 0, 0, 310]), ({'pointer': 500, 'start': 0, 'end': 1000, 'zone': 100, 'scroll': 250, 'max_scroll': 1500, 'speed': 60, 'dragging': True}, [False, False, True, 0, 0, 310]), ({'pointer': 1100, 'start': 0, 'end': 1000, 'zone': 100, 'scroll': 250, 'max_scroll': 1500, 'speed': 60, 'dragging': True}, [False, False, True, 100, 60, 310]), ({'pointer': 975, 'start': 0, 'end': 1000, 'zone': 100, 'scroll': 1490, 'max_scroll': 1500, 'speed': 60, 'dragging': True}, [False, True, True, 75, 45, 1500]), ({'pointer': 975, 'start': 0, 'end': 1000, 'zone': 100, 'scroll': 250, 'max_scroll': 1500, 'speed': 60, 'dragging': False}, [False, True, False, 75, 45, 310]), ({'pointer': -5, 'start': 0, 'end': 1000, 'zone': 100, 'scroll': 250, 'max_scroll': 1500, 'speed': 60, 'dragging': True}, [False, False, True, 0, 0, 310])]}
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| workspace regression 0 | [False, True, True, 15, 9, 62] | [False, True, True, 15, 9, 62] | Passed |
| workspace regression 1 | [True, False, True, 0, 0, 62] | [True, False, True, 0, 0, 62] | Passed |
| workspace regression 2 | [False, False, True, 0, 0, 62] | [False, False, True, 0, 0, 62] | Passed |
| workspace regression 3 | [False, False, True, 20, 12, 62] | [False, False, True, 20, 12, 62] | Passed |
| workspace regression 4 | [False, True, True, 15, 9, 310] | [False, True, True, 15, 9, 300] | Failed |
| workspace regression 5 | [False, True, False, 15, 9, 62] | [False, True, False, 15, 9, 62] | Passed |
| workspace regression 6 | [False, False, True, 0, 0, 62] | [False, False, True, 0, 0, 62] | Passed |
SHA-256 / 361516082473d0c26c371bfc5fcbb4fae41e075c009022a4657af0648ed8ea54
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
r0 = x['start']<=x['pointer']<x['start']+x['zone']
r1 = x['end']-x['zone']<x['pointer']<x['end']
r2 = x['dragging']
r3 = max(0,min(x['zone'],x['pointer']-(x['end']-x['zone'])))
r4 = x['speed']*max(0,min(x['zone'],x['pointer']-(x['end']-x['zone'])))//x['zone']
r5 = max(x['max_scroll'],x['scroll']+x['speed'])
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: [({'pointer': 195, 'start': 0, 'end': 200, 'zone': 20, 'scroll': 50, 'max_scroll': 300, 'speed': 12, 'dragging': True}, [False, True, True, 15, 9, 62]), ({'pointer': 5, 'start': 0, 'end': 200, 'zone': 20, 'scroll': 50, 'max_scroll': 300, 'speed': 12, 'dragging': True}, [True, False, True, 0, 0, 62]), ({'pointer': 100, 'start': 0, 'end': 200, 'zone': 20, 'scroll': 50, 'max_scroll': 300, 'speed': 12, 'dragging': True}, [False, False, True, 0, 0, 62]), ({'pointer': 220, 'start': 0, 'end': 200, 'zone': 20, 'scroll': 50, 'max_scroll': 300, 'speed': 12, 'dragging': True}, [False, False, True, 20, 12, 62]), ({'pointer': 195, 'start': 0, 'end': 200, 'zone': 20, 'scroll': 298, 'max_scroll': 300, 'speed': 12, 'dragging': True}, [False, True, True, 15, 9, 300]), ({'pointer': 195, 'start': 0, 'end': 200, 'zone': 20, 'scroll': 50, 'max_scroll': 300, 'speed': 12, 'dragging': False}, [False, True, False, 15, 9, 62]), ({'pointer': -1, 'start': 0, 'end': 200, 'zone': 20, 'scroll': 50, 'max_scroll': 300, 'speed': 12, 'dragging': True}, [False, False, True, 0, 0, 62])], 2: [({'pointer': 390, 'start': 0, 'end': 400, 'zone': 40, 'scroll': 100, 'max_scroll': 600, 'speed': 24, 'dragging': True}, [False, True, True, 30, 18, 124]), ({'pointer': 10, 'start': 0, 'end': 400, 'zone': 40, 'scroll': 100, 'max_scroll': 600, 'speed': 24, 'dragging': True}, [True, False, True, 0, 0, 124]), ({'pointer': 200, 'start': 0, 'end': 400, 'zone': 40, 'scroll': 100, 'max_scroll': 600, 'speed': 24, 'dragging': True}, [False, False, True, 0, 0, 124]), ({'pointer': 440, 'start': 0, 'end': 400, 'zone': 40, 'scroll': 100, 'max_scroll': 600, 'speed': 24, 'dragging': True}, [False, False, True, 40, 24, 124]), ({'pointer': 390, 'start': 0, 'end': 400, 'zone': 40, 'scroll': 596, 'max_scroll': 600, 'speed': 24, 'dragging': True}, [False, True, True, 30, 18, 600]), ({'pointer': 390, 'start': 0, 'end': 400, 'zone': 40, 'scroll': 100, 'max_scroll': 600, 'speed': 24, 'dragging': False}, [False, True, False, 30, 18, 124]), ({'pointer': -2, 'start': 0, 'end': 400, 'zone': 40, 'scroll': 100, 'max_scroll': 600, 'speed': 24, 'dragging': True}, [False, False, True, 0, 0, 124])], 3: [({'pointer': 585, 'start': 0, 'end': 600, 'zone': 60, 'scroll': 150, 'max_scroll': 900, 'speed': 36, 'dragging': True}, [False, True, True, 45, 27, 186]), ({'pointer': 15, 'start': 0, 'end': 600, 'zone': 60, 'scroll': 150, 'max_scroll': 900, 'speed': 36, 'dragging': True}, [True, False, True, 0, 0, 186]), ({'pointer': 300, 'start': 0, 'end': 600, 'zone': 60, 'scroll': 150, 'max_scroll': 900, 'speed': 36, 'dragging': True}, [False, False, True, 0, 0, 186]), ({'pointer': 660, 'start': 0, 'end': 600, 'zone': 60, 'scroll': 150, 'max_scroll': 900, 'speed': 36, 'dragging': True}, [False, False, True, 60, 36, 186]), ({'pointer': 585, 'start': 0, 'end': 600, 'zone': 60, 'scroll': 894, 'max_scroll': 900, 'speed': 36, 'dragging': True}, [False, True, True, 45, 27, 900]), ({'pointer': 585, 'start': 0, 'end': 600, 'zone': 60, 'scroll': 150, 'max_scroll': 900, 'speed': 36, 'dragging': False}, [False, True, False, 45, 27, 186]), ({'pointer': -3, 'start': 0, 'end': 600, 'zone': 60, 'scroll': 150, 'max_scroll': 900, 'speed': 36, 'dragging': True}, [False, False, True, 0, 0, 186])], 4: [({'pointer': 780, 'start': 0, 'end': 800, 'zone': 80, 'scroll': 200, 'max_scroll': 1200, 'speed': 48, 'dragging': True}, [False, True, True, 60, 36, 248]), ({'pointer': 20, 'start': 0, 'end': 800, 'zone': 80, 'scroll': 200, 'max_scroll': 1200, 'speed': 48, 'dragging': True}, [True, False, True, 0, 0, 248]), ({'pointer': 400, 'start': 0, 'end': 800, 'zone': 80, 'scroll': 200, 'max_scroll': 1200, 'speed': 48, 'dragging': True}, [False, False, True, 0, 0, 248]), ({'pointer': 880, 'start': 0, 'end': 800, 'zone': 80, 'scroll': 200, 'max_scroll': 1200, 'speed': 48, 'dragging': True}, [False, False, True, 80, 48, 248]), ({'pointer': 780, 'start': 0, 'end': 800, 'zone': 80, 'scroll': 1192, 'max_scroll': 1200, 'speed': 48, 'dragging': True}, [False, True, True, 60, 36, 1200]), ({'pointer': 780, 'start': 0, 'end': 800, 'zone': 80, 'scroll': 200, 'max_scroll': 1200, 'speed': 48, 'dragging': False}, [False, True, False, 60, 36, 248]), ({'pointer': -4, 'start': 0, 'end': 800, 'zone': 80, 'scroll': 200, 'max_scroll': 1200, 'speed': 48, 'dragging': True}, [False, False, True, 0, 0, 248])], 5: [({'pointer': 975, 'start': 0, 'end': 1000, 'zone': 100, 'scroll': 250, 'max_scroll': 1500, 'speed': 60, 'dragging': True}, [False, True, True, 75, 45, 310]), ({'pointer': 25, 'start': 0, 'end': 1000, 'zone': 100, 'scroll': 250, 'max_scroll': 1500, 'speed': 60, 'dragging': True}, [True, False, True, 0, 0, 310]), ({'pointer': 500, 'start': 0, 'end': 1000, 'zone': 100, 'scroll': 250, 'max_scroll': 1500, 'speed': 60, 'dragging': True}, [False, False, True, 0, 0, 310]), ({'pointer': 1100, 'start': 0, 'end': 1000, 'zone': 100, 'scroll': 250, 'max_scroll': 1500, 'speed': 60, 'dragging': True}, [False, False, True, 100, 60, 310]), ({'pointer': 975, 'start': 0, 'end': 1000, 'zone': 100, 'scroll': 1490, 'max_scroll': 1500, 'speed': 60, 'dragging': True}, [False, True, True, 75, 45, 1500]), ({'pointer': 975, 'start': 0, 'end': 1000, 'zone': 100, 'scroll': 250, 'max_scroll': 1500, 'speed': 60, 'dragging': False}, [False, True, False, 75, 45, 310]), ({'pointer': -5, 'start': 0, 'end': 1000, 'zone': 100, 'scroll': 250, 'max_scroll': 1500, 'speed': 60, 'dragging': True}, [False, False, True, 0, 0, 310])]}
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| workspace regression 0 | [False, True, True, 15, 9, 300] | [False, True, True, 15, 9, 62] | Failed |
| workspace regression 1 | [True, False, True, 0, 0, 300] | [True, False, True, 0, 0, 62] | Failed |
| workspace regression 2 | [False, False, True, 0, 0, 300] | [False, False, True, 0, 0, 62] | Failed |
| workspace regression 3 | [False, False, True, 20, 12, 300] | [False, False, True, 20, 12, 62] | Failed |
| workspace regression 4 | [False, True, True, 15, 9, 310] | [False, True, True, 15, 9, 300] | Failed |
| workspace regression 5 | [False, True, False, 15, 9, 300] | [False, True, False, 15, 9, 62] | Failed |
| workspace regression 6 | [False, False, True, 0, 0, 300] | [False, False, True, 0, 0, 62] | Failed |
SHA-256 / 6a5cd679e60f97ecb63bb14fd90720d166233ed86dc7b3a4d8fae2e6347f523d
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
r0 = x['start']<=x['pointer']<x['start']+x['zone']
r1 = x['end']-x['zone']<x['pointer']<x['end']
r2 = x['dragging']
r3 = max(0,min(x['zone'],x['pointer']-(x['end']-x['zone'])))
r4 = x['speed']*max(0,min(x['zone'],x['pointer']-(x['end']-x['zone'])))//x['zone']
r5 = min(x['max_scroll'],x['scroll']+x['speed'])
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: [({'pointer': 195, 'start': 0, 'end': 200, 'zone': 20, 'scroll': 50, 'max_scroll': 300, 'speed': 12, 'dragging': True}, [False, True, True, 15, 9, 62]), ({'pointer': 5, 'start': 0, 'end': 200, 'zone': 20, 'scroll': 50, 'max_scroll': 300, 'speed': 12, 'dragging': True}, [True, False, True, 0, 0, 62]), ({'pointer': 100, 'start': 0, 'end': 200, 'zone': 20, 'scroll': 50, 'max_scroll': 300, 'speed': 12, 'dragging': True}, [False, False, True, 0, 0, 62]), ({'pointer': 220, 'start': 0, 'end': 200, 'zone': 20, 'scroll': 50, 'max_scroll': 300, 'speed': 12, 'dragging': True}, [False, False, True, 20, 12, 62]), ({'pointer': 195, 'start': 0, 'end': 200, 'zone': 20, 'scroll': 298, 'max_scroll': 300, 'speed': 12, 'dragging': True}, [False, True, True, 15, 9, 300]), ({'pointer': 195, 'start': 0, 'end': 200, 'zone': 20, 'scroll': 50, 'max_scroll': 300, 'speed': 12, 'dragging': False}, [False, True, False, 15, 9, 62]), ({'pointer': -1, 'start': 0, 'end': 200, 'zone': 20, 'scroll': 50, 'max_scroll': 300, 'speed': 12, 'dragging': True}, [False, False, True, 0, 0, 62])], 2: [({'pointer': 390, 'start': 0, 'end': 400, 'zone': 40, 'scroll': 100, 'max_scroll': 600, 'speed': 24, 'dragging': True}, [False, True, True, 30, 18, 124]), ({'pointer': 10, 'start': 0, 'end': 400, 'zone': 40, 'scroll': 100, 'max_scroll': 600, 'speed': 24, 'dragging': True}, [True, False, True, 0, 0, 124]), ({'pointer': 200, 'start': 0, 'end': 400, 'zone': 40, 'scroll': 100, 'max_scroll': 600, 'speed': 24, 'dragging': True}, [False, False, True, 0, 0, 124]), ({'pointer': 440, 'start': 0, 'end': 400, 'zone': 40, 'scroll': 100, 'max_scroll': 600, 'speed': 24, 'dragging': True}, [False, False, True, 40, 24, 124]), ({'pointer': 390, 'start': 0, 'end': 400, 'zone': 40, 'scroll': 596, 'max_scroll': 600, 'speed': 24, 'dragging': True}, [False, True, True, 30, 18, 600]), ({'pointer': 390, 'start': 0, 'end': 400, 'zone': 40, 'scroll': 100, 'max_scroll': 600, 'speed': 24, 'dragging': False}, [False, True, False, 30, 18, 124]), ({'pointer': -2, 'start': 0, 'end': 400, 'zone': 40, 'scroll': 100, 'max_scroll': 600, 'speed': 24, 'dragging': True}, [False, False, True, 0, 0, 124])], 3: [({'pointer': 585, 'start': 0, 'end': 600, 'zone': 60, 'scroll': 150, 'max_scroll': 900, 'speed': 36, 'dragging': True}, [False, True, True, 45, 27, 186]), ({'pointer': 15, 'start': 0, 'end': 600, 'zone': 60, 'scroll': 150, 'max_scroll': 900, 'speed': 36, 'dragging': True}, [True, False, True, 0, 0, 186]), ({'pointer': 300, 'start': 0, 'end': 600, 'zone': 60, 'scroll': 150, 'max_scroll': 900, 'speed': 36, 'dragging': True}, [False, False, True, 0, 0, 186]), ({'pointer': 660, 'start': 0, 'end': 600, 'zone': 60, 'scroll': 150, 'max_scroll': 900, 'speed': 36, 'dragging': True}, [False, False, True, 60, 36, 186]), ({'pointer': 585, 'start': 0, 'end': 600, 'zone': 60, 'scroll': 894, 'max_scroll': 900, 'speed': 36, 'dragging': True}, [False, True, True, 45, 27, 900]), ({'pointer': 585, 'start': 0, 'end': 600, 'zone': 60, 'scroll': 150, 'max_scroll': 900, 'speed': 36, 'dragging': False}, [False, True, False, 45, 27, 186]), ({'pointer': -3, 'start': 0, 'end': 600, 'zone': 60, 'scroll': 150, 'max_scroll': 900, 'speed': 36, 'dragging': True}, [False, False, True, 0, 0, 186])], 4: [({'pointer': 780, 'start': 0, 'end': 800, 'zone': 80, 'scroll': 200, 'max_scroll': 1200, 'speed': 48, 'dragging': True}, [False, True, True, 60, 36, 248]), ({'pointer': 20, 'start': 0, 'end': 800, 'zone': 80, 'scroll': 200, 'max_scroll': 1200, 'speed': 48, 'dragging': True}, [True, False, True, 0, 0, 248]), ({'pointer': 400, 'start': 0, 'end': 800, 'zone': 80, 'scroll': 200, 'max_scroll': 1200, 'speed': 48, 'dragging': True}, [False, False, True, 0, 0, 248]), ({'pointer': 880, 'start': 0, 'end': 800, 'zone': 80, 'scroll': 200, 'max_scroll': 1200, 'speed': 48, 'dragging': True}, [False, False, True, 80, 48, 248]), ({'pointer': 780, 'start': 0, 'end': 800, 'zone': 80, 'scroll': 1192, 'max_scroll': 1200, 'speed': 48, 'dragging': True}, [False, True, True, 60, 36, 1200]), ({'pointer': 780, 'start': 0, 'end': 800, 'zone': 80, 'scroll': 200, 'max_scroll': 1200, 'speed': 48, 'dragging': False}, [False, True, False, 60, 36, 248]), ({'pointer': -4, 'start': 0, 'end': 800, 'zone': 80, 'scroll': 200, 'max_scroll': 1200, 'speed': 48, 'dragging': True}, [False, False, True, 0, 0, 248])], 5: [({'pointer': 975, 'start': 0, 'end': 1000, 'zone': 100, 'scroll': 250, 'max_scroll': 1500, 'speed': 60, 'dragging': True}, [False, True, True, 75, 45, 310]), ({'pointer': 25, 'start': 0, 'end': 1000, 'zone': 100, 'scroll': 250, 'max_scroll': 1500, 'speed': 60, 'dragging': True}, [True, False, True, 0, 0, 310]), ({'pointer': 500, 'start': 0, 'end': 1000, 'zone': 100, 'scroll': 250, 'max_scroll': 1500, 'speed': 60, 'dragging': True}, [False, False, True, 0, 0, 310]), ({'pointer': 1100, 'start': 0, 'end': 1000, 'zone': 100, 'scroll': 250, 'max_scroll': 1500, 'speed': 60, 'dragging': True}, [False, False, True, 100, 60, 310]), ({'pointer': 975, 'start': 0, 'end': 1000, 'zone': 100, 'scroll': 1490, 'max_scroll': 1500, 'speed': 60, 'dragging': True}, [False, True, True, 75, 45, 1500]), ({'pointer': 975, 'start': 0, 'end': 1000, 'zone': 100, 'scroll': 250, 'max_scroll': 1500, 'speed': 60, 'dragging': False}, [False, True, False, 75, 45, 310]), ({'pointer': -5, 'start': 0, 'end': 1000, 'zone': 100, 'scroll': 250, 'max_scroll': 1500, 'speed': 60, 'dragging': True}, [False, False, True, 0, 0, 310])]}
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| workspace regression 0 | [False, True, True, 15, 9, 62] | [False, True, True, 15, 9, 62] | Passed |
| workspace regression 1 | [True, False, True, 0, 0, 62] | [True, False, True, 0, 0, 62] | Passed |
| workspace regression 2 | [False, False, True, 0, 0, 62] | [False, False, True, 0, 0, 62] | Passed |
| workspace regression 3 | [False, False, True, 20, 12, 62] | [False, False, True, 20, 12, 62] | Passed |
| workspace regression 4 | [False, True, True, 15, 9, 300] | [False, True, True, 15, 9, 300] | Passed |
| workspace regression 5 | [False, True, False, 15, 9, 62] | [False, True, False, 15, 9, 62] | Passed |
| workspace regression 6 | [False, False, True, 0, 0, 62] | [False, False, True, 0, 0, 62] | Passed |
SHA-256 / a2f3eae07d08294dcd86d4d55303713d46d73b643200a9eb8e975bc94284c46f
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:48.311872+00:00.
Case digest / cbd635a918c7b178d834fd094d47a86797642b4c60d0ef37cd2054a5fd33306a