githubnext/chopinPublic

Let's compose rich plans together

Keep safe undo steps, tell people when one is refused, and fast-path typing

A refused undo now drops only the step it refused, plus any empty steps
Yjs passed over, so older steps stay available and are each rehearsed in
turn. The document status pill says "Can't undo" for a few seconds.
Projections are compared as a multiset, so restoring a card beside a
copy a peer moved is refused. Undoing prose this client typed (its own
characters, text nodes and top-level blocks nobody else wrote in) skips
the rehearsal, which the stress test cross-checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
C5MAMaggie Appleton and Claude Opus 5.5 authored
400d89ePatch
Parentd3f03cc
6 files changed+258-21
StackedSplit
apps/web/src/room-workspace.tsx+21 โˆ’0
packages/editor/src/collaboration.tsx+6 โˆ’1
packages/editor/src/history.test.ts+77 โˆ’5
packages/editor/src/history.ts+130 โˆ’15
packages/editor/src/index.ts+1 โˆ’0
packages/editor/src/plan-editor.tsx+23 โˆ’0