Skip to content

Release 8.3.0#39778

Merged
ggazzo merged 244 commits intomasterfrom
release-8.3.0
Apr 7, 2026
Merged

Release 8.3.0#39778
ggazzo merged 244 commits intomasterfrom
release-8.3.0

Conversation

@rocketchat-github-ci
Copy link
Copy Markdown
Collaborator

@rocketchat-github-ci rocketchat-github-ci commented Mar 20, 2026

You can see below a preview of the release change log:

8.3.0

Engine versions

  • Node: 22.16.0
  • Deno: 1.43.5
  • MongoDB: 8.0
  • Apps-Engine: 1.61.0

Minor Changes

  • (#39750) Adds support to name changes on federated rooms

  • (#39268) refactor(ui-kit): Remove UiKit deprecations

  • (#38978 by @ahmed-n-abdeltwab) Add OpenAPI support for the Rocket.Chat autotranslate translateMessage API endpoints by migrating to a modern chained route definition syntax and utilizing shared AJV schemas for validation to enhance API documentation and ensure type safety through response validation

  • (#37922) Introduces native screen sharing for internal voice calls. This feature is currently in beta and can be disabled through admin settings.

  • (#39225 by @sezallagwal) Add OpenAPI support for the chat.followMessage and chat.unfollowMessage API endpoints by migrating to a modern chained route definition syntax and utilizing AJV schemas for body and response validation.

  • (#39227 by @sezallagwal) Add OpenAPI support for the chat.starMessage and chat.unStarMessage API endpoints by migrating to a modern chained route definition syntax and utilizing AJV schemas for body and response validation.

  • (#38957 by @Verifieddanny) Migrated rooms.leave endpoint to new OpenAPI pattern with AJV validation

  • (#38549 by @Rohitgiri02) migrated rooms.delete endpoint to new OpenAPI pattern with AJV validation

  • (#39094 by @ahmed-n-abdeltwab) Adds OpenAPI support for the Rocket.Chat e2e.updateGroupKey endpoints by migrating to a modern chained route definition syntax and utilizing shared AJV schemas for validation to enhance API documentation and ensure type safety through response validation.

  • (#36402 by @ahmed-n-abdeltwab) Add OpenAPI support for the Rocket.Chat users.getAvatarSuggestion API endpoints by migrating to a modern chained route definition syntax and utilizing shared AJV schemas for validation to enhance API documentation and ensure type safety through response validation.

  • (#38881 by @smirk-dev) adds instances.get API endpoint to new chained pattern with response schemas

  • (#38883 by @smirk-dev) Migrates ldap.testConnection and ldap.testSearch REST API endpoints from legacy addRoute pattern to the new chained .post() API pattern with typed response schemas and AJV body validation (replacing Meteor check()).

  • (#38882 by @smirk-dev) Migrates presence.getConnections and presence.enableBroadcast REST API endpoints from legacy addRoute pattern to the new chained .get()/.post() API pattern with typed response schemas.

  • (#38610) Fixes Custom Sounds Contextualbar state and refresh behavior

  • (#36779 by @ahmed-n-abdeltwab) Add OpenAPI support for the Rocket.Chat e2e.fetchMyKeys endpoints by migrating to a modern chained route definition syntax and utilizing shared AJV schemas for validation to enhance API documentation and ensure type safety through response validation.

  • (#39425) Adds support for multiple files in message composer, improving file upload experience

  • (#36916 by @ahmed-n-abdeltwab) Add OpenAPI support for the Rocket.Chat custom-user-status.list API endpoints by migrating to a modern chained route definition syntax and utilizing shared AJV schemas for validation to enhance API documentation and ensure type safety through response validation

  • (#39219 by @ahmed-n-abdeltwab) Add OpenAPI support for the Rocket.Chat e2e endpoints by migrating to a modern chained route definition syntax and utilizing shared AJV schemas for validation to enhance API documentation and ensure type safety through response validation.

  • (#39678) Adds support for ban management in rooms, enabling authorized users to ban and unban members via UI and slash commands.

  • (#38610) Adds new custom-sounds.getOne REST endpoint to retrieve a single custom sound by _id and updates client to consume it.

  • (#40006) Removes the Federation beta callout as the feature leaves beta

Patch Changes

ggazzo and others added 30 commits February 20, 2026 15:06
Co-authored-by: Khizarshah01 <[email protected]>
Co-authored-by: Guilherme Gazzo <[email protected]>
…ints (#38861)

Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: ggazzo <[email protected]>
Co-authored-by: Guilherme Gazzo <[email protected]>
Co-authored-by: Guilherme Gazzo <[email protected]>
Co-authored-by: Guilherme Gazzo <[email protected]>
Co-authored-by: Guilherme Gazzo <[email protected]>
…nd add Contextualbar bug fixes (#38610)

Co-authored-by: gabriellsh <[email protected]>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: Guilherme Gazzo <[email protected]>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: Douglas Fabris <[email protected]>
Co-authored-by: Guilherme Gazzo <[email protected]>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: Kevin Aleman <[email protected]>
Co-authored-by: Guilherme Gazzo <[email protected]>
…r custom-sounds and emoji-custom endpoints (#38531)

Co-authored-by: Guilherme Gazzo <[email protected]>
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 23, 2026

Important

Review skipped

Too many files!

This PR contains 295 files, which is 145 over the limit of 150.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 7af2e3a5-73ab-4c91-9480-7ef86b5b12a1

📥 Commits

Reviewing files that changed from the base of the PR and between 5e92280 and 788c161.

⛔ Files ignored due to path filters (5)
  • .github/actions/update-version-durability/package-lock.json is excluded by !**/package-lock.json
  • .yarn/patches/@react-pdf-layout-npm-4.4.2-6c2e3312fa.patch is excluded by !**/.yarn/**
  • .yarn/patches/yoga-layout-npm-3.2.1-51ec934670.patch is excluded by !**/.yarn/**
  • apps/meteor/client/components/UserAutoCompleteMultiple/__snapshots__/UserAvatarChip.spec.tsx.snap is excluded by !**/*.snap
  • apps/meteor/client/components/UserInfo/__snapshots__/UserInfo.spec.tsx.snap is excluded by !**/*.snap
📒 Files selected for processing (295)
  • .changeset/blue-points-dream.md
  • .changeset/blue-seals-leave.md
  • .changeset/bright-dots-march.md
  • .changeset/bump-patch-1774533301673.md
  • .changeset/bump-patch-1774666021169.md
  • .changeset/bump-patch-1774909627968.md
  • .changeset/bump-patch-1775173623076.md
  • .changeset/clean-ears-fly.md
  • .changeset/eight-colts-kiss.md
  • .changeset/five-chicken-invite.md
  • .changeset/fix-blockquote-empty-lines.md
  • .changeset/fix-message-parser-reduce-perf.md
  • .changeset/fix-register-workspace-i18n.md
  • .changeset/fix-trailing-punctuation-url.md
  • .changeset/fix-webhook-newline.md
  • .changeset/fluffy-turtles-admire.md
  • .changeset/healthy-dragons-crash.md
  • .changeset/honest-shrimps-cough.md
  • .changeset/hungry-monkeys-hang.md
  • .changeset/late-pots-teach.md
  • .changeset/little-eyes-kneel.md
  • .changeset/loud-weeks-protect.md
  • .changeset/many-glasses-care.md
  • .changeset/migrate-chat-follow-unfollow-message.md
  • .changeset/migrate-chat-star-unstar-message.md
  • .changeset/migrate-rooms-leave-endpoint.md
  • .changeset/nasty-candles-invent.md
  • .changeset/new-students-attack.md
  • .changeset/nice-penguins-rhyme.md
  • .changeset/nice-squids-smoke.md
  • .changeset/nine-otters-hug.md
  • .changeset/olive-hairs-report.md
  • .changeset/orange-paws-poke.md
  • .changeset/polite-plums-boil.md
  • .changeset/pre.json
  • .changeset/pretty-jobs-juggle.md
  • .changeset/rare-planes-tan.md
  • .changeset/rare-waves-help.md
  • .changeset/red-windows-breathe.md
  • .changeset/refactor-instances-api-chained-pattern.md
  • .changeset/refactor-ldap-api-chained-pattern.md
  • .changeset/refactor-presence-api-chained-pattern.md
  • .changeset/rude-plums-think.md
  • .changeset/shaggy-cars-watch.md
  • .changeset/shiny-pears-admire.md
  • .changeset/short-starfishes-provide.md
  • .changeset/small-pants-reflect.md
  • .changeset/spicy-drinks-carry.md
  • .changeset/spotty-news-burn.md
  • .changeset/spotty-poems-smash.md
  • .changeset/stale-elephants-type.md
  • .changeset/strict-ajv-coercion.md
  • .changeset/sweet-terms-relax.md
  • .changeset/swift-badgers-try.md
  • .changeset/tame-dolphins-draw.md
  • .changeset/tame-humans-greet.md
  • .changeset/tame-tables-complain.md
  • .changeset/tender-papayas-jam.md
  • .changeset/thick-nails-exist.md
  • .changeset/tough-steaks-beam.md
  • .changeset/tricky-boxes-type.md
  • .changeset/twenty-colts-flash.md
  • .changeset/two-pianos-knock.md
  • .changeset/unlucky-impalas-matter.md
  • .changeset/weak-terms-shave.md
  • .changeset/wet-roses-call.md
  • .changeset/wicked-buckets-thank.md
  • .github/actions/build-docker/action.yml
  • .github/actions/restore-packages/action.yml
  • .github/actions/update-version-durability/index.js
  • .github/agents/bug-resolution-agent.md
  • .github/agents/feature-development-agent.md
  • .github/agents/refactor-agent.md
  • .github/pr-title-checker-config.json
  • .github/workflows/auto-close-duplicates.yml
  • .github/workflows/ci-code-check.yml
  • .github/workflows/ci-test-e2e.yml
  • .github/workflows/ci-test-storybook.yml
  • .github/workflows/ci-test-unit.yml
  • .github/workflows/ci.yml
  • .github/workflows/dedupe-issues.yml
  • .github/workflows/pr-title-checker.yml
  • .github/workflows/release-candidate.yml
  • .github/workflows/todo.yml
  • .github/workflows/update-version-durability.yml
  • .vscode/settings.json
  • .worktrees/replies-refactor
  • README.md
  • apps/meteor/.eslintrc.json
  • apps/meteor/.mocharc.api.js
  • apps/meteor/.mocharc.api.livechat.js
  • apps/meteor/.mocharc.js
  • apps/meteor/CHANGELOG.md
  • apps/meteor/app/2fa/server/code/EmailCheck.ts
  • apps/meteor/app/2fa/server/code/PasswordCheckFallback.ts
  • apps/meteor/app/2fa/server/functions/resetTOTP.ts
  • apps/meteor/app/2fa/server/methods/validateTempToken.ts
  • apps/meteor/app/api/server/ApiClass.ts
  • apps/meteor/app/api/server/ajv.ts
  • apps/meteor/app/api/server/default/info.ts
  • apps/meteor/app/api/server/definition.ts
  • apps/meteor/app/api/server/helpers/getLoggedInUser.ts
  • apps/meteor/app/api/server/helpers/getUserFromParams.ts
  • apps/meteor/app/api/server/helpers/getUserInfo.spec.ts
  • apps/meteor/app/api/server/helpers/getUserInfo.ts
  • apps/meteor/app/api/server/helpers/parseJsonQuery.ts
  • apps/meteor/app/api/server/index.ts
  • apps/meteor/app/api/server/middlewares/authenticationHono.ts
  • apps/meteor/app/api/server/middlewares/permissions.ts
  • apps/meteor/app/api/server/router.ts
  • apps/meteor/app/api/server/v1/assets.ts
  • apps/meteor/app/api/server/v1/autotranslate.ts
  • apps/meteor/app/api/server/v1/banners.ts
  • apps/meteor/app/api/server/v1/calendar.ts
  • apps/meteor/app/api/server/v1/call-history.ts
  • apps/meteor/app/api/server/v1/channels.ts
  • apps/meteor/app/api/server/v1/chat.ts
  • apps/meteor/app/api/server/v1/cloud.ts
  • apps/meteor/app/api/server/v1/commands.ts
  • apps/meteor/app/api/server/v1/custom-sounds.ts
  • apps/meteor/app/api/server/v1/custom-user-status.ts
  • apps/meteor/app/api/server/v1/e2e.ts
  • apps/meteor/app/api/server/v1/email-inbox.ts
  • apps/meteor/app/api/server/v1/emoji-custom.ts
  • apps/meteor/app/api/server/v1/groups.ts
  • apps/meteor/app/api/server/v1/im.ts
  • apps/meteor/app/api/server/v1/import.ts
  • apps/meteor/app/api/server/v1/instances.ts
  • apps/meteor/app/api/server/v1/integrations.ts
  • apps/meteor/app/api/server/v1/invites.ts
  • apps/meteor/app/api/server/v1/ldap.ts
  • apps/meteor/app/api/server/v1/misc.ts
  • apps/meteor/app/api/server/v1/moderation.ts
  • apps/meteor/app/api/server/v1/oauthapps.ts
  • apps/meteor/app/api/server/v1/permissions.ts
  • apps/meteor/app/api/server/v1/presence.ts
  • apps/meteor/app/api/server/v1/push.ts
  • apps/meteor/app/api/server/v1/roles.ts
  • apps/meteor/app/api/server/v1/rooms.ts
  • apps/meteor/app/api/server/v1/settings.ts
  • apps/meteor/app/api/server/v1/subscriptions.ts
  • apps/meteor/app/api/server/v1/teams.ts
  • apps/meteor/app/api/server/v1/users.ts
  • apps/meteor/app/api/server/v1/videoConference.ts
  • apps/meteor/app/apps/server/bridges/rooms.ts
  • apps/meteor/app/apps/server/bridges/videoConferences.ts
  • apps/meteor/app/apps/server/converters/transformMappedData.ts
  • apps/meteor/app/assets/server/assets.ts
  • apps/meteor/app/authentication/server/startup/index.js
  • apps/meteor/app/authorization/server/constant/permissions.ts
  • apps/meteor/app/authorization/server/functions/canSendMessage.ts
  • apps/meteor/app/authorization/server/functions/upsertPermissions.ts
  • apps/meteor/app/autotranslate/server/autotranslate.ts
  • apps/meteor/app/autotranslate/server/deeplTranslate.ts
  • apps/meteor/app/autotranslate/server/functions/translateMessage.ts
  • apps/meteor/app/autotranslate/server/googleTranslate.ts
  • apps/meteor/app/autotranslate/server/methods/translateMessage.ts
  • apps/meteor/app/channel-settings/server/methods/saveRoomSettings.ts
  • apps/meteor/app/cloud/server/functions/saveRegistrationData.ts
  • apps/meteor/app/cloud/server/functions/syncWorkspace/handleCommsSync.ts
  • apps/meteor/app/cloud/server/index.ts
  • apps/meteor/app/crowd/server/crowd.ts
  • apps/meteor/app/custom-oauth/server/custom_oauth_server.js
  • apps/meteor/app/custom-sounds/server/startup/custom-sounds.js
  • apps/meteor/app/discussion/server/permissions.ts
  • apps/meteor/app/e2e/server/functions/provideUsersSuggestedGroupKeys.ts
  • apps/meteor/app/emoji-custom/server/lib/insertOrUpdateEmoji.ts
  • apps/meteor/app/emoji-custom/server/startup/emoji-custom.js
  • apps/meteor/app/emoji/client/index.ts
  • apps/meteor/app/file-upload/server/config/AmazonS3.ts
  • apps/meteor/app/file-upload/server/methods/sendFileMessage.ts
  • apps/meteor/app/file-upload/ufs/AmazonS3/server.ts
  • apps/meteor/app/github/server/lib.ts
  • apps/meteor/app/importer-csv/server/CsvImporter.ts
  • apps/meteor/app/importer-omnichannel-contacts/server/addParsedContacts.ts
  • apps/meteor/app/importer-slack-users/server/SlackUsersImporter.ts
  • apps/meteor/app/importer-slack/server/SlackImporter.ts
  • apps/meteor/app/importer/server/classes/converters/MessageConverter.ts
  • apps/meteor/app/importer/server/classes/converters/RecordConverter.ts
  • apps/meteor/app/integrations/server/api/api.ts
  • apps/meteor/app/integrations/server/lib/triggerHandler.ts
  • apps/meteor/app/integrations/server/lib/validateOutgoingIntegration.ts
  • apps/meteor/app/integrations/server/methods/incoming/addIncomingIntegration.ts
  • apps/meteor/app/integrations/server/methods/incoming/updateIncomingIntegration.ts
  • apps/meteor/app/integrations/server/methods/outgoing/addOutgoingIntegration.ts
  • apps/meteor/app/invites/server/functions/sendInvitationEmail.ts
  • apps/meteor/app/lib/client/methods/sendMessage.ts
  • apps/meteor/app/lib/lib/MessageTypes.ts
  • apps/meteor/app/lib/server/functions/addUserToDefaultChannels.ts
  • apps/meteor/app/lib/server/functions/addUserToRoom.ts
  • apps/meteor/app/lib/server/functions/banUserFromRoom.ts
  • apps/meteor/app/lib/server/functions/createDirectRoom.ts
  • apps/meteor/app/lib/server/functions/createRoom.ts
  • apps/meteor/app/lib/server/functions/deleteMessage.ts
  • apps/meteor/app/lib/server/functions/executeUnbanUserFromRoom.ts
  • apps/meteor/app/lib/server/functions/extractMentionsFromMessageAST.ts
  • apps/meteor/app/lib/server/functions/getAvatarSuggestionForUser.ts
  • apps/meteor/app/lib/server/functions/getRoomByNameOrIdWithOptionToJoin.ts
  • apps/meteor/app/lib/server/functions/getUsernameSuggestion.ts
  • apps/meteor/app/lib/server/functions/joinDefaultChannels.ts
  • apps/meteor/app/lib/server/functions/processWebhookMessage.ts
  • apps/meteor/app/lib/server/functions/relinquishRoomOwnerships.ts
  • apps/meteor/app/lib/server/functions/saveUser/saveNewUser.ts
  • apps/meteor/app/lib/server/functions/sendMessage.ts
  • apps/meteor/app/lib/server/functions/setUserAvatar.ts
  • apps/meteor/app/lib/server/lib/sendNotificationsOnMessage.ts
  • apps/meteor/app/lib/server/methods/addUsersToRoom.ts
  • apps/meteor/app/lib/server/methods/getRoomRoles.ts
  • apps/meteor/app/lib/server/methods/joinRoom.ts
  • apps/meteor/app/lib/server/methods/sendMessage.ts
  • apps/meteor/app/livechat/client/lib/stream/queueManager.ts
  • apps/meteor/app/livechat/imports/server/rest/appearance.ts
  • apps/meteor/app/livechat/imports/server/rest/inquiries.ts
  • apps/meteor/app/livechat/imports/server/rest/rooms.ts
  • apps/meteor/app/livechat/server/api/lib/rooms.ts
  • apps/meteor/app/livechat/server/api/v1/integration.ts
  • apps/meteor/app/livechat/server/api/v1/room.ts
  • apps/meteor/app/livechat/server/api/v1/webhooks.ts
  • apps/meteor/app/livechat/server/hooks/afterUserActions.ts
  • apps/meteor/app/livechat/server/hooks/sendToCRM.ts
  • apps/meteor/app/livechat/server/lib/Helper.ts
  • apps/meteor/app/livechat/server/lib/closeRoom.ts
  • apps/meteor/app/livechat/server/lib/contacts/ContactMerger.ts
  • apps/meteor/app/livechat/server/lib/contacts/registerContact.ts
  • apps/meteor/app/livechat/server/lib/rooms.ts
  • apps/meteor/app/livechat/server/lib/sendTranscript.ts
  • apps/meteor/app/livechat/server/lib/takeInquiry.ts
  • apps/meteor/app/livechat/server/lib/webhooks.ts
  • apps/meteor/app/livechat/server/roomAccessValidator.internalService.ts
  • apps/meteor/app/markdown/lib/parser/filtered/filtered.js
  • apps/meteor/app/mentions/server/Mentions.ts
  • apps/meteor/app/meteor-accounts-saml/server/lib/SAML.ts
  • apps/meteor/app/notification-queue/server/NotificationQueue.ts
  • apps/meteor/app/oauth2-server-config/server/oauth/oauth2-server.ts
  • apps/meteor/app/push/server/apn.spec.ts
  • apps/meteor/app/push/server/apn.ts
  • apps/meteor/app/push/server/methods.ts
  • apps/meteor/app/push/server/push.ts
  • apps/meteor/app/retention-policy/server/cronPruneMessages.ts
  • apps/meteor/app/settings/server/CachedSettings.ts
  • apps/meteor/app/slackbridge/server/SlackAPI.ts
  • apps/meteor/app/slackbridge/server/SlackAdapter.ts
  • apps/meteor/app/slashcommands-ban/client/client.ts
  • apps/meteor/app/slashcommands-ban/client/index.ts
  • apps/meteor/app/slashcommands-ban/server/ban.ts
  • apps/meteor/app/slashcommands-ban/server/index.ts
  • apps/meteor/app/slashcommands-ban/server/unban.ts
  • apps/meteor/app/slashcommands-invite/client/client.ts
  • apps/meteor/app/slashcommands-invite/server/server.ts
  • apps/meteor/app/slashcommands-inviteall/client/client.ts
  • apps/meteor/app/slashcommands-kick/client/client.ts
  • apps/meteor/app/slashcommands-kick/server/server.ts
  • apps/meteor/app/slashcommands-leave/server/leave.ts
  • apps/meteor/app/threads/server/functions.ts
  • apps/meteor/app/threads/server/methods/getThreadMessages.ts
  • apps/meteor/app/ui-message/client/messageBox/AddLinkComposerActionModal.tsx
  • apps/meteor/app/ui-message/client/messageBox/createComposerAPI.ts
  • apps/meteor/app/ui-utils/client/lib/RoomHistoryManager.ts
  • apps/meteor/app/ui/client/lib/ChatMessages.ts
  • apps/meteor/app/utils/lib/getURL.ts
  • apps/meteor/app/utils/rocketchat.info
  • apps/meteor/app/utils/server/getUserNotificationPreference.ts
  • apps/meteor/app/utils/server/lib/getValidRoomName.ts
  • apps/meteor/app/version-check/server/functions/buildVersionUpdateMessage.spec.ts
  • apps/meteor/app/version-check/server/functions/buildVersionUpdateMessage.ts
  • apps/meteor/client/apps/gameCenter/GameCenterInvitePlayersModal.tsx
  • apps/meteor/client/cachedStores/RoomsCachedStore.ts
  • apps/meteor/client/components/CreateDiscussion/CreateDiscussion.spec.tsx
  • apps/meteor/client/components/CreateDiscussion/CreateDiscussion.tsx
  • apps/meteor/client/components/FingerprintChangeModal.tsx
  • apps/meteor/client/components/FingerprintChangeModalConfirmation.tsx
  • apps/meteor/client/components/GazzodownText.tsx
  • apps/meteor/client/components/ListSkeleton.tsx
  • apps/meteor/client/components/MarkdownText.spec.tsx
  • apps/meteor/client/components/MarkdownText.tsx
  • apps/meteor/client/components/RoomIcon/OmnichannelRoomIcon/OmnichannelAppSourceRoomIcon.tsx
  • apps/meteor/client/components/UserAutoCompleteMultiple/UserAutoCompleteMultipleOption.tsx
  • apps/meteor/client/components/message/IgnoredContent.tsx
  • apps/meteor/client/components/message/MessageContentBody.tsx
  • apps/meteor/client/components/message/MessageHeader.tsx
  • apps/meteor/client/components/message/content/attachments/file/GenericFileAttachment.tsx
  • apps/meteor/client/components/message/content/attachments/structure/AttachmentText.tsx
  • apps/meteor/client/components/message/content/reactions/Reaction.tsx
  • apps/meteor/client/components/message/hooks/useNormalizedMessage.ts
  • apps/meteor/client/components/message/toolbar/MessageToolbarItem.tsx
  • apps/meteor/client/components/message/toolbar/items/actions/ForwardMessageAction.tsx
  • apps/meteor/client/components/message/toolbar/items/actions/JumpToMessageAction.tsx
  • apps/meteor/client/components/message/toolbar/items/actions/QuoteMessageAction.tsx
  • apps/meteor/client/components/message/toolbar/items/actions/ReactionMessageAction.tsx
  • apps/meteor/client/components/message/toolbar/items/actions/ReplyInThreadMessageAction.tsx
  • apps/meteor/client/components/message/toolbar/useReadReceiptsDetailsAction.tsx
  • apps/meteor/client/components/message/variants/RoomMessage.tsx
  • apps/meteor/client/components/message/variants/SystemMessage.tsx
  • apps/meteor/client/components/message/variants/ThreadMessage.tsx
  • apps/meteor/client/components/message/variants/ThreadMessagePreview.tsx

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

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

2 issues found across 16 files (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="ee/packages/federation-matrix/src/FederationMatrix.ts">

<violation number="1" location="ee/packages/federation-matrix/src/FederationMatrix.ts:144">
P3: Use the existing `MatrixMediaService.generateMXCUri` helper instead of rebuilding the MXC URL inline.

(Based on your team's feedback about reusing existing helpers over duplicated logic.) [FEEDBACK_USED]</violation>
</file>

<file name="ee/packages/federation-matrix/src/events/member.ts">

<violation number="1" location="ee/packages/federation-matrix/src/events/member.ts:301">
P2: Missing `avatar_url` is treated as avatar removal, so join events without that field can unintentionally wipe federated users’ avatars.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

// handle avatar updates to membership events
if (senderServerName !== federationSDK.getConfig('serverName')) {
// TODO if there is no avatar_url we may want to validate first if we should remove the user avatar because if may be dealing with an old join event, and the user may have changed their avatar since then, so we need to check if the avatar_url is different from the current one before removing it
void downloadAndSetAvatarDebounced(joiningUser._id, joiningUser, content.avatar_url || null);
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai bot Mar 26, 2026

Choose a reason for hiding this comment

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

P2: Missing avatar_url is treated as avatar removal, so join events without that field can unintentionally wipe federated users’ avatars.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At ee/packages/federation-matrix/src/events/member.ts, line 301:

<comment>Missing `avatar_url` is treated as avatar removal, so join events without that field can unintentionally wipe federated users’ avatars.</comment>

<file context>
@@ -224,6 +293,14 @@ async function handleJoin({
+	// handle avatar updates to membership events
+	if (senderServerName !== federationSDK.getConfig('serverName')) {
+		// TODO if there is no avatar_url we may want to validate first if we should remove the user avatar because if may be dealing with an old join event, and the user may have changed their avatar since then, so we need to check if the avatar_url is different from the current one before removing it
+		void downloadAndSetAvatarDebounced(joiningUser._id, joiningUser, content.avatar_url || null);
+	}
+
</file context>
Suggested change
void downloadAndSetAvatarDebounced(joiningUser._id, joiningUser, content.avatar_url || null);
if ('avatar_url' in content) {
void downloadAndSetAvatarDebounced(joiningUser._id, joiningUser, content.avatar_url ?? null);
}
Fix with Cubic

const matrixUserId = `@${localUser.username}:${this.serverName}`;

// if no avatarETag is provided, it means the user removed his avatar, so we need to send an empty string to Matrix to remove the avatar from their side as well
const avatarUrl = avatarETag ? `mxc://${this.serverName}/${avatarETag}` : null;
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai bot Mar 26, 2026

Choose a reason for hiding this comment

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

P3: Use the existing MatrixMediaService.generateMXCUri helper instead of rebuilding the MXC URL inline.

(Based on your team's feedback about reusing existing helpers over duplicated logic.)

View Feedback

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At ee/packages/federation-matrix/src/FederationMatrix.ts, line 144:

<comment>Use the existing `MatrixMediaService.generateMXCUri` helper instead of rebuilding the MXC URL inline.

(Based on your team's feedback about reusing existing helpers over duplicated logic.) </comment>

<file context>
@@ -117,6 +117,51 @@ export class FederationMatrix extends ServiceClass implements IFederationMatrixS
+			const matrixUserId = `@${localUser.username}:${this.serverName}`;
+
+			// if no avatarETag is provided, it means the user removed his avatar, so we need to send an empty string to Matrix to remove the avatar from their side as well
+			const avatarUrl = avatarETag ? `mxc://${this.serverName}/${avatarETag}` : null;
+
+			const roomsUserIsMemberOf = await Subscriptions.findUserFederatedRoomIds(localUser._id);
</file context>
Suggested change
const avatarUrl = avatarETag ? `mxc://${this.serverName}/${avatarETag}` : null;
const avatarUrl = avatarETag ? MatrixMediaService.generateMXCUri(avatarETag, this.serverName) : null;
Fix with Cubic

Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

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

3 issues found across 4 files (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="packages/rest-typings/src/v1/Ajv.ts">

<violation number="1">
P1: This reverts the strict body validation introduced in #39559. With `coerceTypes: true` on `ajv`, POST/PUT/PATCH bodies will again silently coerce wrong types (e.g., numbers to strings), defeating the purpose of splitting `ajv` and `ajvQuery` into separate instances. The `ajv` instance (used for body validation) should keep `coerceTypes: false`.</violation>
</file>

<file name="apps/meteor/tests/end-to-end/api/livechat/12-priorites.ts">

<violation number="1">
P2: This test enforces incorrect API behavior by expecting a boolean `name` to succeed, even though the route schema declares `name` must be a string.</violation>
</file>

<file name="apps/meteor/tests/end-to-end/api/subscriptions.ts">

<violation number="1">
P2: This assertion expects a subscription-domain error for malformed input, which misclassifies the invalid-params case and weakens validation coverage.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

@@ -8,20 +8,39 @@ const ajv = new Ajv({
discriminator: true,
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai bot Apr 2, 2026

Choose a reason for hiding this comment

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

P1: This reverts the strict body validation introduced in #39559. With coerceTypes: true on ajv, POST/PUT/PATCH bodies will again silently coerce wrong types (e.g., numbers to strings), defeating the purpose of splitting ajv and ajvQuery into separate instances. The ajv instance (used for body validation) should keep coerceTypes: false.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/rest-typings/src/v1/Ajv.ts, line 5:

<comment>This reverts the strict body validation introduced in #39559. With `coerceTypes: true` on `ajv`, POST/PUT/PATCH bodies will again silently coerce wrong types (e.g., numbers to strings), defeating the purpose of splitting `ajv` and `ajvQuery` into separate instances. The `ajv` instance (used for body validation) should keep `coerceTypes: false`.</comment>

<file context>
@@ -2,7 +2,7 @@ import Ajv from 'ajv';
 
 const ajv = new Ajv({
-	coerceTypes: false,
+	coerceTypes: true,
 	allowUnionTypes: true,
 	code: { source: true },
</file context>
Suggested change
discriminator: true,
coerceTypes: false,
Fix with Cubic

@@ -59,7 +59,7 @@ describe('[Subscriptions]', () => {
.expect(400)
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai bot Apr 2, 2026

Choose a reason for hiding this comment

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

P2: This assertion expects a subscription-domain error for malformed input, which misclassifies the invalid-params case and weakens validation coverage.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/meteor/tests/end-to-end/api/subscriptions.ts, line 280:

<comment>This assertion expects a subscription-domain error for malformed input, which misclassifies the invalid-params case and weakens validation coverage.</comment>

<file context>
@@ -277,7 +277,7 @@ describe('[Subscriptions]', () => {
 				.expect((res) => {
 					expect(res.body).to.have.property('success', false);
-					expect(res.body).to.have.property('errorType', 'invalid-params');
+					expect(res.body).to.have.property('error', 'error-invalid-subscription');
 				})
 				.end(done);
</file context>
Suggested change
.expect(400)
expect(res.body).to.have.property('errorType', 'invalid-params');
Fix with Cubic

@cubic-dev-ai
Copy link
Copy Markdown
Contributor

cubic-dev-ai bot commented Apr 7, 2026

You're iterating quickly on this pull request. To help protect your rate limits, cubic has paused automatic reviews on new pushes for now—when you're ready for another review, comment @cubic-dev-ai review.

@ggazzo ggazzo merged commit f214d87 into master Apr 7, 2026
9 of 10 checks passed
@ggazzo ggazzo deleted the release-8.3.0 branch April 7, 2026 12:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.