docs(adr): 0011 live cursors in description editor (proposed)#70
Merged
Conversation
ADR-first for the last v0.2.0-beta-deferred feature. Live cursors need a character-level CRDT-aware editor (the current textarea full-string- replaces into Y.Text, which isn't a real binding and has nowhere to carry a remote caret). Recommends CodeMirror 6 + y-codemirror.next behind a FEATURE_LIVE_CURSORS flag: - keeps the Markdown-source storage model (no change to encryption / export / render paths — unlike a ProseMirror/TipTap rich-text model), - official Yjs binding renders remote carets/selections from Awareness, - reuses PR #50's per-user colour + PII-free Awareness payload, - content + cursor metadata stay E2EE through the existing relay (ADR 0003 preserved), - lazy-imported so the perf budget is untouched until opted in. Status: proposed. Implementation is a follow-up PR gated on this merging. Adds the ADR index row in CLAUDE.md §14. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Signed-off-by: Moritz Kohm <moritz.kohm@gmail.com> Signed-off-by: Musiker15 <info@musiker15.de>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
ADR-first for the last v0.2.0-beta-deferred feature — live cursors in the card description editor (CLAUDE.md §5.2 USP). Per the project's ADR-first convention, this lands the decision record before any implementation; the editor swap is a follow-up PR gated on this ADR merging.
This PR is docs-only (ADR 0011 + the CLAUDE.md §14 index row). No code.
The decision
Adopt CodeMirror 6 +
y-codemirror.next, behind aFEATURE_LIVE_CURSORSflag (default off).Why not the alternatives:
Y.Textunder concurrent edits is exactly the bug-prone problem the established bindings already solved; rendering selections over a<textarea>needs a shadow-mirror hack.Why it's safe (zero-knowledge)
v1.<nonce>.<ct>(ADR 0003 preserved).{ userId, color }+ opaque positions. No email, no name, no text. Same deterministic HSL colour as the avatar stack.next/dynamic, no SSR) so the perf budget (Lighthouse ≥ 95) is untouched until a self-host operator opts in.What the follow-up implementation PR will do
(captured in the ADR's "Implementation outline" — not in this PR)
FEATURE_LIVE_CURSORSenv flag.description-editor.tsxwrapping CodeMirror 6 +yCollabover the card's existingY.Text+ Awareness.Review ask
This is a design decision — if you'd prefer TipTap (richer, but a rich-text migration) or want to defer live cursors entirely, this is the place to say so before any code is written. If CodeMirror 6 looks right, merging this unblocks the implementation PR.
Test plan
🤖 Generated with Claude Code