Category Icons TC not working after upgrade to 3.5.0.beta5, additional issues with recent event/chat integration

AI-generated summary

After upgrading to Discourse 3.5.0.beta5, several theme components (TCs) like Category Icons and Category Badge Styles are not working. The only logged error is a deprecation warning about the parts property in DiscourseJsProcessor. A related issue in the developer console shows a missing module discourse/plugins/chat/discourse/components/channel-title, which is linked to the discourse-calendar plugin. The user also reports that the Chat plugin cannot be disabled, even though it appears enabled, and a banner related to chat integration is visible. ondrej notes that Category Icons TC is deprecated and suggests using the core category emoji/icons feature instead. md-misko confirms all TCs are updated, and disabling Category Icons resolves other issues, but the Chat plugin remains problematic.

After upgrade most of the installed TCs are not working any more, below is a list of some:

  • Category Badge Styles
  • Category Icons
  • Colorful Categories
  • Discourse Buttons
  • Discourse Category Banners
  • Discourse Clickable Topic
  • Discourse Mermaid
  • …

The only error in logs (some 300 of them altogether) after upgrade is

Message (164 copies reported)

[DiscourseJsProcessor] DEPRECATION: The parts property on path nodes is deprecated, use head and tail instead

Backtrace

activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:130:in `block in warn'
activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `block in dispatch'
activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `each'
activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `dispatch'
activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:130:in `warn'
/var/www/discourse/lib/discourse_js_processor.rb:50:in `block in create_new_context'
/var/www/discourse/lib/discourse_js_processor.rb:89:in `call'
/var/www/discourse/lib/discourse_js_processor.rb:89:in `block in v8_call'
/var/www/discourse/lib/discourse_js_processor.rb:88:in `synchronize'
/var/www/discourse/lib/discourse_js_processor.rb:88:in `v8_call'
/var/www/discourse/lib/discourse_js_processor.rb:113:in `perform'
/var/www/discourse/lib/discourse_js_processor.rb:11:in `transpile'
/var/www/discourse/lib/theme_javascript_compiler.rb:191:in `append_ember_template'
/var/www/discourse/lib/theme_javascript_compiler.rb:170:in `block in append_tree'
/var/www/discourse/lib/theme_javascript_compiler.rb:164:in `each_pair'
/var/www/discourse/lib/theme_javascript_compiler.rb:164:in `append_tree'
/var/www/discourse/app/models/theme.rb:189:in `update_javascript_cache!'
activerecord-7.2.2.1/lib/active_record/relation/delegation.rb:98:in `each'
activerecord-7.2.2.1/lib/active_record/relation/delegation.rb:98:in `each'
/var/www/discourse/app/models/theme.rb:502:in `block (2 levels) in resolve_baked_field'
activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/transaction.rb:616:in `block in within_new_transaction'
activesupport-7.2.2.1/lib/active_support/concurrency/null_lock.rb:9:in `synchronize'
activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/transaction.rb:613:in `within_new_transaction'
activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/database_statements.rb:361:in `transaction'
activerecord-7.2.2.1/lib/active_record/transactions.rb:234:in `block in transaction'
activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:415:in `with_connection'
activerecord-7.2.2.1/lib/active_record/connection_handling.rb:296:in `with_connection'
activerecord-7.2.2.1/lib/active_record/transactions.rb:233:in `transaction'
/var/www/discourse/app/models/theme.rb:499:in `block in resolve_baked_field'
/var/www/discourse/lib/distributed_cache.rb:20:in `defer_get_set'
/var/www/discourse/app/models/theme.rb:233:in `get_set_cache'
/var/www/discourse/app/models/theme.rb:492:in `resolve_baked_field'
/var/www/discourse/app/models/theme.rb:402:in `lookup_field'
/var/www/discourse/app/helpers/application_helper.rb:631:in `theme_js_lookup'
/var/www/discourse/app/views/layouts/application.html.erb:56:in `_app_views_layouts_application_html_erb__1837954949798113264_245520'
actionview-7.2.2.1/lib/action_view/base.rb:281:in `public_send'
actionview-7.2.2.1/lib/action_view/base.rb:281:in `_run'
actionview-7.2.2.1/lib/action_view/template.rb:285:in `block in render'
activesupport-7.2.2.1/lib/active_support/notifications.rb:212:in `instrument'
actionview-7.2.2.1/lib/action_view/template.rb:584:in `instrument_render_template'
actionview-7.2.2.1/lib/action_view/template.rb:273:in `render'
rack-mini-profiler-3.3.1/lib/mini_profiler/profiling_methods.rb:89:in `block in profile_method'
actionview-7.2.2.1/lib/action_view/renderer/template_renderer.rb:77:in `block in render_with_layout'
activesupport-7.2.2.1/lib/active_support/notifications.rb:210:in `block in instrument'
activesupport-7.2.2.1/lib/active_support/notifications/instrumenter.rb:58:in `instrument'
activesupport-7.2.2.1/lib/active_support/notifications.rb:210:in `instrument'
actionview-7.2.2.1/lib/action_view/renderer/template_renderer.rb:75:in `render_with_layout'
actionview-7.2.2.1/lib/action_view/renderer/template_renderer.rb:59:in `render_template'
actionview-7.2.2.1/lib/action_view/renderer/template_renderer.rb:11:in `render'
actionview-7.2.2.1/lib/action_view/renderer/renderer.rb:58:in `render_template_to_object'
actionview-7.2.2.1/lib/action_view/renderer/renderer.rb:31:in `render_to_object'
actionview-7.2.2.1/lib/action_view/rendering.rb:135:in `block in _render_template'
actionview-7.2.2.1/lib/action_view/base.rb:308:in `in_rendering_context'
actionview-7.2.2.1/lib/action_view/rendering.rb:134:in `_render_template'
actionpack-7.2.2.1/lib/action_controller/metal/streaming.rb:258:in `_render_template'
actionview-7.2.2.1/lib/action_view/rendering.rb:121:in `render_to_body'
actionpack-7.2.2.1/lib/action_controller/metal/rendering.rb:186:in `render_to_body'
actionpack-7.2.2.1/lib/action_controller/metal/renderers.rb:142:in `render_to_body'
actionpack-7.2.2.1/lib/abstract_controller/rendering.rb:29:in `render'
actionpack-7.2.2.1/lib/action_controller/metal/rendering.rb:167:in `render'
actionpack-7.2.2.1/lib/action_controller/metal/instrumentation.rb:32:in `block (2 levels) in render'
benchmark-0.4.0/lib/benchmark.rb:323:in `realtime'
activesupport-7.2.2.1/lib/active_support/core_ext/benchmark.rb:14:in `ms'
actionpack-7.2.2.1/lib/action_controller/metal/instrumentation.rb:32:in `block in render'
actionpack-7.2.2.1/lib/action_controller/metal/instrumentation.rb:101:in `cleanup_view_runtime'
activerecord-7.2.2.1/lib/active_record/railties/controller_runtime.rb:46:in `cleanup_view_runtime'
actionpack-7.2.2.1/lib/action_controller/metal/instrumentation.rb:31:in `render'
/var/www/discourse/app/controllers/application_controller.rb:134:in `block (2 levels) in <class:ApplicationController>'
/var/www/discourse/app/controllers/application_controller.rb:428:in `block in with_resolved_locale'
i18n-1.14.7/lib/i18n.rb:353:in `with_locale'
/var/www/discourse/app/controllers/application_controller.rb:428:in `with_resolved_locale'
/var/www/discourse/app/controllers/application_controller.rb:134:in `block in <class:ApplicationController>'
activesupport-7.2.2.1/lib/active_support/rescuable.rb:116:in `instance_exec'
activesupport-7.2.2.1/lib/active_support/rescuable.rb:116:in `block in handler_for_rescue'
activesupport-7.2.2.1/lib/active_support/rescuable.rb:94:in `rescue_with_handler'
activesupport-7.2.2.1/lib/active_support/rescuable.rb:167:in `rescue_with_handler'
actionpack-7.2.2.1/lib/action_controller/metal/rescue.rb:30:in `rescue in process_action'
actionpack-7.2.2.1/lib/action_controller/metal/rescue.rb:26:in `process_action'
actionpack-7.2.2.1/lib/action_controller/metal/instrumentation.rb:77:in `block in process_action'
activesupport-7.2.2.1/lib/active_support/notifications.rb:210:in `block in instrument'
activesupport-7.2.2.1/lib/active_support/notifications/instrumenter.rb:58:in `instrument'
activesupport-7.2.2.1/lib/active_support/notifications.rb:210:in `instrument'
actionpack-7.2.2.1/lib/action_controller/metal/instrumentation.rb:76:in `process_action'
actionpack-7.2.2.1/lib/action_controller/metal/params_wrapper.rb:259:in `process_action'
activerecord-7.2.2.1/lib/active_record/railties/controller_runtime.rb:39:in `process_action'
actionpack-7.2.2.1/lib/abstract_controller/base.rb:163:in `process'
actionview-7.2.2.1/lib/action_view/rendering.rb:40:in `process'
rack-mini-profiler-3.3.1/lib/mini_profiler/profiling_methods.rb:89:in `block in profile_method'
actionpack-7.2.2.1/lib/action_controller/metal.rb:252:in `dispatch'
actionpack-7.2.2.1/lib/action_controller/metal.rb:335:in `dispatch'
actionpack-7.2.2.1/lib/action_dispatch/routing/route_set.rb:67:in `dispatch'
actionpack-7.2.2.1/lib/action_dispatch/routing/route_set.rb:50:in `serve'
actionpack-7.2.2.1/lib/action_dispatch/routing/mapper.rb:32:in `block in <class:Constraints>'
actionpack-7.2.2.1/lib/action_dispatch/routing/mapper.rb:62:in `serve'
actionpack-7.2.2.1/lib/action_dispatch/journey/router.rb:53:in `block in serve'
actionpack-7.2.2.1/lib/action_dispatch/journey/router.rb:133:in `block in find_routes'
actionpack-7.2.2.1/lib/action_dispatch/journey/router.rb:126:in `each'
actionpack-7.2.2.1/lib/action_dispatch/journey/router.rb:126:in `find_routes'
actionpack-7.2.2.1/lib/action_dispatch/journey/router.rb:34:in `serve'
actionpack-7.2.2.1/lib/action_dispatch/routing/route_set.rb:896:in `call'
/var/www/discourse/lib/middleware/omniauth_bypass_middleware.rb:35:in `call'
rack-2.2.13/lib/rack/tempfile_reaper.rb:15:in `call'
rack-2.2.13/lib/rack/conditional_get.rb:27:in `call'
rack-2.2.13/lib/rack/head.rb:12:in `call'
actionpack-7.2.2.1/lib/action_dispatch/http/permissions_policy.rb:38:in `call'
/var/www/discourse/lib/content_security_policy/middleware.rb:12:in `call'
/var/www/discourse/lib/middleware/anonymous_cache.rb:415:in `call'
/var/www/discourse/lib/middleware/csp_script_nonce_injector.rb:12:in `call'
/var/www/discourse/config/initializers/008-rack-cors.rb:14:in `call'
rack-2.2.13/lib/rack/session/abstract/id.rb:266:in `context'
rack-2.2.13/lib/rack/session/abstract/id.rb:260:in `call'
actionpack-7.2.2.1/lib/action_dispatch/middleware/cookies.rb:704:in `call'
actionpack-7.2.2.1/lib/action_dispatch/middleware/callbacks.rb:31:in `block in call'
activesupport-7.2.2.1/lib/active_support/callbacks.rb:101:in `run_callbacks'
actionpack-7.2.2.1/lib/action_dispatch/middleware/callbacks.rb:30:in `call'
actionpack-7.2.2.1/lib/action_dispatch/middleware/debug_exceptions.rb:31:in `call'
actionpack-7.2.2.1/lib/action_dispatch/middleware/show_exceptions.rb:32:in `call'
logster-2.20.1/lib/logster/middleware/reporter.rb:40:in `call'
/var/www/discourse/lib/middleware/default_headers.rb:13:in `call'
railties-7.2.2.1/lib/rails/rack/logger.rb:41:in `call_app'
railties-7.2.2.1/lib/rails/rack/logger

