Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package mistral-vibe for openSUSE:Factory 
checked in at 2026-09-04 12:40:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mistral-vibe (Old)
 and      /work/SRC/openSUSE:Factory/.mistral-vibe.new.1265 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "mistral-vibe"

Fri Sep  4 12:40:15 2026 rev:16 rq:1375544 version:2.24.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/mistral-vibe/mistral-vibe.changes        
2026-08-24 12:16:42.114854801 +0200
+++ /work/SRC/openSUSE:Factory/.mistral-vibe.new.1265/mistral-vibe.changes      
2026-09-04 12:41:31.791943961 +0200
@@ -1,0 +2,39 @@
+Fri Aug 28 15:09:58 UTC 2026 - Matej Cepl <[email protected]>
+
+- Update to 2.24.5:
+  - Added
+    - Fuzzy search in the MCP servers and connectors browser
+  - Changed
+    - Faster startup through additional lazy imports and deferred
+      schema builds
+  - Fixed
+    - Trust prompt is skipped when --worktree or --trust already
+      grants access
+    - Links are normalized before opening to prevent broken
+      clicks
+    - Themes apply correctly at startup
+    - Retried Mistral responses are released back into the
+      connection pool
+- Add obs-test-synchronization.patch fixing tests
+
+-------------------------------------------------------------------
+Thu Aug 27 07:55:31 UTC 2026 - Matej Cepl <[email protected]>
+
+- Update to 2.24.4:
+  - Added
+    - LLM-generated session titles and terminal title
+    - Queue selection and edit mode for queued messages
+    - Git info is shown in the session header
+  - Changed
+    - Model connections are reused across tool turns for faster
+      responses
+  - Fixed
+    - /mcp login <connector> routes to the connector auth flow
+    - Rate-limited calls retry with adaptive backoff and pacing
+    - Model retry state stays authoritative across clients
+    - Loading nix-managed skills through a symlinked SKILL.md no
+      longer freezes
+    - Chat-completion connections are closed to avoid pool
+      timeouts
+
+-------------------------------------------------------------------

Old:
----
  mistral-vibe-2.24.3.tar.gz

New:
----
  mistral-vibe-2.24.5.tar.gz
  obs-test-synchronization.patch

----------(New B)----------
  New:      connection pool
- Add obs-test-synchronization.patch fixing tests
----------(New E)----------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ mistral-vibe.spec ++++++
--- /var/tmp/diff_new_pack.yiCeSG/_old  2026-09-04 12:41:32.582971739 +0200
+++ /var/tmp/diff_new_pack.yiCeSG/_new  2026-09-04 12:41:32.583971775 +0200
@@ -16,7 +16,7 @@
 #
 
 Name:           mistral-vibe
-Version:        2.24.3
+Version:        2.24.5
 Release:        0
 Summary:        Minimal CLI coding agent by Mistral
 License:        Apache-2.0
@@ -40,6 +40,9 @@
 # PATCH-FIX-OPENSUSE warning_cleanup.patch [email protected]
 # suppress warnings caused by build-environment and dependency compatibility
 Patch5:         warning_cleanup.patch
+# PATCH-FIX-OPENSUSE obs-test-synchronization.patch [email protected]
+# make UI tests robust on slow build workers
+Patch6:         obs-test-synchronization.patch
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
 BuildRequires:  python3-base >= 3.12
@@ -47,6 +50,7 @@
 BuildRequires:  python3-hatch-vcs
 BuildRequires:  python3-hatchling
 BuildRequires:  python3-pip
+BuildRequires:  python3-rfc8785 >= 0.1.4
 Requires:       python3-GitPython >= 3.1.57
 Requires:       python3-PyJWT >= 2.13.0
 Requires:       python3-PyYAML >= 6.0.3
@@ -116,6 +120,7 @@
 Requires:       python3-python-multipart >= 0.0.32
 Requires:       python3-referencing >= 0.37.0
 Requires:       python3-requests >= 2.34.2
+Requires:       python3-rfc8785 >= 0.1.4
 Requires:       python3-rich >= 15.0.0
 Requires:       python3-rpds-py >= 0.30.0
 Requires:       python3-sentry-sdk >= 2.64.0
@@ -130,7 +135,6 @@
 Requires:       python3-tomli-w >= 1.2.0
 Requires:       python3-tree-sitter >= 0.26.0
 Requires:       python3-tree-sitter-bash >= 0.25.1
-Requires:       tree-sitter-bash
 Requires:       python3-truststore >= 0.10.4
 Requires:       python3-typing-extensions >= 4.15.0
 Requires:       python3-typing-inspection >= 0.4.2
@@ -141,6 +145,7 @@
 Requires:       python3-websockets >= 16.0
 Requires:       python3-zipp >= 3.23.1
 Requires:       python3-zstandard >= 0.25.0
+Requires:       tree-sitter-bash
 Obsoletes:      python312-mistral-vibe < %{version}
 Provides:       python312-mistral-vibe = %{version}
 Obsoletes:      python313-mistral-vibe < %{version}
@@ -217,10 +222,10 @@
 BuildRequires:  python3-pygments >= 2.20.0
 BuildRequires:  python3-pyperclip >= 1.11.0
 BuildRequires:  python3-pytest
-BuildRequires:  python3-pytest-xdist >= 3.8.0
 BuildRequires:  python3-pytest-asyncio >= 1.2.0
 BuildRequires:  python3-pytest-textual-snapshot >= 1.1.0
 BuildRequires:  python3-pytest-timeout >= 2.4.0
+BuildRequires:  python3-pytest-xdist >= 3.8.0
 BuildRequires:  python3-python-dateutil >= 2.9.0.post0
 BuildRequires:  python3-python-dotenv >= 1.2.2
 BuildRequires:  python3-python-multipart >= 0.0.32
@@ -240,7 +245,6 @@
 BuildRequires:  python3-tomlkit >= 0.13.0
 BuildRequires:  python3-tree-sitter >= 0.26.0
 BuildRequires:  python3-tree-sitter-bash >= 0.25.1
-BuildRequires:  tree-sitter-bash
 BuildRequires:  python3-truststore >= 0.10.4
 BuildRequires:  python3-typing-extensions >= 4.15.0
 BuildRequires:  python3-typing-inspection >= 0.4.2
@@ -252,6 +256,7 @@
 BuildRequires:  python3-websockets >= 16.0
 BuildRequires:  python3-zipp >= 3.23.1
 BuildRequires:  python3-zstandard >= 0.25.0
+BuildRequires:  tree-sitter-bash
 # /SECTION
 
 %description
@@ -279,6 +284,7 @@
 
 %files
 %license LICENSE
