Skip to content

fix(ui): aggregate comments across body + headers/footers/notes (SD-2938)#3148

Closed
caio-pizzol wants to merge 1 commit intomainfrom
caio/sd-2938-comments-cross-section
Closed

fix(ui): aggregate comments across body + headers/footers/notes (SD-2938)#3148
caio-pizzol wants to merge 1 commit intomainfrom
caio/sd-2938-comments-cross-section

Conversation

@caio-pizzol
Copy link
Copy Markdown
Contributor

ui.comments.observe() collapsed to one section as the user moved focus between the body and a header/footer/footnote/endnote. Each section editor owns its own converter.comments store, and the controller's snapshot was sourced from whichever editor was routed at the time, losing the rest. Originally surfaced while testing the selection-capture vanilla example against a docx with a header.

The fix adds an in?: StoryLocator | 'all' option to CommentsListQuery (mirroring the trackChanges pattern), extends CommentAddress with an optional story locator, and stamps that field on non-body results. The controller now reads from the host editor with { in: 'all' }, so snapshots stay stable across focus changes.

Action routing reuses the same locator: resolve, reopen, reply, delete, and scrollTo look the comment up in the cached snapshot and dispatch on the editor that owns it. Body comments still route the same way they did before, with story omitted, fallback unchanged. createFromSelection and createFromCapture stay routed because they operate on the live selection.

Event fan-out is intentionally conservative for now: the existing commentsUpdate/commentsLoaded refresh plus the explicit refreshAndNotify after UI mutations handle the main bug. Multi-story listener wiring is left for a follow-up if external/imported non-body changes prove to be missed in practice.

Linear: SD-2938.

Verified: 34 wrapper tests, 28 controller tests, 212 UI tests, 3314 doc-api adapter tests, 1388 document-api tests all pass. New coverage: 5 adapter tests for cross-story listing + 7 controller tests for cross-section action routing and scrollTo.

@caio-pizzol caio-pizzol requested a review from a team as a code owner May 5, 2026 11:06
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3ca21ed799

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread packages/super-editor/src/ui/create-super-doc-ui.ts Outdated
@caio-pizzol caio-pizzol force-pushed the caio/sd-2938-comments-cross-section branch from 3ca21ed to 1bc7f58 Compare May 5, 2026 11:26
…938)

ui.comments.observe() collapsed to one section as the user moved focus
between the body and a header/footer/footnote/endnote. Each section
editor owns its own converter.comments store, and the controller's
snapshot was sourced from whichever editor was routed at the time —
losing the rest.

The fix adds an `in?: StoryLocator | 'all'` option to
CommentsListQuery (mirroring the trackChanges pattern), extends
CommentAddress with an optional `story`, and stamps that field on
non-body results. The controller now reads from the host editor with
`{ in: 'all' }`, so snapshots stay stable across focus changes.

Action routing reuses the same locator: resolve, reopen, reply,
delete, and scrollTo look the comment up in the cached snapshot and
dispatch on the editor that owns it. Body comments still route the
same way they did before — story is omitted, fallback path is
unchanged. createFromSelection / createFromCapture stay routed
because they operate on the live selection.

Event fan-out is intentionally conservative: existing
commentsUpdate/commentsLoaded refresh + the explicit
refreshAndNotify after UI mutations handle the main bug. Multi-story
listener wiring is left for a follow-up if it's needed.
@caio-pizzol caio-pizzol force-pushed the caio/sd-2938-comments-cross-section branch from 1bc7f58 to 4f55e8e Compare May 5, 2026 11:33
@codecov-commenter
Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@caio-pizzol caio-pizzol marked this pull request as draft May 5, 2026 13:20
@caio-pizzol caio-pizzol closed this May 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants