Skip to content

Notes: show an unseen-notes count badge on the All notes toggle - #81951

Open
adamsilverstein wants to merge 16 commits into
trunkfrom
add/81940-unseen-notes-badge
Open

adamsilverstein wants to merge 16 commits into
trunkfrom
add/81940-unseen-notes-badge

Conversation

@adamsilverstein

@adamsilverstein adamsilverstein commented Aug 21, 2026 •

Copy link
Copy Markdown
Member

Claude Code wrote the code here and drafted this description:

What?

Closes #81940

Shows a dot on the "All notes" toolbar toggle when unresolved notes carry activity the current user has not seen yet. Opening "All notes" then highlights the threads that were unseen, with their replies expanded, until each has been in view for a moment.

Why?

Opening a post gives no hint that collaborators have left notes since the last visit - the toggle looks identical for a post with no notes, ten already-read ones, or three fresh ones. A small dot is glanceable, needs no notification inbox, and clears itself once you look. The highlight answers the next question: which ones are new?

How?

What counts as new:

  • Unresolved threads whose newest activity - a new thread or a new reply - postdates the current user's last look at the post.
  • Your own notes and replies never count. A thread you started still counts when someone else replies to it.
  • Resolved threads, and the act of resolving one, do not count.

Where the timestamp lives: rather than tracking read state per note - the approach in #80250 that reviewers did not want locked to a single feature - this stores one per-user, per-post timestamp in the existing preferences store, which already persists to the persisted_preferences user meta. No new PHP and no new REST surface. The map is capped at the 100 most recently seen posts. The stored value is the newest date_gmt the user was actually shown rather than the current time, so clock skew between browser and server cannot throw it off.

Why a dot, not a count: one timestamp per post can say "something is new since you last looked", but not which notes you have read. An earlier version showed a count, and as @annezazu and @yashjawale pointed out, a number implies per-note tracking that is not there - open the sidebar, read two of five, and the count drops to zero anyway. The dot makes the honest claim.

The highlight: opening "All notes" advances the timestamp straight away, so the threads that were unseen at that moment are captured first and kept in memory until the sidebar closes. Those threads get a soft caution tint and show all their replies, since a reply may be the new part. Each one fades once it has been in view for two seconds, tracked with an IntersectionObserver, so threads further down stay marked until you scroll to them. The thread's accessible name gains ", new activity" while it is highlighted. With reduced motion the fade is skipped.

@wordpress/interface: ComplementaryArea gains badge (boolean) and badgeLabel props. Pinned items had no badge support, so this adds it once instead of overlaying CSS from the notes code. Without a badge the pinned toggle markup is untouched. The dot hides on mobile along with the pinned toggles themselves, and stays visible in forced-colors mode.

What clears the dot: opening "All notes", or selecting a thread. Selection matters because floating notes show every unresolved thread in the canvas margin, and someone can read them all there without touching "All notes". The floating notes merely being on screen does not count. Selecting a block that carries a note selects its thread too, so that also clears it.

Worth a second opinion:

Testing Instructions

Test in WordPress Playground

  1. As user A, open a post, add notes to a few blocks, reply to one, and save.
  2. As user B, open the same post. The "All notes" toggle in the top bar carries a blue dot.
  3. Open the "All notes" sidebar. The dot clears. User A's threads are tinted yellow with all replies showing, and the tint fades after a couple of seconds.
  4. With enough notes to scroll, threads below the fold stay tinted until you scroll them into view.
  5. Reload. The dot stays cleared, and nothing is highlighted.
  6. As user A, add another note. Reload as user B - the dot is back.
  7. As user B, close "All notes" and click a thread in the floating notes. The dot clears without opening the sidebar.
  8. As user B, add a note of your own and reload. It does not bring the dot back.
  9. Resolve a thread and reload. Resolved threads do not count and are not highlighted.
  10. Narrow the window below 600px. The dot hides along with the toggle.

Automated coverage:

  • npm run test:unit -- packages/editor/src/components/collab-sidebar covers the unseen-thread selection, the own-activity exclusion, the latest-activity scan, and the map pruning.
  • npm run test:e2e -- test/e2e/specs/editor/various/block-notes-unseen-badge.spec.js covers the dot appearing and clearing across a reload, highlighting only other people's threads and fading, replies expanding, clearing on thread selection, the add-note form not clearing, resolved threads not highlighting, and the dot hiding on mobile.

Testing Instructions for Keyboard

  1. Tab to the "All notes" button in the top bar. The tooltip and accessible name read "All notes, new activity".
  2. Press Enter to open the sidebar. Arrow through the threads - highlighted ones announce ", new activity" after the note excerpt.
  3. Reload - the button announces "All notes".

Screenshots or screencast

The dot on the "All notes" toggle:

Opening "All notes" A few seconds later

The first thread was started by the current user, but a collaborator replied, so it counts. The third is the current user's own and is never highlighted.

AI Use

Code and description both came out of a back and forth with 🤖 Claude Code. I will review and test.

🤖 Generated with Claude Code

https://claude.ai/code/session_01QjT9Yj6cHrjktdMGdQq37b

Opening a post gave no hint that collaborators had left notes since the
last visit: the toolbar toggle looked the same for zero notes, ten read
ones, and three fresh ones.

Count the unresolved note threads whose newest activity postdates the
current user's last look at the post, excluding their own notes, and show
that count over the pinned toggle. Persist the per-post timestamp in the
existing preferences store - which already rides on the
`persisted_preferences` user meta - rather than adding a read-tracking
API for one feature.

Record the newest `date_gmt` the user was actually shown rather than the
current time, so the comparison cannot be thrown off by clock skew
between the browser and the server.

Fixes #81940.
Assert the badge against real note data: a collaborator's note counts,
the user's own does not, resolved threads are excluded, and the count
truncates to "9+" while the toggle still announces the exact number.

Every case asserts the rendered count rather than only its absence, so
the spec cannot pass with the badge missing entirely.
@github-actions github-actions Bot added [Package] Editor /packages/editor [Package] Interface /packages/interface labels Aug 21, 2026
@github-actions

github-actions Bot commented Aug 21, 2026 •

Copy link
Copy Markdown

Size Change: +1.96 kB (+0.02%)

Total Size: 7.92 MB

📦 View Changed
Filename Size Change
build/scripts/edit-widgets/index.min.js 22.6 kB +105 B (+0.47%)
build/scripts/editor/index.min.js 581 kB +637 B (+0.11%)
build/styles/edit-widgets/style-rtl.css 5.28 kB +209 B (+4.12%)
build/styles/edit-widgets/style-rtl.min.css 3.73 kB +91 B (+2.5%)
build/styles/edit-widgets/style.css 5.28 kB +211 B (+4.17%)
build/styles/edit-widgets/style.min.css 3.74 kB +95 B (+2.61%)
build/styles/editor/style-rtl.css 32 kB +210 B (+0.66%)
build/styles/editor/style-rtl.min.css 27.3 kB +95 B (+0.35%)
build/styles/editor/style.css 32 kB +212 B (+0.67%)
build/styles/editor/style.min.css 27.3 kB +96 B (+0.35%)

compressed-size-action

Once a collaborator's note arrives, the toggle's accessible name carries
the unseen count, so an `exact` match on "All notes" no longer finds it.
That is precisely the scenario these three tests set up, and all three
were failing on the badge change.

Also point both CHANGELOG entries at the pull request rather than the
issue, which is what the CHANGELOG check looks for.
@github-actions

Copy link
Copy Markdown

Flaky tests detected in 15ea8a0.
Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/32539117348
📝 Reported tests:

