Странный баг с discourse-assign

У нас на форуме есть случайная тема, которая каким-то образом стала невидимой. Удаление и восстановление темы через API не помогло. Похоже, что проблема вызвана плагином discourse-assign, из-за чего тема не загружается; при отключении JS-скриптов плагинов в безопасном режиме всё работает нормально.

Ссылку на эту проблемную публикацию можно найти здесь:

Ниже приведён стек вызовов для одной из ошибок, возникающих при открытии темы:

Cannot read properties of undefined (reading 'includes')
at n.<anonymous> (https://amcforum.wiki/assets/plugins/discourse-assign-e7635afd56f3ebe38bb2866d6121e1e726de50fbfc472646a6e738a3d44b3930.js:208:1008)
at https://amcforum.wiki/assets/discourse-12f38708c935010f61959d1ee5b74a9770c91ed393b88e3a7a5fe0a3de467a89.js:9931:74
at Array.forEach (<anonymous>)
at n.buildClasses (https://amcforum.wiki/assets/discourse-12f38708c935010f61959d1ee5b74a9770c91ed393b88e3a7a5fe0a3de467a89.js:9931:51)
at n.draw (https://amcforum.wiki/assets/discourse-12f38708c935010f61959d1ee5b74a9770c91ed393b88e3a7a5fe0a3de467a89.js:10348:34)
at n.render (https://amcforum.wiki/assets/discourse-12f38708c935010f61959d1ee5b74a9770c91ed393b88e3a7a5fe0a3de467a89.js:10324:54)
at a (https://amcforum.wiki/assets/chunk.660.cfa44cc656d26c5d04fa-3aa2531cc98e968234ee473ed8fc2ef14895f4ba22e888d7d542e7d3620f8056.js:331:20)
at e.exports (https://amcforum.wiki/assets/chunk.660.cfa44cc656d26c5d04fa-3aa2531cc98e968234ee473ed8fc2ef14895f4ba22e888d7d542e7d3620f8056.js:333:34)
at e (https://amcforum.wiki/assets/chunk.660.cfa44cc656d26c5d04fa-3aa2531cc98e968234ee473ed8fc2ef14895f4ba22e888d7d542e7d3620f8056.js:337:6)
at Object.e [as render] (https://amcforum.wiki/assets/chunk.660.cfa44cc656d26c5d04fa-3aa2531cc98e968234ee473ed8fc2ef14895f4ba22e888d7d542e7d3620f8056.js:342:48)
at https://amcforum.wiki/assets/chunk.660.cfa44cc656d26c5d04fa-3aa2531cc98e968234ee473ed8fc2ef14895f4ba22e888d7d542e7d3620f8056.js:976:62
at e.exports (https://amcforum.wiki/assets/chunk.660.cfa44cc656d26c5d04fa-3aa2531cc98e968234ee473ed8fc2ef14895f4ba22e888d7d542e7d3620f8056.js:977:40)
at u (https://amcforum.wiki/assets/chunk.660.cfa44cc656d26c5d04fa-3aa2531cc98e968234ee473ed8fc2ef14895f4ba22e888d7d542e7d3620f8056.js:952:8)
at Object.l [as patch] (https://amcforum.wiki/assets/chunk.660.cfa44cc656d26c5d04fa-3aa2531cc98e968234ee473ed8fc2ef14895f4ba22e888d7d542e7d3620f8056.js:949:3)
at e.exports (https://amcforum.wiki/assets/chunk.660.cfa44cc656d26c5d04fa-3aa2531cc98e968234ee473ed8fc2ef14895f4ba22e888d7d542e7d3620f8056.js:981:29)
at u (https://amcforum.wiki/assets/chunk.660.cfa44cc656d26c5d04fa-3aa2531cc98e968234ee473ed8fc2ef14895f4ba22e888d7d542e7d3620f8056.js:952:8)
at Object.l [as patch] (https://amcforum.wiki/assets/chunk.660.cfa44cc656d26c5d04fa-3aa2531cc98e968234ee473ed8fc2ef14895f4ba22e888d7d542e7d3620f8056.js:949:3)
at e (https://amcforum.wiki/assets/chunk.660.cfa44cc656d26c5d04fa-3aa2531cc98e968234ee473ed8fc2ef14895f4ba22e888d7d542e7d3620f8056.js:953:114)
at e.rerenderWidget (https://amcforum.wiki/assets/discourse-12f38708c935010f61959d1ee5b74a9770c91ed393b88e3a7a5fe0a3de467a89.js:1844:163)
at p.invoke (https://amcforum.wiki/assets/vendor-d19c5d3106737be843b2f1f98da81f661a0e985585b4a1fd14cab77cbfa60e37.js:4339:182)
at p.flush (https://amcforum.wiki/assets/vendor-d19c5d3106737be843b2f1f98da81f661a0e985585b4a1fd14cab77cbfa60e37.js:4331:141)
at h.flush (https://amcforum.wiki/assets/vendor-d19c5d3106737be843b2f1f98da81f661a0e985585b4a1fd14cab77cbfa60e37.js:4346:207)
at q._end (https://amcforum.wiki/assets/vendor-d19c5d3106737be843b2f1f98da81f661a0e985585b4a1fd14cab77cbfa60e37.js:4410:9)
at _boundAutorunEnd (https://amcforum.wiki/assets/vendor-d19c5d3106737be843b2f1f98da81f661a0e985585b4a1fd14cab77cbfa60e37.js:4358:595)
3 лайка

Да, в консоли здесь отображаются ошибки.

3 лайка

Это небольшое действие без кода действия!

Вы можете исправить это через консоль: войдите в контейнер, найдите небольшие действия по теме — одно из них не имеет кода действия.

Нам, вероятно, стоит добавить проверку SQL, чтобы сделать такое невозможным.

3 лайка

Я думаю, что их можно создать через API (у нас есть компонент темы, который создаёт один из них). Придётся ли нам вручную запускать какую-то миграцию базы данных?

1 лайк

Вот пример другого, созданного с использованием нашего компонента темы:

1 лайк

Похоже, что в 25 различных темах есть сообщения, вызывающие сбои в discourse-assign, согласно результатам этого SQL-запроса (использующего Data Explorer):

SELECT id topic_id FROM topics topic WHERE topic.id IN (SELECT topic_id FROM posts WHERE post_type = 3 AND action_code IS NULL)
2 лайка

GPT-бот на помощь…

2 лайка

Если это проверка, то почему бы просто не добавить !!post.actionCode в блок if?

1 лайк

Наконец-то добрался до этого и отправил запрос на изменение:
https://github.com/discourse/discourse-assign/pull/509

3 лайка