Write down what the code cannot say for itself
The readme explains how to run this. Nothing explained how to change it, and the parts most worth knowing are the ones least visible in the source: why a room keeps a headless editor bound to its CRDT, why an answer lives beside the document rather than in it, why the agent waits to be addressed and why it is `@ai` rather than the most common noun in the product. The longest section is the failure modes, because every defect found here so far was silent. An unhandled node type stops collaboration while the editor keeps accepting edits. Lexical routes an exception in `update()` to `onError` and the caller sees success. `send()` resolves on acceptance, not completion. An agent's `tools` entry for an MCP tool matches nothing and is dropped without a word. Permission is decided before execution, so a refusal produces no events at all. None of these announce themselves, and each cost a debugging session that would have been a lookup. The test count in the readme was six behind, which is the argument for keeping these two files close together.
Parent02634d3
2 files changed+196-1
StackedSplit