should remove not allowed blocks from the block manager in /test/e2e/specs/editor/plugins/allowed-blocks.spec.js, passed after 1 failed attempt.
Error: apiRequestContext.fetch: socket hang up
Call log:
  - → PUT http://localhost:8889/wp-json/wp/v2/plugins/gutenberg-test-plugins/allowed-blocks
    - user-agent: Playwright/1.62.1 (x64; ubuntu 24.04) node/20.20 CI/1
    - accept: */*
    - accept-encoding: gzip,deflate,br
    - X-WP-Nonce: 98381f5a03
    - content-type: application/json
    - content-length: 21
    - cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_23778236db82f19306f247e20a353a99=admin%7C1787530204%7Cv0MFFjvVWW1K48hm92CmZJsQ0KekOYmEB3ZnciKrbZx%7C107d42c97b45703714d58397e8ed7a8cd99b007ae527a68a1dcc073535df5eab; wp-settings-time-1=1787357453

    at RequestUtils.rest (/home/runner/work/gutenberg/gutenberg/packages/e2e-test-utils-playwright/src/request-utils/rest.ts:112:39)
    at RequestUtils.deactivatePlugin (/home/runner/work/gutenberg/gutenberg/packages/e2e-test-utils-playwright/src/request-utils/plugins.ts:89:13)
    at /home/runner/work/gutenberg/gutenberg/test/e2e/specs/editor/plugins/allowed-blocks.spec.js:13:3

Once no complementary area is active, the floating notes panel puts
itself up and shows every unresolved thread. Someone can read all of
them there and never touch "All notes", leaving a badge that never
clears - and a badge that never clears teaches people to ignore it.

Selecting a thread expands it, so it is the point where reading is
demonstrated rather than assumed. The finer expansions - "Show more" on
a clamped note, "N more replies" on a collapsed thread - are left alone:
each implies a selection, and a post whose notes are short and
reply-free offers nothing to expand at all.

The add-note form reports itself as the selected note, so require a real
thread id; authoring a note is not reading anyone else's.
…es-badge

# Conflicts:
#	packages/interface/CHANGELOG.md
adamsilverstein and others added 3 commits September 30, 2026 22:52
…es-badge

# Conflicts:
#	packages/editor/README.md
#	packages/editor/src/components/collab-sidebar/constants.js
#	packages/editor/src/components/collab-sidebar/hooks.js
#	packages/editor/src/components/collab-sidebar/test/utils.jsdom.test.js
#	packages/interface/CHANGELOG.md
Trunk upgraded Prettier, which tab-indents the closing paren of a
multi-line ternary branch. Reformat the two badge call sites so the
format check passes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CdtuWidg1XBK8cpYLNSWxF
A release on trunk renamed the heading the entry sat under, leaving it
stranded in a published version. Everything below the first published
heading must match trunk byte for byte.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CdtuWidg1XBK8cpYLNSWxF
@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown

🤖 PR meta 🤖

🎉 Props

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: adamsilverstein <adamsilverstein@git.wordpress.org>
Co-authored-by: annezazu <annezazu@git.wordpress.org>
Co-authored-by: yashjawale <yashjawale@git.wordpress.org>

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

Updated as activity occurs, without notifying anyone named here. Add the props-bot label to refresh.

📦 Bundle size

Size Change: +3 kB (+0.04%)

Total Size: 8.52 MB

📦 View Changed
Filename Size Change
build/scripts/edit-widgets/index.min.js 67.1 kB +68 B (+0.1%)
build/scripts/editor/index.min.js 637 kB +899 B (+0.14%)
build/styles/edit-widgets/style-rtl.css 5.57 kB +326 B (+6.22%) 🔍
build/styles/edit-widgets/style-rtl.min.css 3.94 kB +109 B (+2.85%)
build/styles/edit-widgets/style.css 5.56 kB +326 B (+6.22%) 🔍
build/styles/edit-widgets/style.min.css 3.94 kB +112 B (+2.93%)
build/styles/editor/style-rtl.css 33 kB +399 B (+1.22%)
build/styles/editor/style-rtl.min.css 27.9 kB +182 B (+0.66%)
build/styles/editor/style.css 33.1 kB +396 B (+1.21%)
build/styles/editor/style.min.css 27.8 kB +181 B (+0.65%)

77c99e8 Run

⚡ Performance

Show the results

Client side metrics exclude the server response time.

front-end-block-theme

Metric 5e9d9bc trunk % Change
timeToFirstByte 47.25 ms +6.46% -2.54% 48.55 ms +15.55% -3.6% -2.68%
largestContentfulPaint 82 ms +12.2% -2.44% 88 ms +4.55% -9.09% -6.82%
lcpMinusTtfb 34.2 ms +21.05% -1.32% 34.85 ms +22.09% -6.31% -1.87%
wpBeforeTemplate 23.98 ms +7.96% -2.5% 24.53 ms +22.42% -4.16% -2.24%
wpTemplate 19.52 ms +3.07% -3.89% 19.61 ms +4.84% -3.62% -0.46%
wpTotal 43.48 ms +5.82% -2.76% 44.78 ms +11.57% -4.2% -2.9%
wpMemoryUsage 7.61 MB +0% -0% 7.58 MB +0% -0% 0.46%
wpDbQueries 17 +0% -0% 17 +0% -0% 0%

front-end-classic-theme

Metric 5e9d9bc trunk % Change
timeToFirstByte 39.95 ms +2.25% -1.63% 40.55 ms +3.45% -1.85% -1.48%
largestContentfulPaint 92 ms +4.35% -0% 92 ms +2.17% -0% 0%
lcpMinusTtfb 52.55 ms +3.04% -0.95% 52.05 ms +1.25% -2.21% 0.96%
wpBeforeTemplate 21.03 ms +2.23% -0.57% 21.38 ms +2.15% -1.68% -1.64%
wpTemplate 15.6 ms +1.99% -4.55% 15.73 ms +3.43% -4.45% -0.83%
wpTotal 36.76 ms +2.64% -1.88% 37.17 ms +3.93% -1.35% -1.1%
wpMemoryUsage 6.25 MB +0% -0% 6.20 MB +0% -0% 0.71%
wpDbQueries 14 +0% -0% 14 +0% -0% 0%

media-processing

Metric 5e9d9bc trunk % Change
mediaProcessingJpeg 391.69 ms +1.3% -0.71% 387.81 ms +3.22% -0.53% 1%
mediaProcessingAvif 5696.01 ms +0.24% -1.01% 5658.98 ms +0.59% -0.29% 0.65%
mediaProcessingJpegToAvif 3895.48 ms +0.13% -0.12% 3876.59 ms +0.84% -0.69% 0.49%

media-upload

Metric 5e9d9bc trunk % Change
jpegUploadProcessing 1862.05 ms +5.24% -23.85% 1437.39 ms +0.92% -1.28% 29.54%
pngUploadProcessing 207.8 ms +5.28% -0.7% 213.14 ms +7.35% -4.81% -2.51%
largeJpegUploadProcessing 1423.18 ms +3.62% -0.6% 1427.63 ms +1.14% -0.91% -0.31%
multipleImageUploadProcessing 1564.87 ms +10.92% -0.18% 1556.41 ms +0.83% -0.76% 0.54%

post-editor

Metric 5e9d9bc trunk % Change
serverResponse 377.41 ms +11.74% -1.13% 393.84 ms +2.63% -6.07% -4.17%
firstPaint 225.1 ms +26.45% -18.17% 247.35 ms +13.12% -15.45% -9%
domContentLoaded 995.06 ms +2.29% -2.56% 989.03 ms +0.83% -2.43% 0.61%
loaded 996.17 ms +2.29% -2.55% 990.04 ms +0.83% -2.43% 0.62%
firstContentfulPaint 432.36 ms +2.26% -10.99% 432.1 ms +2.31% -1.16% 0.06%
firstBlock 2810.13 ms +1.31% -0.71% 2776.51 ms +1.55% -0.2% 1.21%
type 16.69 ms +7.55% -4.37% 16.34 ms +3.86% -2.02% 2.14%
typeWithoutInspector 16.15 ms +3.41% -3.22% 16.57 ms +1.87% -5.31% -2.53%
typeWithTopToolbar 21.82 ms +1.83% -2.11% 22.22 ms +2.12% -6.26% -1.8%
typeContainer 8.29 ms +1.33% -1.81% 8.23 ms +9.11% -3.52% 0.73%
focus 105.4 ms +4.69% -2.21% 99.87 ms +4.44% -3.05% 5.54%
firstFocus 196.25 ms +0% -0% 195.06 ms +0% -0% 0.61%
selectAll 413.96 ms +0.26% -1.44% 418.02 ms +2.56% -4.8% -0.97%
listViewOpen 69.74 ms +4.3% -5.48% 68.16 ms +14.19% -4.23% 2.32%
inserterOpen 38 ms +3.47% -3.34% 35.91 ms +5.46% -7.96% 5.82%
inserterHover 10.63 ms +16.46% -8.37% 11.42 ms +12% -7.44% -6.92%
inserterSearch 8.58 ms +8.62% -10.14% 8 ms +4.25% -3.5% 7.25%
loadPatterns 575.31 ms +2.07% -0.23% 598.93 ms +2.45% -4.73% -3.94%
wpTotal 365.42 ms +12.1% -1.06% 382.14 ms +2.75% -6.16% -4.38%
wpMemoryUsage 13.33 MB +0% -0% 13.30 MB +0% -0% 0.25%
wpDbQueries 54 +0% -0% 54 +0% -1.85% 0%

site-editor

Metric 5e9d9bc trunk % Change
serverResponse 515.81 ms +1.09% -4.47% 499.92 ms +1.51% -3.19% 3.18%
firstPaint 273.11 ms +75.79% -8.91% 269.56 ms +12.98% -14.95% 1.32%
domContentLoaded 1197.46 ms +3.24% -0.94% 1211.02 ms +0.38% -1.77% -1.12%
loaded 1198.74 ms +3.22% -0.94% 1212.27 ms +0.38% -1.77% -1.12%
firstContentfulPaint 492.21 ms +0.97% -2.46% 486.77 ms +0.15% -0.48% 1.12%
firstBlock 4570.1 ms +1.04% -0.21% 4548.06 ms +0.96% -0.73% 0.48%
type 18.87 ms +2.76% -3.13% 18.78 ms +6.55% -4.42% 0.48%
navigate 117.98 ms +7.85% -3.7% 125.65 ms +13.82% -4.88% -6.1%
loadPatterns 1349.67 ms +8.15% -6.88% 1286.4 ms +3.64% -3.24% 4.92%
loadPages 1006.22 ms +1.85% -1.76% 1012.59 ms +4.83% -1.4% -0.63%
wpTotal 504.72 ms +1.07% -4.43% 489.41 ms +1.55% -3.27% 3.13%
wpMemoryUsage 12.38 MB +0% -0% 12.34 MB +0% -0% 0.3%
wpDbQueries 43 +2.33% -0% 43 +2.33% -0% 0%

77c99e8 Run

@annezazu

annezazu commented Oct 1, 2026

Copy link
Copy Markdown
Contributor

Gave this a quick test locally with some filler data. I wish there was an easier way to test with multiple people first to catch any edge case. I wonder if instead of trying to show a number of unread, we could just indicate general unread Notes. I could see wanting to open Notes, look at a few, then come back and see the rest of the unread. I also didn't see any indication of which Notes were unread when testing either.

@yashjawale

Copy link
Copy Markdown
Contributor

Thanks for the PR!

In my opinion it'll be helpful to highlight the unread notes briefly when the panel opens since we're showing the count in badge.

I could see wanting to open Notes, look at a few, then come back and see the rest of the unread.

This can be a common workflow for users & will be beneficial if we can support it, although I wonder if that's possible with the current approach as for that we'll have to track read status across each note individually.

@yashjawale

Copy link
Copy Markdown
Contributor

On mobile, the badge is visible but since the notes panel toggle isn't, clicking on the badge doesn't open the notes panel.

Screen.Recording.2026-10-08.at.4.20.16.PM.mov

It'll be better to hide the badge on mobile.

On a side note, there might be quite a few opportunities to improve the experience on mobile (eg. clipped collaborators popover on mobile). But they're outside of scope of this PR.

@adamsilverstein

Copy link
Copy Markdown
Member Author

Gave this a quick test locally with some filler data. I wish there was an easier way to test with multiple people first to catch any edge case. I wonder if instead of trying to show a number of unread, we could just indicate general unread Notes. I could see wanting to open Notes, look at a few, then come back and see the rest of the unread.

I'm open to just showing a blue dot without a count

I also didn't see any indication of which Notes were unread when testing either.

Right, this PR only addresses show that there are unread notes, we don't actually track which ones you have read, only which notes were added since you last opened the post. While not ideal, I still feel is an improvement over having nop indication at all.

In my opinion it'll be helpful to highlight the unread notes briefly when the panel opens since we're showing the count in badge.

@yashjawale any suggestions or ideas on how this highlighting would work? notes might not be on the first page, so I'm not sure this would work consistently.

I could see wanting to open Notes, look at a few, then come back and see the rest of the unread.

This can be a common workflow for users & will be beneficial if we can support it, although I wonder if that's possible with the current approach as for that we'll have to track read status across each note individually.

Right, its not possible with the current approach. Fully tracking read notes would be more complex; I'm open to the idea but would prefer to lint the scope of this initial PR. That said if the consensus is the feasture doesn't really help much without that, I can revisit.

On mobile, the badge is visible but since the notes panel toggle isn't, clicking on the badge doesn't open the notes panel.

Oh, good catch, I'll fix that.

On a side note, there might be quite a few opportunities to improve the experience on mobile (eg. clipped collaborators popover on mobile). But they're outside of scope of this PR.

Feel free to open separate issues for each improvement opportunity you noticed!

adamsilverstein and others added 3 commits October 8, 2026 22:44
…es-badge

# Conflicts:
#	packages/editor/src/components/collab-sidebar/constants.js
#	packages/editor/src/components/collab-sidebar/hooks.js
#	packages/editor/src/components/collab-sidebar/index.jsx
#	packages/interface/CHANGELOG.md
Pinned toggles are hidden below the small breakpoint, but the badge
wrapper stayed visible, leaving a count floating over nothing that
opens the sidebar.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QjT9Yj6cHrjktdMGdQq37b
Selecting a noted block now selects its thread, which counts as reading
it, so start the new note on a block of its own. Also cover the badge
hiding on mobile.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QjT9Yj6cHrjktdMGdQq37b
@yashjawale

Copy link
Copy Markdown
Contributor

any suggestions or ideas on how this highlighting would work? notes might not be on the first page, so I'm not sure this would work consistently.

One approach I can think of is to highlight the unread notes with a yellow background tint as soon as the panel opens, similar to how slack does when we click on a message from the "Activity" panel.

And then un-highlight them when they appear within the visible viewport.

Something along the lines of...

  1. When panel opens, capture IDs of notes comparing their datetime with the last seen timestamp before advancing it
  2. Use it to highlight unseen notes
  3. Use an IntersectionObserver to un-highlight them as soon as they enter viewport with a transition

While this won't cover the use case in #81951 (comment) as all notes will be counted as read when panel opens. It can still be a useful temporary visual cue on client side.

@yashjawale

Copy link
Copy Markdown
Contributor

Also if #81951 (comment) is implemented...

Perhaps it'll be better to show a dot instead of count on indicator, as that won't indicate that we're keeping track of unseen notes. It'll just be a "Some activity has happened since you last opened the panel" indicator.

Ideally the unseen threads should also be expanded when one of their messages is highlighted similar to #84060

adamsilverstein and others added 2 commits October 9, 2026 11:05
Only a per-post timestamp is stored, so the badge can say something is
new but not which notes were read. Show a dot instead of a count, and
when All notes opens, highlight the threads that were unseen with their
replies expanded, fading each once it has been in view for a moment.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QjT9Yj6cHrjktdMGdQq37b
@adamsilverstein

Copy link
Copy Markdown
Member Author

Claude pushed changes to address the latest feedback. I'm away from my laptop for a day - I'll loop back to review and test when I am back.

@yashjawale

Copy link
Copy Markdown
Contributor

Thanks!
I encountered an instance where the highlight didn't fade out but can't reproduce it anymore. Could just be a one-off. I'll continue testing & will report if I find anything.

Rn we're highlighting entire thread which has the reply, for large threads it leaves a large yellow patch on screen when the panel opens. Perhaps it'll be better to highlight the individual replies?

The 15.2.0 release renamed the Unreleased heading, stranding this PR's
entry under a published version and failing the changelog check.

Claude-Session: https://claude.ai/code/session_01RmMwj4CN9cF8b1Sx58Pvik

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

[Package] Editor /packages/editor [Package] Interface /packages/interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Show an unseen-notes count badge on the Notes toggle, like Google Docs

3 participants