Env

Have you checked whether updates are available for them?

Updates for TCs are automatically installed at rebuild, and yes, all are at latest version.

There is one other error in the developer console, which seems related to the recent event/chat integration:

backup-codes.js:33 ℹ️ Discourse v3.5.0.beta6-dev — https://github.com/discourse/discourse/commits/89d5cca2af — Ember v5.12.0
backup-codes.js:33 Uncaught Error: Could not find module `discourse/plugins/chat/discourse/components/channel-title` imported from `discourse/plugins/discourse-calendar/discourse/components/discourse-post-event/chat-channel`
    at loader.js:247:1
    at a (loader.js:258:1)
    at s.findDeps (loader.js:168:1)
    at a (loader.js:262:1)
    at s.findDeps (loader.js:168:1)
    at a (loader.js:262:1)
    at s.findDeps (loader.js:168:1)
    at a (loader.js:262:1)
    at s.findDeps (loader.js:168:1)
    at a (loader.js:262:1)
    at requireModule (loader.js:24:1)
    at y (backup-codes.js:33:1)
    at b (backup-codes.js:33:1)
    at backup-codes.js:33:1
    at g.start (backup-codes.js:33:1)
    at HTMLDocument.<anonymous> (start-discourse-2f46827b.js:3:52)
    at start-discourse-2f46827b.js:6:10
    at start-discourse-2f46827b.js:6:27

I had chat plugin disabled, but when I enabled it this banner appeared:

Disabling the Category Icons TC resolved the other TCs, but now I cannot disable the Chat plugin (it is missing from the list of installed plugins, but it is enabled).

I’ll change the title to better describe the issue.

The Category Icons theme component is now deprecated. You should use the core category emoji/icons feature.

You could try disabling the other components and testing if one is causing another to break.