Skip to content

[Bug]: Reasoning picker remains open after selecting a reasoning level #4522

Description

@eimexdev

Before submitting

  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.

Area

apps/web

Steps to reproduce

  1. Open T3 Code in the web or desktop client.
  2. Open a thread using a model that supports multiple reasoning levels.
  3. Open the reasoning picker in the composer.
  4. Select a different reasoning level, such as High or Extra High.

Expected behavior

The selected reasoning level should be applied and the picker should close immediately.

Actual behavior

The reasoning level changes, but the picker remains open. The user must click outside the picker, press Escape, or activate the trigger again to dismiss it.

The desktop client is also affected because it uses the same web renderer.

Impact

Minor bug or occasional failure

Version or commit

main @ 5719e8ac4020dda0e375ef61d044b61f55a0df8a

Environment

Web and Electron desktop clients; provider/model exposing multiple reasoning-effort options.

Logs or stack traces

No errors are emitted. This appears to be a controlled menu state-handling issue.

Screenshots, recordings, or supporting files

None.

Workaround

Click outside the picker, press Escape, or activate the picker trigger again after selecting a reasoning level.

Supporting investigation

Confirmed by source inspection on main at commit 5719e8ac4020dda0e375ef61d044b61f55a0df8a:

  • Reasoning options dispatch changes through onValueChange in TraitsPicker.tsx.
  • handleSelectChange updates the selected descriptor but does not close the menu in TraitsPicker.tsx.
  • The menu is controlled through isMenuOpen, but TraitsMenuContent receives no callback capable of setting it to false after selection in TraitsPicker.tsx and TraitsPicker.tsx.
  • Historical commit 8ea45f447 implemented an explicit onRequestClose() call after changing a trait.
  • Desktop routes its renderer through the same web client, as shown in DesktopApp.ts, so the same picker implementation applies to both surfaces.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions