তুরুপ ২৯ · Turup 29 — anti-clockwise rotation proof
Commit c1574bf · Bundle index-DI0TvAs9.js · Captured 20260529-1431
Visual rotation: ✅ ANTI-CLOCKWISE confirmed
Expected (CCW): bottom=You, right=Aniruddho, top=Rohini, left=Pritam · engine P1→P2→P3→P4 traces bottom → right → top → left
Per-viewport seat positions
568x320 — 568×320
| Screen position | Seat label | Bounding box (x,y,w,h) |
| bottom | You | 105,245,70,56 |
| right | Aniruddho | 475,150,68,56 |
| top | Rohini | 249,48,70,56 |
| left | Pritam | 25,150,68,56 |
667x375 — 667×375
| Screen position | Seat label | Bounding box (x,y,w,h) |
| bottom | You | 122,285,83,66 |
| right | Aniruddho | 560,173,80,66 |
| top | Rohini | 292,52,83,66 |
| left | Pritam | 27,173,80,66 |
740x360 — 740×360
| Screen position | Seat label | Bounding box (x,y,w,h) |
| bottom | You | 163,275,81,64 |
| right | Aniruddho | 590,166,78,64 |
| top | Rohini | 330,48,81,64 |
| left | Pritam | 71,166,78,64 |
812x375 — 812×375
| Screen position | Seat label | Bounding box (x,y,w,h) |
| bottom | You | 189,287,85,67 |
| right | Aniruddho | 637,172,82,67 |
| top | Rohini | 364,48,85,67 |
| left | Pritam | 92,172,82,67 |
844x390 — 844×390
| Screen position | Seat label | Bounding box (x,y,w,h) |
| bottom | You | 195,298,89,71 |
| right | Aniruddho | 665,178,86,71 |
| top | Rohini | 377,48,89,71 |
| left | Pritam | 94,178,86,71 |
896x414 — 896×414
| Screen position | Seat label | Bounding box (x,y,w,h) |
| bottom | You | 204,316,95,76 |
| right | Aniruddho | 708,187,92,76 |
| top | Rohini | 400,48,95,76 |
| left | Pritam | 96,187,92,76 |
1024x600 — 1024×600
| Screen position | Seat label | Bounding box (x,y,w,h) |
| bottom | You | 187,446,127,101 |
| right | Aniruddho | 859,273,123,101 |
| top | Rohini | 448,88,127,101 |
| left | Pritam | 42,273,123,101 |
What this proves
Before this commit, the local Quick-Play adapter buildPlayTableAdapter.ts
mapped AntiCWNext(human) to screen-left. The visual rotation
P1(bottom) → P2(left) → P3(top) → P4(right) → back to P1 is a clockwise sweep
viewed from above, which disagreed with both the real-world Bangla Turup 29 rule
and the team's own 2026-05-17 anti-clockwise correction already locked in
adaptServerSnapshotToPlayTableState.ts, SLOT_BY_OWNER, and
TrickCardModel.position.
The fix swaps left/right in buildSeatPositionMap():
right = AntiCWNext(human), left = AntiCWPrev(human). Visual
rotation is now bottom → right → top → left → bottom — true anti-clockwise
viewed from above. Engine logic, scoring, deck, redeal paths, and bidding rules
are all unchanged (500-hand bot smoke: 500/500 pass, 0 errors).