v0.5.3
What's New
FFA rooms are a lot more interesting now. Two changes landed together and they compound nicely.
First: when a persona is about to respond in a Free For All room, it can now see what other personas already said in the same round. The queue processes serially — so by the time Persona B dequeues, Persona A's response is already in state. B gets a note: here's what was already said, find the angle that's distinctly yours on this same moment, don't try to cover more ground. The result is less "three personas finishing each other's sentences" and more actual differentiation.
Second: the order personas enter the queue is now randomized each round. Before, whoever was added to the room first always got the clean slate. Now it rotates. Fair is fair in a Free For All.
Under the hood, this also fixed something we'd been carrying since rooms shipped: room response prompts were baking the full conversation history into the queue item at enqueue time. Same problem we already solved for 1:1 persona messages — the queue was getting thicc. Room prompts now use [mid:xxx] placeholders like everything else, hydrated fresh at dequeue time.
Timestamps are less chatty. If you have "show timestamps to persona" enabled, there's now a note in the system prompt explaining that the user also sees them — so the persona doesn't feel compelled to narrate the time back at you.
Fixed
The browser was caching HEAD requests. The sync API wasn't setting Cache-Control, so browsers would serve subsequent HEAD checks from disk cache. The whole point of HEAD is to ask the server if anything changed. Serving it from cache is cosmically stupid behavior that is technically correct per spec. Fixed with no-store.
Web chat: a lot of scroll fixes. The virtual scroll rework (@tanstack/react-virtual + use-stick-to-bottom) turned out to be a bigger lift than expected. Initial load snap, persona/room switches, CYP and MAP scroll triggers, stale-message races on persona change — all sorted.
Under the Hood
- TUI message scrollboxes now use
viewportCulling— long rooms are faster - Web chat virtualized — same reason
switchPersonain web consolidated to a single atomic path