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
