{"abstract":"The tab workspace reports an incorrect right edge zone.","category":"Tab interfaces","checks":7,"contract":"While dragging a tab, the strip scrolls within edge zones proportional to penetration, stops outside strip and clamps movement to available scroll range.","evaluation_group":"s3-tabs-drag-auto-scroll","failed_approach":"The partial repair x['pointer']>=x['end'] still violates a workspace boundary or normal case.","family":"s3-tab-interfaces-drag-auto-scroll-right-edge-zone","id":"FA-36126","implementations":{"attempt":{"sha256":"befd4b998daf41197883b2112c10dcd6ce996ae7f5a24ce80c6a575b757c20dd","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    r0 = x['start']<=x['pointer']<x['start']+x['zone']\n    r1 = x['pointer']>=x['end']\n    r2 = x['dragging']\n    r3 = max(0,min(x['zone'],x['pointer']-(x['end']-x['zone'])))\n    r4 = x['speed']*max(0,min(x['zone'],x['pointer']-(x['end']-x['zone'])))//x['zone']\n    r5 = min(x['max_scroll'],x['scroll']+x['speed'])\n    return [r0,r1,r2,r3,r4,r5]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = {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])]}\nfor i, (inputs, expected) in enumerate(fixtures[N]):\n    check(\"workspace regression \"+str(i), solve(inputs), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"7718d39a98e139e3fb603375bc91298817c9292627ac476bc77ce17be333a894","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    r0 = x['start']<=x['pointer']<x['start']+x['zone']\n    r1 = x['pointer']>x['end']-x['zone']\n    r2 = x['dragging']\n    r3 = max(0,min(x['zone'],x['pointer']-(x['end']-x['zone'])))\n    r4 = x['speed']*max(0,min(x['zone'],x['pointer']-(x['end']-x['zone'])))//x['zone']\n    r5 = min(x['max_scroll'],x['scroll']+x['speed'])\n    return [r0,r1,r2,r3,r4,r5]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = {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])]}\nfor i, (inputs, expected) in enumerate(fixtures[N]):\n    check(\"workspace regression \"+str(i), solve(inputs), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"a2f3eae07d08294dcd86d4d55303713d46d73b643200a9eb8e975bc94284c46f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    r0 = x['start']<=x['pointer']<x['start']+x['zone']\n    r1 = x['end']-x['zone']<x['pointer']<x['end']\n    r2 = x['dragging']\n    r3 = max(0,min(x['zone'],x['pointer']-(x['end']-x['zone'])))\n    r4 = x['speed']*max(0,min(x['zone'],x['pointer']-(x['end']-x['zone'])))//x['zone']\n    r5 = min(x['max_scroll'],x['scroll']+x['speed'])\n    return [r0,r1,r2,r3,r4,r5]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = {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])]}\nfor i, (inputs, expected) in enumerate(fixtures[N]):\n    check(\"workspace regression \"+str(i), solve(inputs), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"s3-tab-interfaces-drag-auto-scroll-right-edge-zone","generated_at":"2026-09-29T14:42:48.185192+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Offline tab/panel workspace behavior; no browser or desktop framework is emulated.","repair":"Use the stipulated workspace rule: x['end']-x['zone']<x['pointer']<x['end'].","root_cause":"The right edge zone decision uses x['pointer']>x['end']-x['zone'] instead of x['end']-x['zone']<x['pointer']<x['end'].","sha256":"a79744b390d2021c0cc8332f20e0577886ed264375078ff1b9476fe1e8657c21","title":"Drag auto scroll: right edge zone · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":46.272,"exit_code":1,"observations":[{"actual":[false,false,true,15,9,62],"check":"workspace regression 0","expected":[false,true,true,15,9,62],"passed":false},{"actual":[true,false,true,0,0,62],"check":"workspace regression 1","expected":[true,false,true,0,0,62],"passed":true},{"actual":[false,false,true,0,0,62],"check":"workspace regression 2","expected":[false,false,true,0,0,62],"passed":true},{"actual":[false,true,true,20,12,62],"check":"workspace regression 3","expected":[false,false,true,20,12,62],"passed":false},{"actual":[false,false,true,15,9,300],"check":"workspace regression 4","expected":[false,true,true,15,9,300],"passed":false},{"actual":[false,false,false,15,9,62],"check":"workspace regression 5","expected":[false,true,false,15,9,62],"passed":false},{"actual":[false,false,true,0,0,62],"check":"workspace regression 6","expected":[false,false,true,0,0,62],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"workspace regression 0\", \"actual\": [false, false, true, 15, 9, 62], \"expected\": [false, true, true, 15, 9, 62], \"passed\": false}, {\"check\": \"workspace regression 1\", \"actual\": [true, false, true, 0, 0, 62], \"expected\": [true, false, true, 0, 0, 62], \"passed\": true}, {\"check\": \"workspace regression 2\", \"actual\": [false, false, true, 0, 0, 62], \"expected\": [false, false, true, 0, 0, 62], \"passed\": true}, {\"check\": \"workspace regression 3\", \"actual\": [false, true, true, 20, 12, 62], \"expected\": [false, false, true, 20, 12, 62], \"passed\": false}, {\"check\": \"workspace regression 4\", \"actual\": [false, false, true, 15, 9, 300], \"expected\": [false, true, true, 15, 9, 300], \"passed\": false}, {\"check\": \"workspace regression 5\", \"actual\": [false, false, false, 15, 9, 62], \"expected\": [false, true, false, 15, 9, 62], \"passed\": false}, {\"check\": \"workspace regression 6\", \"actual\": [false, false, true, 0, 0, 62], \"expected\": [false, false, true, 0, 0, 62], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.366,"exit_code":1,"observations":[{"actual":[false,true,true,15,9,62],"check":"workspace regression 0","expected":[false,true,true,15,9,62],"passed":true},{"actual":[true,false,true,0,0,62],"check":"workspace regression 1","expected":[true,false,true,0,0,62],"passed":true},{"actual":[false,false,true,0,0,62],"check":"workspace regression 2","expected":[false,false,true,0,0,62],"passed":true},{"actual":[false,true,true,20,12,62],"check":"workspace regression 3","expected":[false,false,true,20,12,62],"passed":false},{"actual":[false,true,true,15,9,300],"check":"workspace regression 4","expected":[false,true,true,15,9,300],"passed":true},{"actual":[false,true,false,15,9,62],"check":"workspace regression 5","expected":[false,true,false,15,9,62],"passed":true},{"actual":[false,false,true,0,0,62],"check":"workspace regression 6","expected":[false,false,true,0,0,62],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"workspace regression 0\", \"actual\": [false, true, true, 15, 9, 62], \"expected\": [false, true, true, 15, 9, 62], \"passed\": true}, {\"check\": \"workspace regression 1\", \"actual\": [true, false, true, 0, 0, 62], \"expected\": [true, false, true, 0, 0, 62], \"passed\": true}, {\"check\": \"workspace regression 2\", \"actual\": [false, false, true, 0, 0, 62], \"expected\": [false, false, true, 0, 0, 62], \"passed\": true}, {\"check\": \"workspace regression 3\", \"actual\": [false, true, true, 20, 12, 62], \"expected\": [false, false, true, 20, 12, 62], \"passed\": false}, {\"check\": \"workspace regression 4\", \"actual\": [false, true, true, 15, 9, 300], \"expected\": [false, true, true, 15, 9, 300], \"passed\": true}, {\"check\": \"workspace regression 5\", \"actual\": [false, true, false, 15, 9, 62], \"expected\": [false, true, false, 15, 9, 62], \"passed\": true}, {\"check\": \"workspace regression 6\", \"actual\": [false, false, true, 0, 0, 62], \"expected\": [false, false, true, 0, 0, 62], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":47.631,"exit_code":0,"observations":[{"actual":[false,true,true,15,9,62],"check":"workspace regression 0","expected":[false,true,true,15,9,62],"passed":true},{"actual":[true,false,true,0,0,62],"check":"workspace regression 1","expected":[true,false,true,0,0,62],"passed":true},{"actual":[false,false,true,0,0,62],"check":"workspace regression 2","expected":[false,false,true,0,0,62],"passed":true},{"actual":[false,false,true,20,12,62],"check":"workspace regression 3","expected":[false,false,true,20,12,62],"passed":true},{"actual":[false,true,true,15,9,300],"check":"workspace regression 4","expected":[false,true,true,15,9,300],"passed":true},{"actual":[false,true,false,15,9,62],"check":"workspace regression 5","expected":[false,true,false,15,9,62],"passed":true},{"actual":[false,false,true,0,0,62],"check":"workspace regression 6","expected":[false,false,true,0,0,62],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"workspace regression 0\", \"actual\": [false, true, true, 15, 9, 62], \"expected\": [false, true, true, 15, 9, 62], \"passed\": true}, {\"check\": \"workspace regression 1\", \"actual\": [true, false, true, 0, 0, 62], \"expected\": [true, false, true, 0, 0, 62], \"passed\": true}, {\"check\": \"workspace regression 2\", \"actual\": [false, false, true, 0, 0, 62], \"expected\": [false, false, true, 0, 0, 62], \"passed\": true}, {\"check\": \"workspace regression 3\", \"actual\": [false, false, true, 20, 12, 62], \"expected\": [false, false, true, 20, 12, 62], \"passed\": true}, {\"check\": \"workspace regression 4\", \"actual\": [false, true, true, 15, 9, 300], \"expected\": [false, true, true, 15, 9, 300], \"passed\": true}, {\"check\": \"workspace regression 5\", \"actual\": [false, true, false, 15, 9, 62], \"expected\": [false, true, false, 15, 9, 62], \"passed\": true}, {\"check\": \"workspace regression 6\", \"actual\": [false, false, true, 0, 0, 62], \"expected\": [false, false, true, 0, 0, 62], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}