+%doc README.md
 %{_bindir}/vibe
 %{_bindir}/vibe-acp
 %{_bindir}/vibe-app-server

++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.yiCeSG/_old  2026-09-04 12:41:32.619973039 +0200
+++ /var/tmp/diff_new_pack.yiCeSG/_new  2026-09-04 12:41:32.622973144 +0200
@@ -1,5 +1,5 @@
-mtime: 1787498788
-commit: 3a58ca22ed6dcc68c96bd1ebdbbbc4b1eb49810d146d4f4e8b74865cd5de4bbc
+mtime: 1788328899
+commit: 70cc33cf11450a10c02645526f1a33e70ac551f382496f1923e07e229eb87ff8
 url: https://src.opensuse.org/AI/mistral-vibe.git
 revision: factory
 

++++++ build.specials.obscpio ++++++

++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore      1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore      2026-09-02 08:01:39.000000000 +0200
@@ -0,0 +1,9 @@
+.assets
+_build.*
+*.obscpio
+*.obsinfo
+*.osc
+.pbuild
+_service:*
+mistral-vibe-*-build/
+.aider*

++++++ mistral-vibe-2.24.3.tar.gz -> mistral-vibe-2.24.5.tar.gz ++++++
++++ 57555 lines of diff (skipped)

++++++ no_network.patch ++++++
--- /var/tmp/diff_new_pack.yiCeSG/_old  2026-09-04 12:41:33.410000782 +0200
+++ /var/tmp/diff_new_pack.yiCeSG/_new  2026-09-04 12:41:33.415000957 +0200
@@ -16,11 +16,11 @@
  tests/test_install_script.py                          |    3 +++
  15 files changed, 36 insertions(+)
 
-Index: mistral-vibe-2.24.3/pyproject.toml
+Index: mistral-vibe-2.24.4/pyproject.toml
 ===================================================================
---- mistral-vibe-2.24.3.orig/pyproject.toml    2026-08-20 19:38:11.000000000 
+0200
-+++ mistral-vibe-2.24.3/pyproject.toml 2026-08-22 13:40:18.974703431 +0200
-@@ -271,6 +271,7 @@
+--- mistral-vibe-2.24.4.orig/pyproject.toml    2026-08-26 17:18:33.000000000 
+0200
++++ mistral-vibe-2.24.4/pyproject.toml 2026-08-27 15:09:33.762522932 +0200
+@@ -272,6 +272,7 @@
  timeout = 10
  markers = [
      "unified_supported: backend contract behavior implemented by the Unified 
Harness",
@@ -28,10 +28,10 @@
  ]
  filterwarnings = [
      # (e2e) streaming mock server is started in a thread; and the cli is 
spawn in a fork
-Index: mistral-vibe-2.24.3/tests/acp/test_acp_entrypoint_smoke.py
+Index: mistral-vibe-2.24.4/tests/acp/test_acp_entrypoint_smoke.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/acp/test_acp_entrypoint_smoke.py    
2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/acp/test_acp_entrypoint_smoke.py 2026-08-22 
13:40:18.975019507 +0200
+--- mistral-vibe-2.24.4.orig/tests/acp/test_acp_entrypoint_smoke.py    
2026-08-26 17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/acp/test_acp_entrypoint_smoke.py 2026-08-27 
09:57:37.157045175 +0200
 @@ -29,6 +29,8 @@
      "Sign into Mistral Vibe through your Mistral AI Studio account."
  )
@@ -41,10 +41,10 @@
  
  class _AcpSmokeClient(Client):
      def on_connect(self, conn: Any) -> None:
-Index: mistral-vibe-2.24.3/tests/app_server/test_transport.py
+Index: mistral-vibe-2.24.4/tests/app_server/test_transport.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/app_server/test_transport.py        
2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/app_server/test_transport.py     2026-08-22 
13:40:18.977797014 +0200
+--- mistral-vibe-2.24.4.orig/tests/app_server/test_transport.py        
2026-08-26 17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/app_server/test_transport.py     2026-08-27 
09:57:37.157476994 +0200
 @@ -239,6 +239,7 @@
      assert [json.loads(line) for line in writer.getvalue().splitlines()] == 
[{"id": 1}]
  
@@ -53,10 +53,10 @@
  @pytest.mark.asyncio
  async def test_stdio_server_uses_the_same_json_rpc_lifecycle() -> None:
      agent_loop = build_test_agent_loop()
-Index: mistral-vibe-2.24.3/tests/cli/test_audio_config_boundary.py
+Index: mistral-vibe-2.24.4/tests/cli/test_audio_config_boundary.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/cli/test_audio_config_boundary.py   
2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/cli/test_audio_config_boundary.py        
2026-08-22 13:40:18.976615476 +0200
+--- mistral-vibe-2.24.4.orig/tests/cli/test_audio_config_boundary.py   
2026-08-26 17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/cli/test_audio_config_boundary.py        
2026-08-27 09:57:37.157833971 +0200
 @@ -29,6 +29,7 @@
      return await _wait_until(pilot, lambda: not app._queue.draining, timeout)
  
@@ -81,10 +81,10 @@
  @pytest.mark.asyncio
  async def test_narrator_sync_observes_accepted_config() -> None:
      narrator = MagicMock()
-Index: mistral-vibe-2.24.3/tests/cli/test_log_level_command.py
+Index: mistral-vibe-2.24.4/tests/cli/test_log_level_command.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/cli/test_log_level_command.py       
2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/cli/test_log_level_command.py    2026-08-22 
13:40:18.976856901 +0200
+--- mistral-vibe-2.24.4.orig/tests/cli/test_log_level_command.py       
2026-08-26 17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/cli/test_log_level_command.py    2026-08-27 
09:57:37.158153357 +0200
 @@ -199,6 +199,7 @@
      assert get_session_override() is None
  
@@ -93,10 +93,10 @@
  @pytest.mark.asyncio
  async def test_picker_config_write_failure_surfaces_error(monkeypatch) -> 
None:
      # When the inline (idle) config write fails, the picker must surface an
-Index: mistral-vibe-2.24.3/tests/cli/test_ui_config_and_model_picker.py
+Index: mistral-vibe-2.24.4/tests/cli/test_ui_config_and_model_picker.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/cli/test_ui_config_and_model_picker.py      
2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/cli/test_ui_config_and_model_picker.py   
2026-08-22 13:40:18.977067178 +0200
+--- mistral-vibe-2.24.4.orig/tests/cli/test_ui_config_and_model_picker.py      
2026-08-26 17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/cli/test_ui_config_and_model_picker.py   
2026-08-27 15:09:33.762522932 +0200
 @@ -145,6 +145,7 @@
              update_config.assert_not_awaited()
  
