Add the editor and put it on screen
The browser half: MDXEditor over the dialect's schema, a Yjs provider on the room's socket, remote cursors, presence faces, the selection bubble and the slash menu. The app shell is three panes — chat, plan, decisions — with only the ones that have something to show rendered, so the grid collapses to what exists rather than reserving space for later. Callout and Tabs now insert locally like code and formulas do. A ULID carries enough entropy that two editors cannot mint the same one, so the round trip only ever bought a block appearing later than the keystroke that asked for it. Both URL prompts validate before inserting. The link prompt previously claimed in a comment that the dialect only accepts safe protocols, but checked nothing: a pasted `http://` link applies locally, syncs, then fails validation on a server that cannot undo a Yjs transaction — costing the whole room its epoch and undo history. Images take the same guard. The unacknowledged outbox now does something when it fills. Yjs updates merge losslessly, so a backlog is collapsed into one update rather than trimmed or left to grow: nothing is dropped and the replay is the same document. Dependency singletons are asserted in a test rather than enforced by a resolver alias. Two copies of Lexical throw `incompatible editors` and every node operation fails quietly afterwards; the catalog is what prevents it, and a test says so in one line instead of failing a build over a redundant guard.
Parent5a39508
35 files changed+4314-78
StackedSplit