Commit Graph
63035 Commits
Author SHA1 Message Date
Jarek Radosz 185198e7b7 DEV: Update linting and npm scripts (#37173) 2026-01-16 15:29:06 +01:00
Justin Moore 4bb513fccf FEATURE: Secretless auth in the OpenID connect plugin (#35606)
This change allows users to configure Discourse to fetch tokens from a supporting
IdP without the use of secrets as long as PKCE is enabled.

This is the Authorization Code Flow with Proof Key for Code Exchange (PKCE). For more information, see https://auth0.com/docs/get-started/authentication-and-authorization-flow/authorization-code-flow-with-pkce

Example configuration:
```
"DISCOURSE_OPENID_CONNECT_ENABLED": "true",
"DISCOURSE_OPENID_CONNECT_DISCOVERY_DOCUMENT": "https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration",
"DISCOURSE_OPENID_CONNECT_CLIENT_ID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"DISCOURSE_OPENID_CONNECT_CLIENT_SECRET": "",
"DISCOURSE_OPENID_CONNECT_USE_PKCE": "true"
```
2026-01-16 13:27:00 +00:00
chapoi bd921aa5ca Revert "UX: apply correct border-radius to select-kit elements" (#37171)
Reverts discourse/discourse#37111

It clearly wasn't correct.
2026-01-16 14:23:23 +01:00
Roman Rizzi b8c8f26747 DEV: New plugin outlets around 'add group' and group permissions (#37151) 2026-01-16 09:56:49 -03:00
David Battersby f252e0498b FIX: add decorated html to edit sidebar categories (#37169)
Fixes a display issue in the edit sidebar category modal where
categories contain hashtags for either tags, categories etc.

This change adds decorated html to allow hashtag decoration on category
descriptions.

### Before

<img width="510" height="210" alt="Before change"
src="https://github.com/user-attachments/assets/58673ed6-fb6a-4bbb-986e-ec3f8759a619"
/>


### After

<img width="500" height="209" alt="After change"
src="https://github.com/user-attachments/assets/2e665829-b6bb-45da-9762-9eb0ba87ef45"
/>
2026-01-16 15:49:16 +04:00
David TaylorandJarek Radosz d7de0f6735 DEV: Refactor locale bundle loading (#37114)
Previously, locale bundles were using `require()` directly, and were
very sensitive to load order. This made it very hard to refactor things,
especially for our upcoming move to Vite.

This commit updates the four types of locale bundle to contain only very
simple JS code, with no dependencies at the top level. They simply add
POJO and functions to the `window._discourse_locale_data` global. When
`discourse-i18n` is loaded, it checks that global, loads up the data,
and executes the functions (passing in any dependencies like
messageformat/runtime where required).

Changes in the HTML files are to bring the locale bundles up to the
first position, since they no longer have any dependencies, and we need
to be 100% sure they're loaded before discourse-i18n.

Tests are updated for the new bundle format, and the most complex ones
have been converted to system specs, so that we no longer need to create
a mock environment for executing messageformat/discourse-i18n/etc.

`lib/deprecated` changes (and associated pretty-text changes) are to
make the dependencies more formalized, because `require()` is subject to
race conditions, which started being hit following the locale refactor.

---------

Co-authored-by: Jarek Radosz <jradosz@gmail.com>
2026-01-16 11:45:14 +00:00
Loïc Guitaut caaa8f9c9e FIX: Don't escape HTML entities twice in oneboxes (#37141)
Sometimes, HTML entities can be escaped twice, typically when getting
sanitized data from our `Onebox::OpenGraph` class then providing that
value to a template. We’re using the Mustache gem to process the Onebox
templates, and it will automatically escape HTML entities. This is
usually not a problem, but it is for things like ampersands. For
example, if the value we provide to the template is `&amp;`, then
Mustache will convert it to `&amp;amp;`.

This patch fixes that behavior by decoding the result of the sanitization
we apply in `Onebox::OpenGraph`. That way, templates will get `&`
instead of `&amp;`, thus there won’t be any double escaping.
2026-01-16 11:40:18 +01:00
Discourse Translator Bot 9027f71e88 I18N: Update translations (#37167) 2026-01-16 10:37:38 +01:00
Martin Brennan fe6dd5ed53 FIX: Unfollow not leave DM/group DM channels in chat sidebar menu (#37165)
Followup fc98ce9a72

When we added the "Leave channel" option to the chat sidebar
context menu, for DM and group DM channels we mistakenly
used the leaveChannel API call instead of unfollowChannel.

unfollowChannel is non-destructive and simply removes
the channel from the user's sidebar, while leaveChannel
is destructive and removes the user from the channel, which
makes it impossible to find group channels again.

c.f.
https://meta.discourse.org/t/access-common-chat-channel-actions-from-the-sidebar-context-menu/392667
2026-01-16 10:07:17 +01:00
Martin Brennan 8b9fb4e69f FIX: Add op_like_count to suggested topics serializer (#37164)
This will allow themes and components to display this in a column for a
topic list.

See internal /t/171672
2026-01-16 11:20:51 +03:00
SamandRégis Hanol c395827f23 FIX: certain edge cases could leave phantom drafts behind (#37130)
This corrects it so on edit/create we ALWAYS junk old drafts and never
return old drafts to the client

---------

Co-authored-by: Régis Hanol <regis@hanol.fr>
2026-01-16 13:17:18 +11:00
Martin Brennan a48ab0ff24 FEATURE: Add impact role dropdown filter for upcoming changes page (#37128)
We had impact type before but not impact role, which is nice to
get a good idea of which user types will be affected by upcoming
changes.
2026-01-16 11:43:59 +10:00
Jordan Vidrine e68e4b3ae1 UX: Do not remove top border on hover (#37147) 2026-01-15 18:33:14 -06:00
Sam 165e13af62 FEATURE: triage using tool directly (#37136)
Previously to triage with an ai tool you would need to first call a
persona
this could be inefficient since the persona would issue a call to the
llm
just to trigger the tool

This new automation bypasses that

also

- Adds the ability to set custom fields in the API
- Live refresh UI when setting tags
2026-01-16 09:41:30 +11:00
Michael Brown e935afbb62 DEV: always load the excon gem
We ran into trouble with MethodProfiler referencing excon without having loaded
it as it was relying on an initialiser to load it and depending on the side
effect.

If the excon gem is going to be loaded anyways, it doesn't make sense to have
it not loaded by default; this will be more robust.
2026-01-15 17:13:11 -05:00
Sam 9aba90b9a9 FIX: allow users with normalized emails to change emails and remove + / . (#37133)
Allows users to change normalized email from 

a.b+1@gmail.com to ab@gmail.com
2026-01-16 07:36:58 +11:00
Michael Brown e655798b3b FIX: method_profiler must require excon (#37152)
excon is `require: false`, so we must explicitly require it before
referring to it
2026-01-15 15:19:36 -05:00
Michael Brown a5a083911a DEV: use minimally necessary encoding in html_reply.eml fixture
With the change to Email::Cleaner:

* FIX: Email::Cleaner must clear the encoding of replaced bodies

the `incoming_emails:truncate_long` task will cause the encoding on replaced
records to change to the minimally-necessary encoding, causing a failure in
`tasks/incoming_emails_spec:14`.

quoted-printable is not necessary for the content, 7bit is enough.
2026-01-15 13:05:25 -05:00
Michael Brown 371eff1f66 FIX: Email::Cleaner must clear the encoding of replaced bodies
If this is *not* done, then the decoded body will already be considered to be
encoded, e.g.:

```
pry(main)> puts part
Content-Type: text/html;
 charset=utf-8
Content-Transfer-Encoding: base64

PGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5Pjxicj48YnI+PGRpdiBjbGFzcz0i
cHJvdG9ubWFpbF9zaWduYXR1cmVfYmxvY2stdXNlciI+PC9kaXY+PGJyPjxi
cj5TZW50IGZyb20gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8v
cHJvdG9uLm1lL21haWwvaG9tZSIgcmVsPSJub3JlZmVycmVyIj5Qcm90b24g
TWFpbDwvYT4gZm9yIEFuZHJvaWQuPC9ib2R5PjwvaHRtbD4=

pry(main)> part.body = part.body.decoded
=> "<html><head></head><body><br><br><div class=\"protonmail_signature_block-user\"></div><br><br>Sent from <a target=\"_blank\" href=\"https://proton.me/mail/home\" rel=\"noreferrer\">Proton Mail</a> for Android.</body></html>"

pry(main)> puts part
Content-Type: text/html;
 charset=utf-8
Content-Transfer-Encoding: base64

htmlhead/headbodybrbrdivclassprotonmailsignatureblockuser/di
vbrbrSentfromatargetblankhrefhttps//protonme/mail/homerelnor
eferrerProtonMail/aforAndroid/body/htmk=
```

Clearing the CTE indicates to the Mail gem that the content needs to be encoded
if necessary.
2026-01-15 13:05:25 -05:00
Michael Brown 4b4836f8f1 FIX: Email::Cleaner must tell Mail to not sort body parts on serialisation
The Mail gem sorts MIME parts by content type on serialisation. The default
sort can lead to post-script content incorrectly appearing at the top after
sort.

A concrete example found in the wild is:

* multipart/signed
  * text/plain (actual content)
  * application/pgp-signature
* text/plain (mailing list footer)

After reordering it looks like:

* text/plain (mailing list footer)
* multipart/signed
  * text/plain (actual content)
  * application/pgp-signature

which causes the Mail gem to detect the mailing list footer as the main content
of the message, which is incorrect.
2026-01-15 13:05:25 -05:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> f9a527812a DEPS: Bump rouge from 4.6.1 to 4.7.0 (#37120)
Bumps [rouge](https://github.com/rouge-ruby/rouge) from 4.6.1 to 4.7.0.
- [Release notes](https://github.com/rouge-ruby/rouge/releases)
-
[Changelog](https://github.com/rouge-ruby/rouge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rouge-ruby/rouge/compare/v4.6.1...v4.7.0)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-15 18:37:54 +01:00
Kris 6b239632fd FIX: fixed position for skip links container (#37150)
Removed this positioning in
https://github.com/discourse/discourse/pull/37066, but the container can
get in the way of themes using a grid layout. Fixed positioning here
ensures the container doesn't impact grid flow.
2026-01-15 12:01:28 -05:00
Penar Musaraj 3d577461f8 UX: Show message in page when no new features are found (#37149)
Previously, this was triggering a generic dialog error.

t/158243
2026-01-15 11:49:24 -05:00
Kris 987328a21d FIX: use translation to fix flaky color palette spec (#37148)
This was failing sometimes when locales were different because `Light
(default)` is translated... so while we were always checking for `Light
(default)`... sometimes it was `ライト (デフォルト)` or `Clair (par défaut)`
2026-01-15 11:40:17 -05:00
Jordan Vidrine 1676659dfa UX: sidebar refinement of spacing & color (#37124) 2026-01-15 08:39:30 -06:00
David Taylor 6b2344a8d4 Revert "DEV: Configure pnpm builtDependencies (#37142)" (#37146) 2026-01-15 13:36:14 +00:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1e871640da Build(deps-dev): Bump crack from 1.0.0 to 1.0.1 (#35556)
Bumps [crack](https://github.com/jnunemaker/crack) from 1.0.0 to 1.0.1.
- [Changelog](https://github.com/jnunemaker/crack/blob/master/History)
- [Commits](https://github.com/jnunemaker/crack/compare/v1.0.0...v1.0.1)

> **Note**
> Automatic rebases have been disabled on this pull request as it has
been open for over 30 days.

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-15 13:43:53 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 894a59d45b Build(deps): Bump rexml from 3.4.2 to 3.4.4 (#34781)
Bumps [rexml](https://github.com/ruby/rexml) from 3.4.2 to 3.4.4.
- [Release notes](https://github.com/ruby/rexml/releases)
- [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md)
- [Commits](https://github.com/ruby/rexml/compare/v3.4.2...v3.4.4)

> **Note**
> Automatic rebases have been disabled on this pull request as it has
been open for over 30 days.

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-15 13:43:16 +01:00
dependabot[bot]dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Joffrey JAFFEUX
95b2c8dc61 Build(deps): Bump excon from 1.2.5 to 1.3.2 (#36433)
Bumps [excon](https://github.com/excon/excon) from 1.2.5 to 1.3.2.
- [Changelog](https://github.com/excon/excon/blob/master/changelog.txt)
- [Commits](https://github.com/excon/excon/compare/v1.2.5...v1.3.2)

Mutating omit_default_port in the initializer was causing an error as
the object is now frozen. Moreover, the default has been changed now and
it's true:
https://github.com/excon/excon/blob/d8360775752dc048010cef05ebe02dfcca7bb694/lib/excon/constants.rb#L169
so this code was not needed anymore, same for the code in
lib/discourse_hub.rb


> **Note**
> Automatic rebases have been disabled on this pull request as it has
been open for over 30 days.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Joffrey JAFFEUX <j.jaffeux@gmail.com>
2026-01-15 13:41:31 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 0322b5fcd9 DEPS: Bump @jsquash/resize from 2.1.0 to 2.1.1 (#37092)
Bumps @jsquash/resize from 2.1.0 to 2.1.1.

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-15 13:37:28 +01:00
Jarek Radosz 4394f5c17f DEV: Revert unintentional rb deps updates (#37144)
Partially reverts 075c02380e.

The major bump of connection_pool to 3.x was causing issues locally
(under certain conditions)
2026-01-15 13:27:31 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> dbe27b70cc DEPS: Bump diff from 8.0.2 to 8.0.3 (#37138)
Bumps [diff](https://github.com/kpdecker/jsdiff) from 8.0.2 to 8.0.3.
-
[Changelog](https://github.com/kpdecker/jsdiff/blob/master/release-notes.md)
- [Commits](https://github.com/kpdecker/jsdiff/compare/v8.0.2...v8.0.3)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-15 13:05:32 +01:00
David Taylor c7420d241e DEV: Silence pnpm deprecated subdependencies (#37143) 2026-01-15 11:32:41 +00:00
David Taylor 45d69da8ab DEV: Configure pnpm builtDependencies (#37142) 2026-01-15 11:32:30 +00:00
Joffrey JAFFEUX 217f538ffd FIX: prevents error if retriggered_after is not set (#37140)
This fix this current exception:

```
Job exception: undefined method `match' for nil

iso8601-0.13.0/lib/iso8601/duration.rb:225:in `parse'
iso8601-0.13.0/lib/iso8601/duration.rb:197:in `atomize'
iso8601-0.13.0/lib/iso8601/duration.rb:32:in `initialize'
/var/www/discourse/plugins/automation/app/jobs/scheduled/discourse_automation/stalled_wiki_tracker.rb:29:in `new'
/var/www/discourse/plugins/automation/app/jobs/scheduled/discourse_automation/stalled_wiki_tracker.rb:29:in `block (2 levels) in execute'
```
2026-01-15 12:19:19 +01:00
Discourse Translator Bot dd338e5b3b I18N: Update translations (#37137) 2026-01-15 09:10:23 +01:00
dependabot[bot]dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Joffrey JAFFEUX
8db8a413c2 DEPS: Bump make-plural from 7.4.0 to 8.1.0 (#36965)
Bumps
[make-plural](https://github.com/eemeli/make-plural/tree/HEAD/packages/plurals)
from 7.4.0 to 8.1.0.
- [Release notes](https://github.com/eemeli/make-plural/releases)
-
[Changelog](https://github.com/eemeli/make-plural/blob/main/packages/plurals/CHANGELOG.md)
-
[Commits](https://github.com/eemeli/make-plural/commits/make-plural@8.1.0/packages/plurals)

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Joffrey JAFFEUX <j.jaffeux@gmail.com>
2026-01-15 09:07:58 +01:00
David Battersby fb2a2c02f1 FIX: skip image dimensions in oembed for rich data types (#37108)
Prevents taking the dimensions from oEmbed when using rich data.

It also makes a small change to how embedded html in
`AllowlistedGenericOnebox` works, previously it would not render when
the height value was not present. I have made the height value optional,
which should be fine since the default dimensions set by the browser
(typically 150 pixels high) will be used as a fallback.
2026-01-15 11:45:53 +04:00
Alan Guo Xiang Tan 35f660e3a1 DEV: Remove unused transition_to and transition_to_id from reviewable serializer (#37135)
What is the problem?

The `ReviewablePerformResultSerializer` includes `transition_to` and
`transition_to_id` attributes in API responses, but these values are
not consumed by any frontend code. The frontend only uses
`remove_reviewable_ids`, `reviewable_count`, `unseen_reviewable_count`,
and `completed_message` from the perform result.

What is the solution?

Remove the unused `transition_to` and `transition_to_id` attributes
from `ReviewablePerformResultSerializer`, along with the
`transition_to_id` method. Update corresponding test expectations.
2026-01-15 15:04:53 +08:00
Alan Guo Xiang Tan 63ca5673df FIX: Filter orphaned TopicLinks and normalize http URLs to https (#37098)
What is the problem?

`TopicLink` records can reference deleted topics or posts. When a topic
or the target post being linked to is deleted, these orphaned links
continue to appear in topic maps and post link counts.

Note that `TopicLink` records are already deleted when the source post
containing the link is trashed (see `Post#trash!`), so we only need to
filter for deleted target topics/posts.

Additionally, internal links stored with http:// are not normalized to
https:// when `force_https` site setting is enabled.

---

What is the solution?

Extend filtering in `TopicLink.topic_map` and `TopicLink.counts_for` to
exclude links where the target topic or target post is deleted. Extract
common visibility filters into `TopicLink.apply_link_visibility_filters`
helper method.

Normalize internal http:// URLs to https:// in `TopicLinkSerializer#url`
when `force_https` is enabled.
2026-01-15 12:12:34 +08:00
Sam dba73b3349 FEATURE: new unified discourse.editTopic API for custom tools (#37129)
This supports

1. Setting tags
2. Setting category
3. Setting visibility

Eg:

```javascript
discourse.editTopic(123, {
  category: "bug",
  tags: ["a","b"],
  visible: false
})
```
2026-01-15 14:49:01 +11:00
Alan Guo Xiang Tan 3324fe4fef FIX: ensure remove_reviewable_ids is always an array (#37131)
What is the problem?

The review queue throws a JavaScript error when processing MessageBus
updates:

```
MESSAGE BUS FAIL: callback /reviewable_action caused exception
TypeError: Cannot read properties of undefined (reading 'includes')
```

The bug flow is:

1. `Reviewable::PerformResult#initialize` only sets
`@remove_reviewable_ids`
   when `success?` is true, leaving it nil otherwise
2. `ReviewablePerformResultSerializer` serializes nil as JSON null
3. MessageBus publishes this to `/reviewable_action` channel
4. The JS `_updateStatus` callback in `ReviewableItem` receives data
with
   `remove_reviewable_ids` as null/undefined
5. Calling `.includes()` on null throws TypeError

What is the solution?

Always initialize `@remove_reviewable_ids` as an array in
`Reviewable::PerformResult#initialize` (empty for failures, containing
the reviewable id for successes). Also add defensive optional chaining
in the JS `ReviewableItem#_updateStatus` callback and update the truthy
check in `ReviewableItem#_performResult` to verify array length since
`[]` is truthy in JavaScript.
2026-01-15 10:35:59 +08:00
Alan Guo Xiang Tan 5dbd4a2f80 DEV: Add system tests for category calendar color mapping (#37094)
What is the problem?

The category calendar component supports color mapping for events
based on tags and categories via the `map_events_to_color` site
setting, but there were no system tests to verify this functionality.

What is the solution?

Add system tests that verify events display with the correct
border color when tag or category color mappings are configured.
2026-01-15 09:16:18 +08:00
Kris 313849409e UX: update review queue heading for rejected topics (#37117)
When a queued topic is rejected we still show the ability to approve it.
This case slipped through in the action language changes within
https://github.com/discourse/discourse/commit/fd8f5a9ceb238c09a154b3ae3bcce52c4891a599,
included a new spec to avoid regressions.

There was also a redundant check for the pending status in the template,
which is already present `displayContextQuestion`:
https://github.com/discourse/discourse/blob/d51cb07f505130c27f6a4d69b86ce6c3896d4e20/frontend/discourse/app/components/reviewable-refresh/item.gjs#L175-L176

Before:
<img width="2166" height="388" alt="image"
src="https://github.com/user-attachments/assets/7520416a-918b-4f7a-8199-358d5a97a0fe"
/>


After: 
<img width="2166" height="322" alt="image"
src="https://github.com/user-attachments/assets/c1649907-a88f-400f-ac7b-53209c63e2be"
/>
2026-01-14 14:14:38 -05:00
Rafael dos Santos Silva 075c02380e DEV: Update discourse_ai-tokenizers to 0.4 (#37113)
Updates discourse_ai-tokenizers gem from 0.3.2 to 0.4 for Ruby 4
compatibility
2026-01-14 15:18:34 -03:00
chapoi c47b2885b2 UX: scope css vars to HCTC component (#37116) 2026-01-14 18:56:53 +01:00
Kris b117a89410 UX: set default dimensions on SVG icons (#37115)
This sets width and height attributes for our SVG icons. This helps
avoid a flash of unstyled SVG icons, which makes them appear gigantic in
some situations (live reload in dev environments may be the most
obvious).

The width/height here will be overridden by existing CSS, because inline
presentation attributes have lower priority than other CSS.

We already set the same `1em` width/height on `.svg-icon` in our
`svg.scss` file... so there shouldn't be any significant impact beyond
making some loading situations more pleasant!

Some reference on this situation:
https://www.sarasoueidan.com/blog/svg-style-inheritance-and-fousvg/

Before:

<img width="1364" height="1422" alt="image"
src="https://github.com/user-attachments/assets/023e8a9b-718f-425e-8e76-eff07e91389b"
/>



After:

<img width="1320" height="1360" alt="image"
src="https://github.com/user-attachments/assets/4754b092-c62c-4fd3-bde9-c952b6020d2b"
/>
2026-01-14 12:47:39 -05:00
dependabot[bot]dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Joffrey JAFFEUX
91ef4f05c6 Build(deps): Bump jspreadsheet-ce from 4.15.0 to 5.0.4 (#32871)
Bumps [jspreadsheet-ce](https://github.com/jspreadsheet/ce) from 4.15.0
to 5.0.4.
- [Release notes](https://github.com/jspreadsheet/ce/releases)
- [Commits](https://github.com/jspreadsheet/ce/commits)

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Joffrey JAFFEUX <j.jaffeux@gmail.com>
2026-01-14 18:28:15 +01:00
Rafael dos Santos Silva f1da71e7b1 FIX: handle embedding API failures gracefully in semantic search (#37112)
When the embedding API fails (e.g., OpenAI quota exceeded), the error
was bubbling up as a 500 to end users.

This catches `Net::HTTPBadResponse` in both `search` and `quick_search`
actions, logs the error, and returns empty results instead.
2026-01-14 14:04:41 -03:00
Jordan Vidrine 3eadc02d6e FIX: reactions z-index fix (#37038) 2026-01-14 11:03:19 -06:00