Skip to content

Release 8.3.0#39778

Open
rocketchat-github-ci wants to merge 243 commits intomasterfrom
release-8.3.0
Open

Release 8.3.0#39778
rocketchat-github-ci wants to merge 243 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.

Patch Changes

  • (#39492) Security Hotfix (https://docs.rocket.chat/docs/security-fixes-and-updates)

  • (#39010) Fixes an authorization issue that allowed users to confirm uploads from other users

  • (#39092) Fixes main channel scroll position changing when jumping to a thread message from search

  • Bump @rocket.chat/meteor version.

  • Bump @rocket.chat/meteor version.

  • Bump @rocket.chat/meteor version.

  • (#38531) Fixes a cross-resource access issue that allowed users to retrieve emojis from the Custom Sounds endpoint and sounds from the Custom Emojis endpoint when using the FileSystem storage mode.

  • (#39752) Fixes an issue on Federation where all domains ending with the pattern where being allowed to communicate, the feature is meant to work with a list, url by url

  • (#38662 by @TheRazorbill) Fixes wrong i18n key in RegisterWorkspace confirmation step so the text is translated instead of showing a missing key.

  • (#38983 by @copilot-swe-agent) Fixes incoming webhook messages ignoring literal \n escape sequences, and fixes the MarkdownText document variant not rendering newlines as line breaks.

  • (#39087) Fixes race condition causing duplicate open livechat rooms per visitor token.

  • (#39460) Fixes inconsistent username formatting causing '@@username' for federated users

  • (#38989) chore(eslint): Upgrades ESLint and its configuration

  • (#39541) Fixes an issue when forwarding messages to a password-protected room.

  • (#39003) Fix marking a message as sent before the request finishes

  • (#36786 by @ahmed-n-abdeltwab) Add OpenAPI support for the Rocket.Chat e2e.getUsersOfRoomWithoutKey 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.

  • (#38932) Fixes version update banner showing outdated versions after server upgrade.

  • (#39461) Deprecates Anonymous write. Feature will be removed in version 9.0.0.

  • (#39545) Fixes the intermittent behavior where the "New messages" indicator appears incorrectly after the user sends a message

  • (#39753) Fixes an issue where emails were not saved for users logging in via the GitHub OAuth provider.

  • (#39491) Fixes calendar events modifying the wrong status property when attempting to sync busy status.

  • (#39054) Fixes a mismatch in the room icons on the sidebar items, ABAC Managed rooms were not displaying the correct icon

  • (#38760 by @Khizarshah01) Limits Outgoing webhook maximum response size to 10mb.

  • (#39612) Fixes the download of attachments with non-unicode names on E2EE rooms

  • (#36882 by @ahmed-n-abdeltwab) Add OpenAPI support for the Rocket.Chat push.test 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.

  • (#39718) Fixes an issue where, sometimes, updatedAt was not being set during the subscription creation

  • (#39557) Fixes main team channels being able to be converted into public or private with only the create-team-channel or create-team-group (the correct permission for main teams are create-c and create-p)

  • (#39559 by @copilot-swe-agent) Splits the single AJV validator instance into two: ajv (coerceTypes: false) for request body validation and ajvQuery (coerceTypes: true) for query parameter validation.

    Why this matters: Previously, a single AJV instance with coerceTypes: true was used everywhere. This silently accepted values with wrong types — for example, sending { "rid": 12345 } (number) where a string was expected would pass validation because 12345 was coerced to "12345". With this change, body validation is now strict: the server will reject payloads with incorrect types instead of silently coercing them.

    What may break for API consumers:

    • Numeric values sent as strings in POST/PUT/PATCH bodies (e.g., { "count": "10" } instead of { "count": 10 }) will now be rejected. Ensure JSON bodies use proper types.
    • Boolean values sent as strings in bodies (e.g., { "readThreads": "true" } instead of { "readThreads": true }) will now be rejected.
    • null values where a string is expected (e.g., { "name": null } for a type: 'string' field without nullable: true) will no longer be coerced to "".

    No change for query parameters: GET query params (e.g., ?count=10&offset=0) continue to be coerced via ajvQuery, since HTTP query strings are always strings.

  • (#39250) Fixes inquiries.take not failing when attempting to take a chat while over chat limits

  • (#38852) Fixes an issue where Production flag was not being respected when initializing Push Notifications configuration

  • (#39363 by @gauravsingh001-cyber) Fixes "Join" button on Outlook Calendar bubbling click event, also opening the calendar event details.

  • (#38944 by @Khizarshah01) Limits Omnichannel webhook maximum response size to 10mb.

  • (#38954) Fixes reactivity of Custom Sounds and Custom Emojis storage settings

  • (#35995 by @ahmed-n-abdeltwab) Add OpenAPI support for the Rocket.Chat rooms.favorite APIs 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.

  • (#39505) Fixes ssrf validation for oauth endpoints, which allows internal endpoints to be used during the auth flow.

  • (#36523 by @ahmed-n-abdeltwab) Add OpenAPI support for the Rocket.Chat emoji-custom.create 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.

  • (#36953 by @ahmed-n-abdeltwab) Add OpenAPI support for the Rocket.Chat commands.get 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.

  • (#38974 by @ahmed-n-abdeltwab) Add OpenAPI support for the Rocket.Chat dm.close/im.close 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.

  • Updated dependencies [602b20a, e206889, e65b176, 6b80941, d1bf2cc, 02b1e6e, 9a70095, cd2fc20, 87f9262, a4e3c16, 652ff8c, 539659a, b1b1d6c, 1741a20, 5518503, a4341ec, 4025314, 85c0ac7, 803b807, 1361a1f, c217b0b, 2a27010, 78e37dc, 37acece, 43d0cfc, d8baf39, ddc0ed3, d83a1a9, eae3fb3, 4c2e444, 722df6f, 78b3fe3, 98a6c58, 29b453e, 39f2e87, c117492, 7c73241]:
    • @rocket.chat/model-typings@2.1.2
    • @rocket.chat/models@2.1.2
    • @rocket.chat/federation-matrix@0.1.0
    • @rocket.chat/message-parser@0.31.35
    • @rocket.chat/fuselage-ui-kit@29.0.0
    • @rocket.chat/ui-kit@1.0.0
    • @rocket.chat/apps-engine@1.61.0
    • @rocket.chat/rest-typings@8.3.0
    • @rocket.chat/i18n@2.2.0
    • @rocket.chat/ui-voip@19.0.0
    • @rocket.chat/server-cloud-communication@0.0.3
    • @rocket.chat/omnichannel-services@0.3.50
    • @rocket.chat/web-ui-registration@29.0.0
    • @rocket.chat/network-broker@0.2.32
    • @rocket.chat/password-policies@0.1.1
    • @rocket.chat/omni-core-ee@0.0.18
    • @rocket.chat/instance-status@0.1.53
    • @rocket.chat/media-signaling@0.2.0
    • @rocket.chat/patch-injection@0.0.2
    • @rocket.chat/media-calls@0.3.0
    • @rocket.chat/pdf-worker@0.3.32
    • @rocket.chat/account-utils@0.0.3
    • @rocket.chat/core-services@0.13.2
    • @rocket.chat/message-types@0.1.1
    • @rocket.chat/mongo-adapter@0.0.3
    • @rocket.chat/ui-video-conf@29.0.0
    • @rocket.chat/cas-validate@0.0.4
    • @rocket.chat/core-typings@8.3.0
    • @rocket.chat/server-fetch@0.1.2
    • @rocket.chat/presence@0.2.53
    • @rocket.chat/http-router@7.9.20
    • @rocket.chat/poplib@0.0.3
    • @rocket.chat/ui-composer@0.6.0
    • @rocket.chat/ui-contexts@29.0.0
    • @rocket.chat/license@1.1.13
    • @rocket.chat/api-client@0.2.53
    • @rocket.chat/log-format@0.0.3
    • @rocket.chat/gazzodown@29.0.0
    • @rocket.chat/omni-core@0.0.18
    • @rocket.chat/ui-avatar@25.0.0
    • @rocket.chat/ui-client@29.0.0
    • @rocket.chat/abac@0.1.6
    • @rocket.chat/favicon@0.0.5
    • @rocket.chat/tracing@0.0.2
    • @rocket.chat/agenda@0.1.1
    • @rocket.chat/base64@1.0.14
    • @rocket.chat/logger@1.0.1
    • @rocket.chat/random@1.2.3
    • @rocket.chat/sha256@1.0.13
    • @rocket.chat/tools@0.2.5
    • @rocket.chat/apps@0.6.6
    • @rocket.chat/cron@0.1.53
    • @rocket.chat/jwt@0.2.1

ggazzo and others added 30 commits February 20, 2026 15:06
Co-authored-by: Kevin Aleman <kaleman960@gmail.com>
Co-authored-by: Khizarshah01 <5263975+Khizarshah01@users.noreply.github.com>
Co-authored-by: Guilherme Gazzo <guilherme@gazzo.xyz>
…ints (#38861)

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ggazzo <5263975+ggazzo@users.noreply.github.com>
Co-authored-by: Guilherme Gazzo <guilhermegazzo@gmail.com>
Co-authored-by: Guilherme Gazzo <guilherme@gazzo.xyz>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ggazzo <5263975+ggazzo@users.noreply.github.com>
…38864)

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ggazzo <guilherme@gazzo.xyz>
#38760)

Co-authored-by: Kevin Aleman <11577696+KevLehman@users.noreply.github.com>
Co-authored-by: Kevin  Aleman <kaleman960@gmail.com>
Co-authored-by: Guilherme Gazzo <guilhermegazzo@gmail.com>
Co-authored-by: Guilherme Gazzo <guilherme@gazzo.xyz>
…nd add Contextualbar bug fixes (#38610)

Co-authored-by: gabriellsh <40830821+gabriellsh@users.noreply.github.com>
Co-authored-by: Guilherme Gazzo <guilherme@gazzo.xyz>
Co-authored-by: Kevin Aleman <kaleman960@gmail.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: Guilherme Gazzo <guilherme@gazzo.xyz>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: Douglas Fabris <devfabris@gmail.com>
Co-authored-by: Guilherme Gazzo <guilherme@gazzo.xyz>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: Kevin Aleman <kaleman960@gmail.com>
Co-authored-by: Guilherme Gazzo <guilherme@gazzo.xyz>
… parser (#38958)

Co-authored-by: ggazzo <5263975+ggazzo@users.noreply.github.com>
…r custom-sounds and emoji-custom endpoints (#38531)

Co-authored-by: Guilherme Gazzo <guilherme@gazzo.xyz>
@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Mar 20, 2026

🦋 Changeset detected

Latest commit: aad2007

The changes in this PR will be included in the next version bump.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@dionisio-bot
Copy link
Copy Markdown
Contributor

dionisio-bot bot commented Mar 20, 2026

Looks like this PR is not ready to merge, because of the following issues:

  • This PR is missing the 'stat: QA assured' label
  • This PR is missing the required milestone or project

Please fix the issues and try again

If you have any trouble, please check the PR guidelines

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 1653 files

Note: This PR contains a large number of files. cubic only reviews up to 75 files per PR, so some files may not have been reviewed.

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=".changeset/eight-colts-kiss.md">

<violation number="1" location=".changeset/eight-colts-kiss.md:6">
P3: Fix the release-note sentence grammar to avoid unclear wording in the published changelog.</violation>
</file>

<file name=".github/workflows/dedupe-issues.yml">

<violation number="1" location=".github/workflows/dedupe-issues.yml:26">
P1: Pin the third-party action to an immutable commit SHA instead of `@beta` to avoid supply-chain risk when handling repository secrets.</violation>

<violation number="2" location=".github/workflows/dedupe-issues.yml:35">
P2: `always()` causes duplicate-comment-added telemetry to be sent even when dedupe fails; gate this step on successful prior execution to avoid false-positive metrics.</violation>
</file>

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

uses: actions/checkout@v6

- name: Run Claude Code slash command
uses: anthropics/claude-code-base-action@beta
Copy link
Copy Markdown
Contributor

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

Choose a reason for hiding this comment

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

P1: Pin the third-party action to an immutable commit SHA instead of @beta to avoid supply-chain risk when handling repository secrets.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .github/workflows/dedupe-issues.yml, line 26:

<comment>Pin the third-party action to an immutable commit SHA instead of `@beta` to avoid supply-chain risk when handling repository secrets.</comment>

<file context>
@@ -0,0 +1,83 @@
+        uses: actions/checkout@v6
+
+      - name: Run Claude Code slash command
+        uses: anthropics/claude-code-base-action@beta
+        with:
+          prompt: '/dedupe ${{ github.repository }}/issues/${{ github.event.issue.number || inputs.issue_number }}'
</file context>
Fix with Cubic

GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Log duplicate comment event to Statsig
if: always()
Copy link
Copy Markdown
Contributor

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

Choose a reason for hiding this comment

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

P2: always() causes duplicate-comment-added telemetry to be sent even when dedupe fails; gate this step on successful prior execution to avoid false-positive metrics.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .github/workflows/dedupe-issues.yml, line 35:

<comment>`always()` causes duplicate-comment-added telemetry to be sent even when dedupe fails; gate this step on successful prior execution to avoid false-positive metrics.</comment>

<file context>
@@ -0,0 +1,83 @@
+            GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Log duplicate comment event to Statsig
+        if: always()
+        env:
+          STATSIG_API_KEY: ${{ secrets.STATSIG_API_KEY }}
</file context>
Suggested change
if: always()
if: success()
Fix with Cubic

"@rocket.chat/meteor": patch
---

Fixes an issue on Federation where all domains ending with the pattern where being allowed to communicate, the feature is meant to work with a list, url by url
Copy link
Copy Markdown
Contributor

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

Choose a reason for hiding this comment

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

P3: Fix the release-note sentence grammar to avoid unclear wording in the published changelog.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .changeset/eight-colts-kiss.md, line 6:

<comment>Fix the release-note sentence grammar to avoid unclear wording in the published changelog.</comment>

<file context>
@@ -0,0 +1,6 @@
+"@rocket.chat/meteor": patch
+---
+
+Fixes an issue on Federation where all domains ending with the pattern where being allowed to communicate, the feature is meant to work with a list, url by url
</file context>
Fix with Cubic

@codecov
Copy link
Copy Markdown

codecov bot commented Mar 20, 2026

Codecov Report

❌ Patch coverage is 85.61321% with 61 lines in your changes missing coverage. Please review.
✅ Project coverage is 70.59%. Comparing base (5e92280) to head (aad2007).

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##           master   #39778      +/-   ##
==========================================
+ Coverage   70.57%   70.59%   +0.01%     
==========================================
  Files        3188     3258      +70     
  Lines      112623   115858    +3235     
  Branches    20402    21056     +654     
==========================================
+ Hits        79480    81785    +2305     
- Misses      31089    32014     +925     
- Partials     2054     2059       +5     
Flag Coverage Δ
e2e 60.65% <72.09%> (+0.32%) ⬆️
e2e-api 48.10% <ø> (+0.30%) ⬆️
unit 71.09% <86.18%> (-0.51%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@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: 33032b3a-7801-433b-a5ee-2ace3623940c

📥 Commits

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

⛔ 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/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
  • apps/meteor/client/components/message/variants/room/RoomMessageContent.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

aleksandernsilva and others added 2 commits April 2, 2026 20:30
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.