@@ -105,10 +105,10 @@
  @pytest.mark.asyncio
  async def test_model_picker_select_model() -> None:
      app = build_test_vibe_app(config=_make_config_with_models())
-Index: 
mistral-vibe-2.24.3/tests/cli/textual_ui/test_custom_tools_deprecation.py
+Index: 
mistral-vibe-2.24.4/tests/cli/textual_ui/test_custom_tools_deprecation.py
 ===================================================================
---- 
mistral-vibe-2.24.3.orig/tests/cli/textual_ui/test_custom_tools_deprecation.py  
   2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/cli/textual_ui/test_custom_tools_deprecation.py  
2026-08-22 13:40:18.977278536 +0200
+--- 
mistral-vibe-2.24.4.orig/tests/cli/textual_ui/test_custom_tools_deprecation.py  
   2026-08-26 17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/cli/textual_ui/test_custom_tools_deprecation.py  
2026-08-27 09:57:37.158693942 +0200
 @@ -21,6 +21,7 @@
      pytest.fail("Condition not met within timeout")
  
@@ -125,10 +125,10 @@
  @pytest.mark.asyncio
  async def test_rebuilding_the_transcript_restores_the_custom_tools_warning(
      tmp_path: Path,
-Index: mistral-vibe-2.24.3/tests/conftest.py
+Index: mistral-vibe-2.24.4/tests/conftest.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/conftest.py 2026-08-20 19:38:11.000000000 
+0200
-+++ mistral-vibe-2.24.3/tests/conftest.py      2026-08-22 13:40:18.977557692 
+0200
+--- mistral-vibe-2.24.4.orig/tests/conftest.py 2026-08-26 17:18:33.000000000 
+0200
++++ mistral-vibe-2.24.4/tests/conftest.py      2026-08-27 15:14:18.316888893 
+0200
 @@ -237,6 +237,17 @@
  
  
@@ -140,17 +140,17 @@
 +        return ManagedConfigResult(error="Mocked: no network in tests")
 +
 +    monkeypatch.setattr("vibe.core.config.admin_config.fetch_managed_config", 
fake_fetch)
-+    monkeypatch.setattr("vibe.app_server._resources.fetch_managed_config", 
fake_fetch)
++    monkeypatch.setattr("vibe.app_server._admin_config.fetch_managed_config", 
fake_fetch)
 +
 +
 [email protected](autouse=True)
  def _mock_platform(monkeypatch: pytest.MonkeyPatch) -> None:
      """Mock platform to be Linux with /bin/sh shell for consistent test 
behavior.
  
-Index: mistral-vibe-2.24.3/tests/e2e/test_cli_tui_fresh_install.py
+Index: mistral-vibe-2.24.4/tests/e2e/test_cli_tui_fresh_install.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/e2e/test_cli_tui_fresh_install.py   
2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/e2e/test_cli_tui_fresh_install.py        
2026-08-22 13:40:18.975294035 +0200
+--- mistral-vibe-2.24.4.orig/tests/e2e/test_cli_tui_fresh_install.py   
2026-08-26 17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/e2e/test_cli_tui_fresh_install.py        
2026-08-27 09:57:37.159243674 +0200
 @@ -62,6 +62,7 @@
      return _venv_executable(venv_path, "vibe")
  
@@ -159,10 +159,10 @@
  @pytest.mark.timeout(90)
  def test_fresh_wheel_install_can_spawn_cli_and_complete_happy_path(
      streaming_mock_server: StreamingMockServer,
-Index: mistral-vibe-2.24.3/tests/e2e/test_cli_tui_hooks.py
+Index: mistral-vibe-2.24.4/tests/e2e/test_cli_tui_hooks.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/e2e/test_cli_tui_hooks.py   2026-08-20 
19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/e2e/test_cli_tui_hooks.py        2026-08-22 
13:40:18.975501406 +0200
+--- mistral-vibe-2.24.4.orig/tests/e2e/test_cli_tui_hooks.py   2026-08-26 
17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/e2e/test_cli_tui_hooks.py        2026-08-27 
09:57:37.159496414 +0200
 @@ -18,6 +18,8 @@
  )
  from tests.e2e.mock_server import StreamingMockServer
@@ -172,10 +172,10 @@
  
  def _setup_recording_hook(vibe_home: Path, invocation_path: Path) -> None:
      script = vibe_home / "_record_hook.py"
-Index: mistral-vibe-2.24.3/tests/e2e/test_cli_tui_onboarding.py
+Index: mistral-vibe-2.24.4/tests/e2e/test_cli_tui_onboarding.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/e2e/test_cli_tui_onboarding.py      
2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/e2e/test_cli_tui_onboarding.py   2026-08-22 
13:40:18.975682106 +0200
+--- mistral-vibe-2.24.4.orig/tests/e2e/test_cli_tui_onboarding.py      
2026-08-26 17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/e2e/test_cli_tui_onboarding.py   2026-08-27 
09:57:37.159696533 +0200
 @@ -7,6 +7,8 @@
  
  from tests.e2e.common import SpawnedVibeProcessFixture, ansi_tolerant_pattern
@@ -185,11 +185,11 @@
  
  @pytest.mark.timeout(15)
  def test_spawn_cli_shows_onboarding_when_api_key_missing(
-Index: mistral-vibe-2.24.3/tests/e2e/test_cli_tui_session_exit.py
+Index: mistral-vibe-2.24.4/tests/e2e/test_cli_tui_session_exit.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/e2e/test_cli_tui_session_exit.py    
2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/e2e/test_cli_tui_session_exit.py 2026-08-22 
13:40:18.975875240 +0200
-@@ -23,6 +23,8 @@
+--- mistral-vibe-2.24.4.orig/tests/e2e/test_cli_tui_session_exit.py    
2026-08-26 17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/e2e/test_cli_tui_session_exit.py 2026-08-27 
09:57:37.159895881 +0200
+@@ -24,6 +24,8 @@
  from tests.e2e.mock_server import StreamingMockServer
  from vibe.utils.io import read_safe
  
@@ -198,10 +198,10 @@
  
  def _usage_by_run_factory(
      request_index: int, _payload: object
-Index: mistral-vibe-2.24.3/tests/e2e/test_cli_tui_streaming.py
+Index: mistral-vibe-2.24.4/tests/e2e/test_cli_tui_streaming.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/e2e/test_cli_tui_streaming.py       
2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/e2e/test_cli_tui_streaming.py    2026-08-22 
13:40:18.976063916 +0200
+--- mistral-vibe-2.24.4.orig/tests/e2e/test_cli_tui_streaming.py       
2026-08-26 17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/e2e/test_cli_tui_streaming.py    2026-08-27 
09:57:37.160090270 +0200
 @@ -14,6 +14,8 @@
  )
  from tests.e2e.mock_server import StreamingMockServer
@@ -211,10 +211,10 @@
  
  @pytest.mark.timeout(15)
  def test_spawn_cli_to_send_and_receive_message(
-Index: mistral-vibe-2.24.3/tests/e2e/test_cli_tui_tool_approval.py
+Index: mistral-vibe-2.24.4/tests/e2e/test_cli_tui_tool_approval.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/e2e/test_cli_tui_tool_approval.py   
2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/e2e/test_cli_tui_tool_approval.py        
2026-08-22 13:40:18.976236071 +0200
+--- mistral-vibe-2.24.4.orig/tests/e2e/test_cli_tui_tool_approval.py   
2026-08-26 17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/e2e/test_cli_tui_tool_approval.py        
2026-08-27 09:57:37.160281803 +0200
 @@ -14,6 +14,8 @@
  )
  from tests.e2e.mock_server import ChatCompletionsRequestPayload, 
StreamingMockServer
@@ -224,10 +224,10 @@
  PREDICTABLE_OUTPUT = "__E2E_BASH_OK__"
  TOOL_ARGUMENTS = f'{{"command":"printf \\"{PREDICTABLE_OUTPUT}\\\\n\\""}}'
  
-Index: mistral-vibe-2.24.3/tests/test_install_script.py
+Index: mistral-vibe-2.24.4/tests/test_install_script.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/test_install_script.py      2026-08-20 
19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/test_install_script.py   2026-08-22 
13:40:18.976414006 +0200
+--- mistral-vibe-2.24.4.orig/tests/test_install_script.py      2026-08-26 
17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/test_install_script.py   2026-08-27 
09:57:37.160559720 +0200
 @@ -7,6 +7,8 @@
  import subprocess
  from textwrap import dedent

++++++ no_terminal.patch ++++++
--- /var/tmp/diff_new_pack.yiCeSG/_old  2026-09-04 12:41:33.434001625 +0200
+++ /var/tmp/diff_new_pack.yiCeSG/_new  2026-09-04 12:41:33.441001871 +0200
@@ -21,11 +21,11 @@
  tests/tools/test_ui_bash_execution.py                          |    2 ++
  tests/vscode_extension_promo/test_ui_vscode_extension_promo.py |    2 ++
  19 files changed, 38 insertions(+)
-Index: mistral-vibe-2.24.3/pyproject.toml
+Index: mistral-vibe-2.24.4/pyproject.toml
 ===================================================================
---- mistral-vibe-2.24.3.orig/pyproject.toml    2026-08-22 13:42:27.422660226 
+0200
-+++ mistral-vibe-2.24.3/pyproject.toml 2026-08-22 13:42:27.455279313 +0200
-@@ -272,6 +272,7 @@
+--- mistral-vibe-2.24.4.orig/pyproject.toml    2026-08-27 09:57:37.156721782 
+0200
++++ mistral-vibe-2.24.4/pyproject.toml 2026-08-27 09:57:43.320690567 +0200
+@@ -273,6 +273,7 @@
  markers = [
      "unified_supported: backend contract behavior implemented by the Unified 
Harness",
      "network: tests that require network-capable execution environment",
@@ -33,10 +33,10 @@
  ]
  filterwarnings = [
      # (e2e) streaming mock server is started in a thread; and the cli is 
spawn in a fork
-Index: mistral-vibe-2.24.3/tests/cli/test_switching_mode.py
+Index: mistral-vibe-2.24.4/tests/cli/test_switching_mode.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/cli/test_switching_mode.py  2026-08-20 
19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/cli/test_switching_mode.py       2026-08-22 
13:42:27.455560854 +0200
+--- mistral-vibe-2.24.4.orig/tests/cli/test_switching_mode.py  2026-08-26 
17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/cli/test_switching_mode.py       2026-08-27 
09:57:43.320988152 +0200
 @@ -5,6 +5,8 @@
  
  import pytest
@@ -46,10 +46,10 @@
  from tests.conftest import build_test_agent_loop, build_test_vibe_app
  from tests.mock.utils import mock_llm_chunk
  from tests.stubs.fake_backend import FakeBackend
-Index: mistral-vibe-2.24.3/tests/cli/test_ui_clipboard_notifications.py
+Index: mistral-vibe-2.24.4/tests/cli/test_ui_clipboard_notifications.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/cli/test_ui_clipboard_notifications.py      
2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/cli/test_ui_clipboard_notifications.py   
2026-08-22 13:42:27.455841212 +0200
+--- mistral-vibe-2.24.4.orig/tests/cli/test_ui_clipboard_notifications.py      
2026-08-26 17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/cli/test_ui_clipboard_notifications.py   
2026-08-27 09:57:43.321270718 +0200
 @@ -3,6 +3,8 @@
  from unittest.mock import patch
  
@@ -59,10 +59,10 @@
  from textual.selection import Selection
  from textual.widget import Widget
  
-Index: mistral-vibe-2.24.3/tests/cli/test_ui_config_and_model_picker.py
+Index: mistral-vibe-2.24.4/tests/cli/test_ui_config_and_model_picker.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/cli/test_ui_config_and_model_picker.py      
2026-08-22 13:42:42.936887544 +0200
-+++ mistral-vibe-2.24.3/tests/cli/test_ui_config_and_model_picker.py   
2026-08-22 13:44:10.539665525 +0200
+--- mistral-vibe-2.24.4.orig/tests/cli/test_ui_config_and_model_picker.py      
2026-08-27 09:57:37.158402940 +0200
++++ mistral-vibe-2.24.4/tests/cli/test_ui_config_and_model_picker.py   
2026-08-27 09:57:43.321469515 +0200
 @@ -3,6 +3,9 @@
  from unittest.mock import AsyncMock, patch
  
@@ -73,10 +73,10 @@
  from textual.widgets import OptionList
  
  from tests.conftest import build_test_vibe_app, build_test_vibe_config
-Index: mistral-vibe-2.24.3/tests/cli/test_ui_config_screen.py
+Index: mistral-vibe-2.24.4/tests/cli/test_ui_config_screen.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/cli/test_ui_config_screen.py        
2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/cli/test_ui_config_screen.py     2026-08-22 
13:42:27.456149493 +0200
+--- mistral-vibe-2.24.4.orig/tests/cli/test_ui_config_screen.py        
2026-08-26 17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/cli/test_ui_config_screen.py     2026-08-27 
09:57:43.321715491 +0200
 @@ -4,6 +4,8 @@
  import tomllib
  
@@ -86,10 +86,10 @@
  import tomli_w
  
  from tests.conftest import (
-Index: mistral-vibe-2.24.3/tests/cli/test_ui_exit_command.py
+Index: mistral-vibe-2.24.4/tests/cli/test_ui_exit_command.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/cli/test_ui_exit_command.py 2026-08-20 
19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/cli/test_ui_exit_command.py      2026-08-22 
13:42:27.456446363 +0200
+--- mistral-vibe-2.24.4.orig/tests/cli/test_ui_exit_command.py 2026-08-26 
17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/cli/test_ui_exit_command.py      2026-08-27 
09:57:43.321933444 +0200
 @@ -4,6 +4,8 @@
  
  import pytest
@@ -99,10 +99,10 @@
  from tests.conftest import build_test_vibe_app
  from vibe.cli.textual_ui.widgets.chat_input.container import 
ChatInputContainer
  from vibe.cli.textual_ui.widgets.messages import SlashCommandMessage, 
UserMessage
-Index: mistral-vibe-2.24.3/tests/cli/test_ui_theme_picker.py
+Index: mistral-vibe-2.24.4/tests/cli/test_ui_theme_picker.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/cli/test_ui_theme_picker.py 2026-08-20 
19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/cli/test_ui_theme_picker.py      2026-08-22 
13:42:27.456693028 +0200
+--- mistral-vibe-2.24.4.orig/tests/cli/test_ui_theme_picker.py 2026-08-26 
17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/cli/test_ui_theme_picker.py      2026-08-27 
09:57:43.322155054 +0200
 @@ -7,6 +7,8 @@
  
  import pytest
@@ -112,10 +112,10 @@
  from tests.conftest import build_test_vibe_app, build_test_vibe_config
  from vibe.cli.textual_ui.app import BottomApp
  from vibe.cli.textual_ui.widgets.theme_picker import ThemePickerApp
-Index: mistral-vibe-2.24.3/tests/cli/test_whoami_command.py
+Index: mistral-vibe-2.24.4/tests/cli/test_whoami_command.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/cli/test_whoami_command.py  2026-08-20 
19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/cli/test_whoami_command.py       2026-08-22 
13:42:27.456730528 +0200
+--- mistral-vibe-2.24.4.orig/tests/cli/test_whoami_command.py  2026-08-26 
17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/cli/test_whoami_command.py       2026-08-27 
09:57:43.322376424 +0200
 @@ -4,6 +4,8 @@
  
  import pytest
@@ -125,10 +125,10 @@
  from tests.conftest import build_test_vibe_app
  from tests.stubs.fake_account_gateway import FakeAccountGateway
  from tests.stubs.fake_identity_gateway import FakeIdentityGateway
-Index: mistral-vibe-2.24.3/tests/cli/test_word_selection.py
+Index: mistral-vibe-2.24.4/tests/cli/test_word_selection.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/cli/test_word_selection.py  2026-08-20 
19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/cli/test_word_selection.py       2026-08-22 
13:42:27.457256380 +0200
+--- mistral-vibe-2.24.4.orig/tests/cli/test_word_selection.py  2026-08-26 
17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/cli/test_word_selection.py       2026-08-27 
09:57:43.322622130 +0200
 @@ -3,6 +3,8 @@
  from typing import Any, ClassVar, cast
  
@@ -138,10 +138,10 @@
  from textual import events
  from textual.geometry import Offset, Region
  from textual.screen import Screen
-Index: mistral-vibe-2.24.3/tests/cli/textual_ui/test_chat_input_word_drag.py
+Index: mistral-vibe-2.24.4/tests/cli/textual_ui/test_chat_input_word_drag.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/cli/textual_ui/test_chat_input_word_drag.py 
2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/cli/textual_ui/test_chat_input_word_drag.py      
2026-08-22 13:42:27.457520158 +0200
+--- mistral-vibe-2.24.4.orig/tests/cli/textual_ui/test_chat_input_word_drag.py 
2026-08-26 17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/cli/textual_ui/test_chat_input_word_drag.py      
2026-08-27 09:57:43.322933020 +0200
 @@ -1,6 +1,8 @@
  from __future__ import annotations
  
@@ -151,10 +151,10 @@
  from textual import events
  from textual.widgets.text_area import Selection
  
-Index: mistral-vibe-2.24.3/tests/cli/textual_ui/test_message_queue_ui.py
+Index: mistral-vibe-2.24.4/tests/cli/textual_ui/test_message_queue_ui.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/cli/textual_ui/test_message_queue_ui.py     
2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/cli/textual_ui/test_message_queue_ui.py  
2026-08-22 13:42:27.457801147 +0200
+--- mistral-vibe-2.24.4.orig/tests/cli/textual_ui/test_message_queue_ui.py     
2026-08-26 17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/cli/textual_ui/test_message_queue_ui.py  
2026-08-27 09:57:43.323195167 +0200
 @@ -5,6 +5,8 @@
  
  import pytest
@@ -164,10 +164,10 @@
  from tests.conftest import build_test_vibe_app
  from vibe.cli.textual_ui.app import VibeApp
  from vibe.cli.textual_ui.widgets.chat_input.container import 
ChatInputContainer
-Index: mistral-vibe-2.24.3/tests/e2e/agent_loop_characterization/test_resume.py
+Index: mistral-vibe-2.24.4/tests/e2e/agent_loop_characterization/test_resume.py
 ===================================================================
---- 
mistral-vibe-2.24.3.orig/tests/e2e/agent_loop_characterization/test_resume.py   
   2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/e2e/agent_loop_characterization/test_resume.py   
2026-08-22 13:42:27.458043234 +0200
+--- 
mistral-vibe-2.24.4.orig/tests/e2e/agent_loop_characterization/test_resume.py   
   2026-08-26 17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/e2e/agent_loop_characterization/test_resume.py   
2026-08-27 09:57:43.323455320 +0200
 @@ -8,6 +8,8 @@
  import pexpect
  import pytest
@@ -177,10 +177,10 @@
  from tests.e2e.agent_loop_characterization.support import (
      assert_assistant_tool_call_present,
      assert_message_content_present,
-Index: 
mistral-vibe-2.24.3/tests/e2e/agent_loop_characterization/test_subagents.py
+Index: 
mistral-vibe-2.24.4/tests/e2e/agent_loop_characterization/test_subagents.py
 ===================================================================
---- 
mistral-vibe-2.24.3.orig/tests/e2e/agent_loop_characterization/test_subagents.py
   2026-08-20 19:38:11.000000000 +0200
-+++ 
mistral-vibe-2.24.3/tests/e2e/agent_loop_characterization/test_subagents.py     
   2026-08-22 13:42:27.458288687 +0200
+--- 
mistral-vibe-2.24.4.orig/tests/e2e/agent_loop_characterization/test_subagents.py
   2026-08-26 17:18:33.000000000 +0200
++++ 
mistral-vibe-2.24.4/tests/e2e/agent_loop_characterization/test_subagents.py     
   2026-08-27 09:57:43.323736183 +0200
 @@ -5,6 +5,8 @@
  import pexpect
  import pytest
@@ -190,10 +190,10 @@
  from tests.e2e.agent_loop_characterization.support import (
      assert_message_content_present,
      assert_tool_result_contains,
-Index: 
mistral-vibe-2.24.3/tests/e2e/agent_loop_characterization/test_tool_execution.py
+Index: 
mistral-vibe-2.24.4/tests/e2e/agent_loop_characterization/test_tool_execution.py
 ===================================================================
---- 
mistral-vibe-2.24.3.orig/tests/e2e/agent_loop_characterization/test_tool_execution.py
      2026-08-20 19:38:11.000000000 +0200
-+++ 
mistral-vibe-2.24.3/tests/e2e/agent_loop_characterization/test_tool_execution.py
   2026-08-22 13:42:27.458452165 +0200
+--- 
mistral-vibe-2.24.4.orig/tests/e2e/agent_loop_characterization/test_tool_execution.py
      2026-08-26 17:18:33.000000000 +0200
++++ 
mistral-vibe-2.24.4/tests/e2e/agent_loop_characterization/test_tool_execution.py
   2026-08-27 09:57:43.323911806 +0200
 @@ -6,6 +6,8 @@
  import pexpect
  import pytest
@@ -203,10 +203,10 @@
  from tests.e2e.agent_loop_characterization.support import (
      answer_approval,
      assert_assistant_tool_call_present,
-Index: 
mistral-vibe-2.24.3/tests/e2e/agent_loop_characterization/test_tool_permissions.py
+Index: 
mistral-vibe-2.24.4/tests/e2e/agent_loop_characterization/test_tool_permissions.py
 ===================================================================
---- 
mistral-vibe-2.24.3.orig/tests/e2e/agent_loop_characterization/test_tool_permissions.py
    2026-08-20 19:38:11.000000000 +0200
-+++ 
mistral-vibe-2.24.3/tests/e2e/agent_loop_characterization/test_tool_permissions.py
 2026-08-22 13:42:27.458628026 +0200
+--- 
mistral-vibe-2.24.4.orig/tests/e2e/agent_loop_characterization/test_tool_permissions.py
    2026-08-26 17:18:33.000000000 +0200
++++ 
mistral-vibe-2.24.4/tests/e2e/agent_loop_characterization/test_tool_permissions.py
 2026-08-27 09:57:43.324095464 +0200
 @@ -6,6 +6,8 @@
  import pexpect
  import pytest
@@ -216,10 +216,10 @@
  from tests.e2e.agent_loop_characterization.support import (
      answer_approval,
      assert_tool_result_contains,
-Index: 
mistral-vibe-2.24.3/tests/e2e/agent_loop_characterization/test_user_interaction.py
+Index: 
mistral-vibe-2.24.4/tests/e2e/agent_loop_characterization/test_user_interaction.py
 ===================================================================
---- 
mistral-vibe-2.24.3.orig/tests/e2e/agent_loop_characterization/test_user_interaction.py
    2026-08-20 19:38:11.000000000 +0200
-+++ 
mistral-vibe-2.24.3/tests/e2e/agent_loop_characterization/test_user_interaction.py
 2026-08-22 13:42:27.458825018 +0200
+--- 
mistral-vibe-2.24.4.orig/tests/e2e/agent_loop_characterization/test_user_interaction.py
    2026-08-26 17:18:33.000000000 +0200
++++ 
mistral-vibe-2.24.4/tests/e2e/agent_loop_characterization/test_user_interaction.py
 2026-08-27 09:57:43.324278411 +0200
 @@ -7,6 +7,8 @@
  import pexpect
  import pytest
@@ -229,10 +229,10 @@
  from tests.e2e.agent_loop_characterization.support import (
      APPROVAL_INPUT_GRACE_PERIOD_S,
      assert_tool_result_contains,
-Index: mistral-vibe-2.24.3/tests/onboarding/test_ui_onboarding.py
+Index: mistral-vibe-2.24.4/tests/onboarding/test_ui_onboarding.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/onboarding/test_ui_onboarding.py    
2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/onboarding/test_ui_onboarding.py 2026-08-22 
13:42:27.459090628 +0200
+--- mistral-vibe-2.24.4.orig/tests/onboarding/test_ui_onboarding.py    
2026-08-26 17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/onboarding/test_ui_onboarding.py 2026-08-27 
09:57:43.324532673 +0200
 @@ -10,6 +10,8 @@
  import keyring
  from keyring.errors import KeyringError
@@ -242,10 +242,10 @@
  from textual.content import Content
  from textual.events import Resize
  from textual.geometry import Size
-Index: mistral-vibe-2.24.3/tests/tools/test_ui_bash_execution.py
+Index: mistral-vibe-2.24.4/tests/tools/test_ui_bash_execution.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/tools/test_ui_bash_execution.py     
2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/tools/test_ui_bash_execution.py  2026-08-22 
13:42:27.459450236 +0200
+--- mistral-vibe-2.24.4.orig/tests/tools/test_ui_bash_execution.py     
2026-08-26 17:18:33.000000000 +0200
++++ mistral-vibe-2.24.4/tests/tools/test_ui_bash_execution.py  2026-08-27 
09:57:43.324865304 +0200
 @@ -5,6 +5,8 @@
  from pydantic import JsonValue
  import pytest
@@ -255,10 +255,10 @@
  from tests.conftest import build_test_agent_loop, build_test_vibe_app
  from tests.mock.utils import mock_llm_chunk
  from tests.stubs.fake_backend import FakeBackend
-Index: 
mistral-vibe-2.24.3/tests/vscode_extension_promo/test_ui_vscode_extension_promo.py
+Index: 
mistral-vibe-2.24.4/tests/vscode_extension_promo/test_ui_vscode_extension_promo.py
 ===================================================================
---- 
mistral-vibe-2.24.3.orig/tests/vscode_extension_promo/test_ui_vscode_extension_promo.py
    2026-08-20 19:38:11.000000000 +0200
-+++ 
mistral-vibe-2.24.3/tests/vscode_extension_promo/test_ui_vscode_extension_promo.py
 2026-08-22 13:42:27.459731196 +0200
+--- 
mistral-vibe-2.24.4.orig/tests/vscode_extension_promo/test_ui_vscode_extension_promo.py
    2026-08-26 17:18:33.000000000 +0200
++++ 
mistral-vibe-2.24.4/tests/vscode_extension_promo/test_ui_vscode_extension_promo.py
 2026-08-27 09:57:43.325114777 +0200
 @@ -8,6 +8,8 @@
  
  import pytest

++++++ obs-test-synchronization.patch ++++++
Index: mistral-vibe-2.24.5/tests/cli/test_connector_auth_app.py
===================================================================
--- mistral-vibe-2.24.5.orig/tests/cli/test_connector_auth_app.py       
2026-08-31 08:24:47.483883761 +0200
+++ mistral-vibe-2.24.5/tests/cli/test_connector_auth_app.py    2026-08-31 
08:24:47.498852360 +0200
@@ -253,8 +253,8 @@
     async def test_action_refresh_dispatches_worker(self) -> None:
         app = _make_app()
 
-        def close_worker(coroutine, **_kwargs: object) -> None:
-            coroutine.close()
+        def close_worker(coroutine_factory, **_kwargs: object) -> None:
+            coroutine_factory().close()
 
         app.run_worker = MagicMock(side_effect=close_worker)
         app.query_one = MagicMock()
Index: mistral-vibe-2.24.5/tests/cli/test_mcp_app.py
===================================================================
--- mistral-vibe-2.24.5.orig/tests/cli/test_mcp_app.py  2026-08-31 
08:24:45.830139052 +0200
+++ mistral-vibe-2.24.5/tests/cli/test_mcp_app.py       2026-08-31 
08:24:47.499468230 +0200
@@ -425,8 +425,8 @@
 def test_start_refresh_dispatches_one_worker() -> None:
     app = MCPApp(_state(), 
refresh_callback=AsyncMock(return_value="Refreshed"))
 
-    def close_worker(coroutine, **_kwargs: object) -> None:
-        coroutine.close()
+    def close_worker(coroutine_factory, **_kwargs: object) -> None:
+        coroutine_factory().close()
 
     app.run_worker = MagicMock(side_effect=close_worker)
 
Index: mistral-vibe-2.24.5/tests/cli/textual_ui/test_queue_selection_ui.py
===================================================================
--- mistral-vibe-2.24.5.orig/tests/cli/textual_ui/test_queue_selection_ui.py    
2026-08-31 08:24:45.830139052 +0200
+++ mistral-vibe-2.24.5/tests/cli/textual_ui/test_queue_selection_ui.py 
2026-09-02 07:54:45.031953978 +0200
@@ -627,19 +627,18 @@
     # items so the drain consumes them by running the shell (no LLM turn).
     async with vibe_app.run_test() as pilot:
         chat_input = vibe_app.query_one(ChatInputContainer)
-        chat_input.value = "!sleep 2"
+        chat_input.value = "!sleep 10"
         await pilot.press("enter")
         assert await _wait_until(
             pilot, lambda: vibe_app._bash_task is not None, timeout=2.0
         )
 
-        chat_input.value = "!sleep 1"
+        chat_input.value = "!sleep 10"
         await pilot.press("enter")
-        await pilot.pause(0.05)
+        assert await _wait_until(pilot, lambda: len(vibe_app._queue) == 1, 
timeout=6.0)
         chat_input.value = "!echo newest"
         await pilot.press("enter")
-        await pilot.pause(0.05)
-        assert len(vibe_app._queue) == 2
+        assert await _wait_until(pilot, lambda: len(vibe_app._queue) == 2, 
timeout=6.0)
 
         body = vibe_app.query_one(ChatInputContainer)._body
         assert body is not None
@@ -647,16 +646,15 @@
         # Highlight the OLDEST item (the one the drain consumes first, FIFO).
         # newest-first list: cursor 0 = newest, cursor 1 = oldest.
         await pilot.press("up")
-        await pilot.pause(0.1)
+        assert await _wait_until(pilot, lambda: body._queue_cursor == 0, 
timeout=6.0)
         await pilot.press("up")
-        await pilot.pause(0.1)
-        assert body._queue_cursor == 1
+        assert await _wait_until(pilot, lambda: body._queue_cursor == 1, 
timeout=6.0)
         assert vibe_app._queue_selected_widget is not None
 
         # Blocking bash finishes, drain consumes the highlighted oldest bash
         # (FIFO) — the highlighted widget is removed but _queue_selected_widget
         # still points at it until the next resync re-posts the scroll.
-        assert await _wait_until(pilot, lambda: len(vibe_app._queue) == 1, 
timeout=6.0)
+        assert await _wait_until(pilot, lambda: len(vibe_app._queue) == 1, 
timeout=15.0)
         # Re-sync via navigation hits the clamp branch (highlighted widget 
gone);
         # the fix re-posts the scroll so _queue_selected_widget re-points at 
the
         # surviving newest item. Without it, Backspace below no-ops.
@@ -677,7 +675,7 @@
 ) -> None:
     async with vibe_app.run_test() as pilot:
         chat_input = vibe_app.query_one(ChatInputContainer)
-        chat_input.value = "!sleep 2"
+        chat_input.value = "!sleep 10"
         await pilot.press("enter")
         assert await _wait_until(
             pilot, lambda: vibe_app._bash_task is not None, timeout=2.0
@@ -693,14 +691,14 @@
 
         # Enter edit mode on the bash item while the app is still busy.
         await pilot.press("up")
-        await pilot.pause(0.1)
+        assert await _wait_until(pilot, lambda: 
vibe_app._queue_selected_widget is not None, timeout=6.0)
+        assert await _wait_until(pilot, lambda: body._queue_cursor == 0, 
timeout=6.0)
         await pilot.press("enter")
-        await pilot.pause(0.1)
-        assert body._queue_in_edit_mode
+        assert await _wait_until(pilot, lambda: body._queue_in_edit_mode, 
timeout=6.0)
         assert body._queue_edit_kind == QueuedItemKind.BASH
 
         # Wait for the drain to consume the queued bash item.
-        assert await _wait_until(pilot, lambda: len(vibe_app._queue) == 0, 
timeout=6.0)
+        assert await _wait_until(pilot, lambda: len(vibe_app._queue) == 0, 
timeout=15.0)
 
         assert body.input_widget is not None
         body.input_widget.clear_text()
Index: mistral-vibe-2.24.5/tests/update_notifier/test_ui_update_notification.py
===================================================================
--- 
mistral-vibe-2.24.5.orig/tests/update_notifier/test_ui_update_notification.py   
    2026-08-31 08:24:45.830139052 +0200
+++ mistral-vibe-2.24.5/tests/update_notifier/test_ui_update_notification.py    
2026-08-31 08:25:48.175638232 +0200
@@ -28,6 +28,15 @@
 TEST_CURRENT_VERSION = "0.1.0"
 
 
+async def _wait_until(pilot, predicate, timeout: float = 2.0) -> bool:
+    deadline = asyncio.get_running_loop().time() + timeout
+    while asyncio.get_running_loop().time() < deadline:
+        if predicate():
+            return True
+        await pilot.pause(0.05)
+    return predicate()
+
+
 @pytest.fixture
 def build_update_test_app(
     vibe_config_with_update_checks_enabled: VibeConfigSchema,
@@ -79,6 +88,7 @@
     )
 
     async with app.run_test() as pilot:
+        assert await _wait_until(pilot, lambda: notifier.fetch_update_calls == 
1, timeout=6.0)
         await _assert_no_notifications(app, pilot, timeout=0.3)
 
     assert notifier.fetch_update_calls == 1
@@ -91,9 +101,15 @@
     build_update_test_app: Callable[..., VibeApp],
 ) -> None:
     notifier = FakeUpdateGateway(update=None)
-    app = build_update_test_app(update_notifier=notifier)
+    repository = FakeUpdateCacheRepository()
+    app = build_update_test_app(
+        update_notifier=notifier, update_cache_repository=repository
+    )
 
     async with app.run_test() as pilot:
+        assert await _wait_until(
+            pilot, lambda: notifier.fetch_update_calls == 1, timeout=6.0
+        )
         await _assert_no_notifications(app, pilot, timeout=0.3)
     assert notifier.fetch_update_calls == 1
 

++++++ warning_cleanup.patch ++++++
--- /var/tmp/diff_new_pack.yiCeSG/_old  2026-09-04 12:41:33.474003029 +0200
+++ /var/tmp/diff_new_pack.yiCeSG/_new  2026-09-04 12:41:33.478003170 +0200
@@ -6,11 +6,11 @@
  vibe/core/config/event_bus.py                     |    7 +++----
  5 files changed, 10 insertions(+), 12 deletions(-)
 
-Index: mistral-vibe-2.24.3/tests/cli/test_connector_auth_app.py
+Index: mistral-vibe-2.24.5/tests/cli/test_connector_auth_app.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/tests/cli/test_connector_auth_app.py      
2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/tests/cli/test_connector_auth_app.py   2026-08-22 
13:40:31.881109298 +0200
-@@ -259,7 +259,7 @@
+--- mistral-vibe-2.24.5.orig/tests/cli/test_connector_auth_app.py      
2026-08-27 17:26:03.000000000 +0200
++++ mistral-vibe-2.24.5/tests/cli/test_connector_auth_app.py   2026-08-28 
17:12:00.705219399 +0200
+@@ -263,7 +263,7 @@
  
          assert app._status_message == "Refreshing connector..."
          app.run_worker.assert_called_once()
@@ -19,10 +19,10 @@
          assert kwargs["group"] == "connector_refresh"
  
  
-Index: mistral-vibe-2.24.3/vibe/cli/textual_ui/widgets/connector_auth_app.py
+Index: mistral-vibe-2.24.5/vibe/cli/textual_ui/widgets/connector_auth_app.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/vibe/cli/textual_ui/widgets/connector_auth_app.py 
2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/vibe/cli/textual_ui/widgets/connector_auth_app.py      
2026-08-22 13:40:31.881565168 +0200
+--- mistral-vibe-2.24.5.orig/vibe/cli/textual_ui/widgets/connector_auth_app.py 
2026-08-27 17:26:03.000000000 +0200
++++ mistral-vibe-2.24.5/vibe/cli/textual_ui/widgets/connector_auth_app.py      
2026-08-28 17:12:00.705596550 +0200
 @@ -98,7 +98,7 @@
          self._status_message = "Refreshing connector..."
          self._set_help_text(_HELP)
@@ -32,11 +32,11 @@
          )
  
      # ── workers ──────────────────────────────────────────────────────
-Index: mistral-vibe-2.24.3/vibe/cli/textual_ui/widgets/mcp_app.py
+Index: mistral-vibe-2.24.5/vibe/cli/textual_ui/widgets/mcp_app.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/vibe/cli/textual_ui/widgets/mcp_app.py    
2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/vibe/cli/textual_ui/widgets/mcp_app.py 2026-08-22 
13:40:31.882008323 +0200
-@@ -160,7 +160,7 @@
+--- mistral-vibe-2.24.5.orig/vibe/cli/textual_ui/widgets/mcp_app.py    
2026-08-27 17:26:03.000000000 +0200
++++ mistral-vibe-2.24.5/vibe/cli/textual_ui/widgets/mcp_app.py 2026-08-28 
17:12:00.706014339 +0200
+@@ -243,7 +243,7 @@
          if self._refresh_callback is None or self._refreshing:
              return
          self._refreshing = True
@@ -45,10 +45,10 @@
  
      async def _run_refresh(self) -> None:
          if self._refresh_callback is not None:
-Index: mistral-vibe-2.24.3/vibe/cli/textual_ui/widgets/question_app.py
+Index: mistral-vibe-2.24.5/vibe/cli/textual_ui/widgets/question_app.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/vibe/cli/textual_ui/widgets/question_app.py       
2026-08-20 19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/vibe/cli/textual_ui/widgets/question_app.py    
2026-08-22 13:40:31.882239840 +0200
+--- mistral-vibe-2.24.5.orig/vibe/cli/textual_ui/widgets/question_app.py       
2026-08-27 17:26:03.000000000 +0200
++++ mistral-vibe-2.24.5/vibe/cli/textual_ui/widgets/question_app.py    
2026-08-28 17:12:00.706455069 +0200
 @@ -1,6 +1,5 @@
  from __future__ import annotations
  
@@ -71,10 +71,10 @@
                  if i not in self.answers
              )
              self._switch_question(new_idx)
-Index: mistral-vibe-2.24.3/vibe/core/config/event_bus.py
+Index: mistral-vibe-2.24.5/vibe/core/config/event_bus.py
 ===================================================================
---- mistral-vibe-2.24.3.orig/vibe/core/config/event_bus.py     2026-08-20 
19:38:11.000000000 +0200
-+++ mistral-vibe-2.24.3/vibe/core/config/event_bus.py  2026-08-22 
13:40:31.882494340 +0200
+--- mistral-vibe-2.24.5.orig/vibe/core/config/event_bus.py     2026-08-27 
17:26:03.000000000 +0200
++++ mistral-vibe-2.24.5/vibe/core/config/event_bus.py  2026-08-28 
17:12:00.706804558 +0200
 @@ -2,8 +2,6 @@
  
  from collections.abc import Callable

Reply via email to