a0499723d3d41cc744e7db22a42b39b5ef0893b8
A CARTE owner (all 6 seats, both polarities) entering SIG_SELECT with no ?seat saw the sig overlay + reserve URL locked to the canonical PC seat (one polarity) while the TRAY followed `current_slot` = owned[0] (the lowest owned slot, often the OTHER polarity). A sig reserved from that view filed against the WRONG seat — the seat the owner thought he covered stayed empty — so that polarity never reached 3-ready, its 12s countdown ran to 0 but the server-side `_fire` bailed at `len(ready) < 3` and never advanced; the other polarity proceeded. Switching pos-circles via GATE VIEW (sets ?seat) re-aligned every surface and unstuck it. A 3-agent trace confirmed the mechanism + corrected my first guess: this is NOT a WS problem (the cursor group only drives the cosmetic flashing numeral; the SIG→SKY advance is a threading.Timer broadcasting to the room_<id> group every socket joins). The stall is the misfiled reservation → 3-ready COMPLETENESS failure, rooted in two seat resolvers disagreeing when seatless: the overlay / sig_confirm use `_canonical_user_seat` (PC-first) while the tray / reserve use `_viewer_current_slot` owned[0]. Fix: `room_view` redirects a seatless multi-seat owner (gate_slots.filter(gamer) .count() > 1) in SIG_SELECT to ?seat=<current_slot>, so EVERY surface (tray, overlay, reserve URL, WS cursor group) resolves to one seat via the already-correct ?seat path — the same realignment a GATE-VIEW switch does. SIG_SELECT-only (SKY_SELECT already keys off selected_seat); single-seat gamers / non-owners / anon fail the guard. Unaffected: the multi-gamer sig FTs (one seat each) + the WS-direct CarteCursorGroupTest. TDD: 6 ITs in CarteTrayFollowsSelectedSeatTest (redirect / ?seat-present no-redirect / overlay+tray agree post-redirect / single-seat / non-owner / SKY_SELECT no-redirect); the red `'PC' != 'BC'` was the divergence itself. 381 epic-view ITs green. [[project-sig-select-seat-switch-open-problems]] [[feedback-ws-cursor-group-must-match-acting-seat]] Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Description
No description provided
Languages
Python
45.5%
JavaScript
36.1%
HTML
9.6%
SCSS
8.6%
Jinja
0.1%