Changelog

What shipped

What's new for the people using the product. Each entry leads with what changes for you, then the technical detail underneath if you want it. Reverse chronological.

search

Search: 3× faster on multi-term queries

For you: typing two words into search now returns results in roughly a third of the time it used to. On a 10,000-item workspace, that's 1–5 milliseconds — under the threshold of perception.

Under the hood: the new posting layout splits doc IDs, term frequencies, and field flags into parallel vectors, which the CPU prefetcher loves.

  • P50 of 1.6ms, P99 of 4.8ms against a 10k-item community on iPhone.
  • BM25-F scoring no longer needs to decode positions for filter-only queries.
  • Existing indexes are upgraded in place on first launch — no resync required.
chat

Chat: leaving a channel actually means leaving

For you: when someone joins a channel, they can't read messages from before they were added. When they're removed, they can't read what comes next. The keys rotate automatically on every change.

Under the hood: MLS group key rotation is now automatic on member add/remove. Past messages stay readable only by the people who were in the group at the time they were sent.

  • Adding a member rotates the group key before the new member sees any history.
  • Removing a member drops them out of the next epoch — no stale access window.
  • Built on OpenMLS (RFC 9420). The server never sees plaintext, ever.
planning

Plan: burndown reflects logged time, live

For you: log an hour against a sub-task and the cycle burndown moves immediately. No more stale chart on Friday afternoon, no more spreadsheet to update by hand.

Under the hood: hours logged on issues are now reflected in cycle burndown charts in real time. Logging an hour on a sub-task immediately updates the parent's effort estimate and the cycle's remaining work line.

  • WorkSlots aggregate up the issue tree without an explicit refresh.
  • Burndown rendering is local-first; the chart updates on the device that logged the hour first.
community

Community: presence under 100ms, end to end

For you: when a teammate joins a room or starts typing, you see it within a tenth of a second. Closer to "in the same room" than the multi-second lag most chat tools have.

Under the hood: presence and signalling moved from JetStream to Core NATS. Latency from change to peer-visible: under 100ms.

  • Ephemeral state (typing, cursor, active room) no longer touches durable storage.
  • JetStream remains the substrate for messages and durable state — Core NATS is just for "right now".
  • The EphemeralStreamFeature handles the transport so individual features stay decoupled.
analytics

Analytics: the issue blocking everything floats to the top

For you: if one issue is blocking three others (which are blocking five more), it shows up at the top of the blocker list automatically. Find the root cause without anyone configuring a query.

Under the hood: a new live view ranks blocking issues by chain length. If issue A blocks B blocks C blocks D, A floats to the top of the ledger.

  • Computes transitively-blocked-issue counts on every blocker-edge change.
  • Updates incrementally — no full re-scan of the planning graph.
  • Available in any view that supports a "sort by blocker chain" key.
planning

Planning: edit the same issue at the same time

For you: two people editing the same issue description on different devices — both offline, both writing — both edits land cleanly when they reconnect. No "your version vs theirs" dialog.

Under the hood: issue descriptions are now edit-anywhere CRDTs. Two people editing the same issue offline merge cleanly when they reconnect — no last-write-wins, no merge conflict UI.

  • Built on Loro for rich-text and tree-shaped CRDTs at a wire format small enough for mobile sync.
  • Cursor position and selection follow the merged result, not the pre-merge view.
  • Existing issue bodies are migrated lazily on first edit.