githubnext/chopinPublic

Let's compose rich plans together

Comment on the plan from the sidecar

One list rather than two tabs: an accepted comment is a decision in the same
sense a questionnaire's answer is, and would otherwise have to pick a side.
Outstanding items first in document order, resolved behind a disclosure, and a
dismissed thread not shown at all — the transcript is where it left its trace.

The composer is a card in the sidecar, not a popover at the selection: the
bubble prevents mousedown precisely so it never takes focus, and every
script-positioned overlay in this repo has cost a bug. The passage is captured
inside the click that opens the draft, because focusing the composer destroys
the selection that summoned it.

comment:start no longer sends block digests. A client cannot compute a
canonical block digest without re-serialising the document, and finding the
quote is the better check anyway — it tests whether the sentence somebody
selected is still there. Driving the real socket showed it refusing stale
indices exactly as intended.

Also from driving it: Chat.instruct opened an agent session under AGENT=off,
where chat:send is gated but a button press was not. The decision is still
recorded; only the turn is skipped, and the transcript says so.
KCKrzysztof Cieslak authored
81e474dPatch
Parent31f0def
16 files changed+997-87
StackedSplit
apps/server/src/chat/service.ts+13 −1
apps/server/src/comments.test.ts+1 −2
apps/server/src/comments/inject.ts+2 −2
apps/server/src/plan/passages.test.ts+10 −10
apps/server/src/plan/room.ts+16 −15
apps/web/src/app.tsx+14 −2
packages/editor/src/comments.tsx+323 −0
packages/editor/src/decisions.tsx+102 −35
packages/editor/src/index.ts+2 −0
packages/editor/src/plan-editor.tsx+16 −8
packages/editor/src/provider.ts+13 −4
packages/editor/src/threads.ts+420 −0
packages/editor/src/toolbar/bubble.tsx+24 −1
packages/editor/src/toolbar/index.tsx+20 −1
packages/editor/src/widgets-plugin.tsx+8 −0
packages/protocol/comment.d.ts+13 −6