dc5ad28aa2af3a0b48a8596f4f62014054f4f621
tool rows used to close on a five-second timer, so the list shifted under you while you were reading it and a call you had opened re-collapsed on its own. open-ness is now derived — a row is open because it belongs to the live turn, not because it rendered recently — and your own toggle lives above the virtualiser, which was throwing it away every time a row scrolled out. the previous turn now folds when you send the next message, and it folds visibly: the new fold is born holding the rows it replaces, so the height is unchanged across the swap, then closes over 260ms. reopening an old conversation still renders collapsed; expanding work is only a service to someone watching it happen. autoscroll was failing for three compounding reasons. it was smooth, and a smooth scroll is by definition away from the bottom for its whole duration, so new content interrupting it left the view stranded. leaving the bottom was read as intent regardless of cause, so the interrupted scroll — and any row measuring past its 150px estimate — silently disarmed pinning until you scrolled down by hand. and nothing watched for the ResizeObserver correction that arrives after the estimate, which keeping tool rows open made much worse. pinning is instant now, intent comes from real gestures, and the list re-pins when the measured total changes.
Description
No description provided
42 MiB
Languages
TypeScript
90.9%
Shell
4.7%
JavaScript
4.1%
CSS
0.2%
HTML
0.1%