- Shipped
- September 9, 2026 at 2:24 AM UTC
- Author
- Kamo
- Commit
- c4f288f
A member reported that the player opposite them had chips half off the table. Measured in a browser: NINE of the ten piles were off the cloth. The reader's own was the only one on it, which is why the seat opposite is the one they noticed — and they guessed correctly that the outer seats needed it too. The placement kept every pile inside the felt BOX. The cloth is not the box: the rail is inset 8%/7% and the green is 14 pixels inside that, so a pile could clear every plate and every card, sit comfortably within 0..100 on both axes, and still be on the dark ground outside the table. Constraining to the box was never the right test. Three things it took: - A model of the actual shape. `border-radius: 50% / 46%` is not an ellipse — a 50% horizontal radius makes the corners meet, so there is no straight top edge, while 46% vertical leaves 8% of straight edge down each side. The inscribed ellipse would have squeezed the flank seats for nothing. - A scan in TWO dimensions. Walking sideways at a fixed distance out works on the flanks, where the cloth's edge runs parallel to the walk, and fails at the top, where the cloth curves away above the seat: every sideways position at that radius is off the felt and the only fit is further IN as well as across. - A sequential repair pass. Re-placing each seat against the FIRST pass's positions let two neighbours both move and land on each other, at 900x540. Each seat now settles against the final positions of those before it. Also here, from the same report: THE CARD BACKS carry the organisation's mark — the same white silhouette the chips do, from the same once-per-tab rasterisation, so the deck and the chips are visibly one house. It stays DARK. Ten face-down hands are the most repeated thing on this felt and they are meant to recede, so the alpha was measured rather than chosen: at 0.17 the mark lifted the middle of a 68px back 46% above the card around it, which is a badge. At 0.12 it is 33% there and 17% at the 38px a seat draws, where ten are on screen at once. Below 26px it is not drawn at all — there is room for a colour and nothing else. The dim a folded hand gets is multiplicative, so the relative lift is identical folded and live. INVITING is possible during a hand again. `invitable` costs a read of every member in the organisation, so the server computes it only on frames that can change it — and sent `[]` on all the others. The client could only read that as "nobody left to ask", so the invite button and the empty-seat affordance both died on the first DEALT and came back at HAND_ENDED. It sends null now, meaning "unchanged", with `[]` reserved for its real meaning; `keepInvitable` holds the last real answer and every frame goes through one place so a new call site cannot skip it. Absent and empty are different facts. This is the third defect in this feature that was one fact with two representations.