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-10 15:40:14 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/mistral-vibe (Old) and /work/SRC/openSUSE:Factory/.mistral-vibe.new.1265 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mistral-vibe" Thu Sep 10 15:40:14 2026 rev:18 rq:1376854 version:2.25.1 Changes: -------- --- /work/SRC/openSUSE:Factory/mistral-vibe/mistral-vibe.changes 2026-09-09 16:22:14.740762374 +0200 +++ /work/SRC/openSUSE:Factory/.mistral-vibe.new.1265/mistral-vibe.changes 2026-09-10 15:40:16.482201840 +0200 @@ -1,0 +2,34 @@ +Thu Sep 10 05:45:04 UTC 2026 - Martin Pluskal <[email protected]> + +- Update to 2.25.1: + * Background process tools show the command or PID with a typed + result widget; tool call groups fold into one summary line + (Ctrl+O toggles all groups and result bodies) + * New built-in worktree plugin; Desktop keeps 15 recent managed + Code worktrees, skipping active, dirty, untracked or unpushed ones + * Risky calls go back to the model to self-correct, escalating to + an approval prompt only after a streak + * Remove unauthenticated debugpy listener on localhost:5678 + activated by DEBUG_MODE=true under vibe-acp + * Smart approve classifies on the fast Mistral model regardless of + session model; content-dumping git commands no longer + fast-approved + * Invalid API key error names the key origin; rejected keys no + longer offer a doomed /retry + * Built-in vibe plugin no longer dropped from sessions; user-scope + plugins keep their scope instead of showing as project + * GrowthBook default-value rollouts and boolean flags take effect; + cached experiment variants survive cold start and resume + * Bump harness to 0.4.3 (mistralai-vibe-local-harness stays + an unpackaged optional extra) +- Rebase no_terminal.patch, fix_ui_tests.patch and + history_properties_timeout.patch for upstream test reshuffles +- Extend obs-test-synchronization.patch to the chat autocompletion + UI tests: poll for the completed state instead of fixed pauses +- Add harness_importorskip.patch: skip the unified-harness adapter + test module when the optional local harness is absent, like the + other harness test modules do +- Add test-only BuildRequires on python3-setproctitle, newly + imported by tests/test_pytest_vibe.py + +------------------------------------------------------------------- Old: ---- mistral-vibe-2.25.0.tar.gz New: ---- harness_importorskip.patch mistral-vibe-2.25.1.tar.gz ----------(New B)---------- New: UI tests: poll for the completed state instead of fixed pauses - Add harness_importorskip.patch: skip the unified-harness adapter test module when the optional local harness is absent, like the ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ mistral-vibe.spec ++++++ --- /var/tmp/diff_new_pack.QYGfmi/_old 2026-09-10 15:40:18.370281059 +0200 +++ /var/tmp/diff_new_pack.QYGfmi/_new 2026-09-10 15:40:18.373281185 +0200 @@ -28,7 +28,7 @@ %endif %define origname mistral-vibe Name: %{origname}%{psuffix} -Version: 2.25.0 +Version: 2.25.1 Release: 0 Summary: Minimal CLI coding agent by Mistral License: Apache-2.0 @@ -59,6 +59,10 @@ # a same-length config rewrite inside one filesystem timestamp tick was # invisible to the file fingerprint; hash the contents too Patch7: fingerprint_file_contents.patch +# PATCH-FIX-UPSTREAM harness_importorskip.patch [email protected] +# the harness is an optional extra: skip the module when it is missing +# instead of failing collection, same as the other harness test modules +Patch8: harness_importorskip.patch BuildRequires: fdupes BuildRequires: python-rpm-macros BuildRequires: python3-base >= 3.12 @@ -254,6 +258,7 @@ BuildRequires: python3-rich >= 15.0.0 BuildRequires: python3-rpds-py >= 0.30.0 BuildRequires: python3-sentry-sdk >= 2.64.0 +BuildRequires: python3-setproctitle >= 1.3.7 BuildRequires: python3-sounddevice >= 0.5.5 BuildRequires: python3-soupsieve >= 2.8.4 BuildRequires: python3-sse-starlette >= 3.4.1 ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.QYGfmi/_old 2026-09-10 15:40:18.535287982 +0200 +++ /var/tmp/diff_new_pack.QYGfmi/_new 2026-09-10 15:40:18.545288402 +0200 @@ -1,5 +1,5 @@ -mtime: 1788715116 -commit: c1044986e1fe5d923f2f53f27f3f11e52f0660460b483b82f505a2b9a26b9d6f +mtime: 1789025131 +commit: f6e6054c54e838f254565f3521d9f8aaef6e0d7492ef79e56ccb824b3229fa92 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-10 09:25:31.000000000 +0200 @@ -0,0 +1,9 @@ +.assets +_build.* +*.obscpio +*.obsinfo +*.osc +.pbuild +_service:* +mistral-vibe-*-build/ +.aider* ++++++ fix_ui_tests.patch ++++++ --- /var/tmp/diff_new_pack.QYGfmi/_old 2026-09-10 15:40:18.985306864 +0200 +++ /var/tmp/diff_new_pack.QYGfmi/_new 2026-09-10 15:40:18.993307200 +0200 @@ -7,10 +7,10 @@ tests/test_ui_rewind.py | 2 ++ 6 files changed, 20 insertions(+), 2 deletions(-) -Index: mistral-vibe-2.25.0/tests/app_server/test_vibe_code.py +Index: mistral-vibe-2.25.1/tests/app_server/test_vibe_code.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/app_server/test_vibe_code.py -+++ mistral-vibe-2.25.0/tests/app_server/test_vibe_code.py +--- mistral-vibe-2.25.1.orig/tests/app_server/test_vibe_code.py ++++ mistral-vibe-2.25.1/tests/app_server/test_vibe_code.py @@ -68,7 +68,7 @@ def test_app_server_import_does_not_requ capture_output=True, env=env, @@ -20,10 +20,10 @@ ) assert result.returncode == 0, result.stderr -Index: mistral-vibe-2.25.0/tests/cli/test_ui_config_and_model_picker.py +Index: mistral-vibe-2.25.1/tests/cli/test_ui_config_and_model_picker.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/cli/test_ui_config_and_model_picker.py -+++ mistral-vibe-2.25.0/tests/cli/test_ui_config_and_model_picker.py +--- mistral-vibe-2.25.1.orig/tests/cli/test_ui_config_and_model_picker.py ++++ mistral-vibe-2.25.1/tests/cli/test_ui_config_and_model_picker.py @@ -1,5 +1,6 @@ from __future__ import annotations @@ -56,10 +56,10 @@ assert app.config.active_model.alias == "alpha" assert app._current_bottom_app == BottomApp.Input -Index: mistral-vibe-2.25.0/tests/cli/test_ui_session_incremental_renderer.py +Index: mistral-vibe-2.25.1/tests/cli/test_ui_session_incremental_renderer.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/cli/test_ui_session_incremental_renderer.py -+++ mistral-vibe-2.25.0/tests/cli/test_ui_session_incremental_renderer.py +--- mistral-vibe-2.25.1.orig/tests/cli/test_ui_session_incremental_renderer.py ++++ mistral-vibe-2.25.1/tests/cli/test_ui_session_incremental_renderer.py @@ -5,6 +5,8 @@ from pathlib import Path import time @@ -69,10 +69,10 @@ from textual.widgets import Button from tests.conftest import build_test_agent_loop -Index: mistral-vibe-2.25.0/tests/cli/test_ui_skill_dispatch.py +Index: mistral-vibe-2.25.1/tests/cli/test_ui_skill_dispatch.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/cli/test_ui_skill_dispatch.py -+++ mistral-vibe-2.25.0/tests/cli/test_ui_skill_dispatch.py +--- mistral-vibe-2.25.1.orig/tests/cli/test_ui_skill_dispatch.py ++++ mistral-vibe-2.25.1/tests/cli/test_ui_skill_dispatch.py @@ -8,6 +8,8 @@ from weakref import WeakKeyDictionary import pytest @@ -82,10 +82,10 @@ from tests.conftest import ( build_test_agent_loop, build_test_vibe_app, -Index: mistral-vibe-2.25.0/tests/cli/textual_ui/test_app_server_requests.py +Index: mistral-vibe-2.25.1/tests/cli/textual_ui/test_app_server_requests.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/cli/textual_ui/test_app_server_requests.py -+++ mistral-vibe-2.25.0/tests/cli/textual_ui/test_app_server_requests.py +--- mistral-vibe-2.25.1.orig/tests/cli/textual_ui/test_app_server_requests.py ++++ mistral-vibe-2.25.1/tests/cli/textual_ui/test_app_server_requests.py @@ -8,6 +8,8 @@ from unittest.mock import AsyncMock, Mag import pytest @@ -95,17 +95,17 @@ from tests.conftest import ( build_test_agent_loop, build_test_vibe_app, -Index: mistral-vibe-2.25.0/tests/test_ui_rewind.py +Index: mistral-vibe-2.25.1/tests/test_ui_rewind.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/test_ui_rewind.py -+++ mistral-vibe-2.25.0/tests/test_ui_rewind.py -@@ -6,6 +6,8 @@ import time - +--- mistral-vibe-2.25.1.orig/tests/test_ui_rewind.py ++++ mistral-vibe-2.25.1/tests/test_ui_rewind.py +@@ -4,6 +4,8 @@ from contextlib import suppress + import pytest - + +pytestmark = pytest.mark.terminal + - from tests.conftest import build_test_agent_loop, build_test_vibe_app + from tests.conftest import build_test_agent_loop, build_test_vibe_app, wait_until from tests.mock.utils import mock_llm_chunk from tests.stubs.fake_backend import FakeBackend ++++++ harness_importorskip.patch ++++++ --- tests/app_server/test_unified_harness_backend_adapter.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) Index: mistral-vibe-2.25.1/tests/app_server/test_unified_harness_backend_adapter.py =================================================================== --- mistral-vibe-2.25.1.orig/tests/app_server/test_unified_harness_backend_adapter.py +++ mistral-vibe-2.25.1/tests/app_server/test_unified_harness_backend_adapter.py @@ -12,8 +12,11 @@ from types import SimpleNamespace from typing import TYPE_CHECKING, Any, Literal, cast -import mistralai_vibe_local_harness.session_protocol as harness_session_protocol import pytest import tomli_w + +# mistralai-vibe-local-harness is an optional extra: skip this module when +# it is missing instead of failing collection, like the other harness tests +harness_session_protocol = pytest.importorskip("mistralai_vibe_local_harness.session_protocol") from tests.conftest import build_test_agent_loop, build_test_vibe_config from tests.mock.utils import mock_llm_chunk ++++++ history_properties_timeout.patch ++++++ --- /var/tmp/diff_new_pack.QYGfmi/_old 2026-09-10 15:40:19.065310221 +0200 +++ /var/tmp/diff_new_pack.QYGfmi/_new 2026-09-10 15:40:19.075310640 +0200 @@ -14,7 +14,7 @@ +SEEDS = range(5) - @pytest.mark.parametrize("seed", SEEDS) + def test_anchors_and_fixed_point() -> None: @@ -236,7 +236,7 @@ manual edit survives projection, never silently dropped nor conflated with the decisions already baked into disk. Reverting every hunk then bottoms out at v0. ++++++ mistral-vibe-2.25.0.tar.gz -> mistral-vibe-2.25.1.tar.gz ++++++ ++++ 26687 lines of diff (skipped) ++++++ no_terminal.patch ++++++ --- /var/tmp/diff_new_pack.QYGfmi/_old 2026-09-10 15:40:20.617375341 +0200 +++ /var/tmp/diff_new_pack.QYGfmi/_new 2026-09-10 15:40:20.628375803 +0200 @@ -21,10 +21,10 @@ tests/tools/test_ui_bash_execution.py | 2 ++ tests/vscode_extension_promo/test_ui_vscode_extension_promo.py | 2 ++ 19 files changed, 39 insertions(+) -Index: mistral-vibe-2.25.0/pyproject.toml +Index: mistral-vibe-2.25.1/pyproject.toml =================================================================== ---- mistral-vibe-2.25.0.orig/pyproject.toml -+++ mistral-vibe-2.25.0/pyproject.toml +--- mistral-vibe-2.25.1.orig/pyproject.toml ++++ mistral-vibe-2.25.1/pyproject.toml @@ -273,6 +273,7 @@ timeout = 10 markers = [ "unified_supported: backend contract behavior implemented by the Unified Harness", @@ -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.25.0/tests/cli/test_switching_mode.py +Index: mistral-vibe-2.25.1/tests/cli/test_switching_mode.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/cli/test_switching_mode.py -+++ mistral-vibe-2.25.0/tests/cli/test_switching_mode.py +--- mistral-vibe-2.25.1.orig/tests/cli/test_switching_mode.py ++++ mistral-vibe-2.25.1/tests/cli/test_switching_mode.py @@ -5,6 +5,8 @@ from unittest.mock import patch 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.25.0/tests/cli/test_ui_clipboard_notifications.py +Index: mistral-vibe-2.25.1/tests/cli/test_ui_clipboard_notifications.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/cli/test_ui_clipboard_notifications.py -+++ mistral-vibe-2.25.0/tests/cli/test_ui_clipboard_notifications.py +--- mistral-vibe-2.25.1.orig/tests/cli/test_ui_clipboard_notifications.py ++++ mistral-vibe-2.25.1/tests/cli/test_ui_clipboard_notifications.py @@ -3,6 +3,8 @@ from __future__ import annotations from unittest.mock import patch @@ -59,10 +59,10 @@ from textual.selection import Selection from textual.widget import Widget -Index: mistral-vibe-2.25.0/tests/cli/test_ui_config_and_model_picker.py +Index: mistral-vibe-2.25.1/tests/cli/test_ui_config_and_model_picker.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/cli/test_ui_config_and_model_picker.py -+++ mistral-vibe-2.25.0/tests/cli/test_ui_config_and_model_picker.py +--- mistral-vibe-2.25.1.orig/tests/cli/test_ui_config_and_model_picker.py ++++ mistral-vibe-2.25.1/tests/cli/test_ui_config_and_model_picker.py @@ -3,6 +3,9 @@ from __future__ import annotations 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, wait_until -Index: mistral-vibe-2.25.0/tests/cli/test_ui_config_screen.py +Index: mistral-vibe-2.25.1/tests/cli/test_ui_config_screen.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/cli/test_ui_config_screen.py -+++ mistral-vibe-2.25.0/tests/cli/test_ui_config_screen.py +--- mistral-vibe-2.25.1.orig/tests/cli/test_ui_config_screen.py ++++ mistral-vibe-2.25.1/tests/cli/test_ui_config_screen.py @@ -4,6 +4,9 @@ from pathlib import Path import tomllib @@ -87,10 +87,10 @@ from textual.pilot import Pilot import tomli_w -Index: mistral-vibe-2.25.0/tests/cli/test_ui_exit_command.py +Index: mistral-vibe-2.25.1/tests/cli/test_ui_exit_command.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/cli/test_ui_exit_command.py -+++ mistral-vibe-2.25.0/tests/cli/test_ui_exit_command.py +--- mistral-vibe-2.25.1.orig/tests/cli/test_ui_exit_command.py ++++ mistral-vibe-2.25.1/tests/cli/test_ui_exit_command.py @@ -4,6 +4,8 @@ from typing import Any import pytest @@ -100,10 +100,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.25.0/tests/cli/test_ui_theme_picker.py +Index: mistral-vibe-2.25.1/tests/cli/test_ui_theme_picker.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/cli/test_ui_theme_picker.py -+++ mistral-vibe-2.25.0/tests/cli/test_ui_theme_picker.py +--- mistral-vibe-2.25.1.orig/tests/cli/test_ui_theme_picker.py ++++ mistral-vibe-2.25.1/tests/cli/test_ui_theme_picker.py @@ -7,6 +7,8 @@ from unittest.mock import AsyncMock, Moc import pytest @@ -113,10 +113,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.25.0/tests/cli/test_whoami_command.py +Index: mistral-vibe-2.25.1/tests/cli/test_whoami_command.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/cli/test_whoami_command.py -+++ mistral-vibe-2.25.0/tests/cli/test_whoami_command.py +--- mistral-vibe-2.25.1.orig/tests/cli/test_whoami_command.py ++++ mistral-vibe-2.25.1/tests/cli/test_whoami_command.py @@ -4,6 +4,8 @@ import asyncio import pytest @@ -126,10 +126,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.25.0/tests/cli/test_word_selection.py +Index: mistral-vibe-2.25.1/tests/cli/test_word_selection.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/cli/test_word_selection.py -+++ mistral-vibe-2.25.0/tests/cli/test_word_selection.py +--- mistral-vibe-2.25.1.orig/tests/cli/test_word_selection.py ++++ mistral-vibe-2.25.1/tests/cli/test_word_selection.py @@ -3,6 +3,8 @@ from __future__ import annotations from typing import Any, ClassVar, cast @@ -139,10 +139,10 @@ from textual import events from textual.geometry import Offset, Region from textual.screen import Screen -Index: mistral-vibe-2.25.0/tests/cli/textual_ui/test_chat_input_word_drag.py +Index: mistral-vibe-2.25.1/tests/cli/textual_ui/test_chat_input_word_drag.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/cli/textual_ui/test_chat_input_word_drag.py -+++ mistral-vibe-2.25.0/tests/cli/textual_ui/test_chat_input_word_drag.py +--- mistral-vibe-2.25.1.orig/tests/cli/textual_ui/test_chat_input_word_drag.py ++++ mistral-vibe-2.25.1/tests/cli/textual_ui/test_chat_input_word_drag.py @@ -1,6 +1,8 @@ from __future__ import annotations @@ -152,23 +152,23 @@ from textual import events from textual.widgets.text_area import Selection -Index: mistral-vibe-2.25.0/tests/cli/textual_ui/test_message_queue_ui.py +Index: mistral-vibe-2.25.1/tests/cli/textual_ui/test_message_queue_ui.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/cli/textual_ui/test_message_queue_ui.py -+++ mistral-vibe-2.25.0/tests/cli/textual_ui/test_message_queue_ui.py -@@ -6,6 +6,8 @@ import time - +--- mistral-vibe-2.25.1.orig/tests/cli/textual_ui/test_message_queue_ui.py ++++ mistral-vibe-2.25.1/tests/cli/textual_ui/test_message_queue_ui.py +@@ -4,6 +4,8 @@ from collections.abc import Iterator + import pytest - + +pytestmark = pytest.mark.terminal + - 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.25.0/tests/e2e/agent_loop_characterization/test_resume.py + from tests.conftest import ( + build_test_agent_loop, + build_test_vibe_app, + Index: mistral-vibe-2.25.1/tests/e2e/agent_loop_characterization/test_resume.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/e2e/agent_loop_characterization/test_resume.py -+++ mistral-vibe-2.25.0/tests/e2e/agent_loop_characterization/test_resume.py +--- mistral-vibe-2.25.1.orig/tests/e2e/agent_loop_characterization/test_resume.py ++++ mistral-vibe-2.25.1/tests/e2e/agent_loop_characterization/test_resume.py @@ -8,6 +8,8 @@ import time import pexpect import pytest @@ -178,10 +178,10 @@ from tests.e2e.agent_loop_characterization.support import ( assert_assistant_tool_call_present, assert_message_content_present, -Index: mistral-vibe-2.25.0/tests/e2e/agent_loop_characterization/test_subagents.py +Index: mistral-vibe-2.25.1/tests/e2e/agent_loop_characterization/test_subagents.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/e2e/agent_loop_characterization/test_subagents.py -+++ mistral-vibe-2.25.0/tests/e2e/agent_loop_characterization/test_subagents.py +--- mistral-vibe-2.25.1.orig/tests/e2e/agent_loop_characterization/test_subagents.py ++++ mistral-vibe-2.25.1/tests/e2e/agent_loop_characterization/test_subagents.py @@ -5,6 +5,8 @@ from pathlib import Path import pexpect import pytest @@ -191,10 +191,10 @@ from tests.e2e.agent_loop_characterization.support import ( assert_message_content_present, assert_tool_result_contains, -Index: mistral-vibe-2.25.0/tests/e2e/agent_loop_characterization/test_tool_execution.py +Index: mistral-vibe-2.25.1/tests/e2e/agent_loop_characterization/test_tool_execution.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/e2e/agent_loop_characterization/test_tool_execution.py -+++ mistral-vibe-2.25.0/tests/e2e/agent_loop_characterization/test_tool_execution.py +--- mistral-vibe-2.25.1.orig/tests/e2e/agent_loop_characterization/test_tool_execution.py ++++ mistral-vibe-2.25.1/tests/e2e/agent_loop_characterization/test_tool_execution.py @@ -6,6 +6,8 @@ from pathlib import Path import pexpect import pytest @@ -204,10 +204,10 @@ from tests.e2e.agent_loop_characterization.support import ( answer_approval, assert_assistant_tool_call_present, -Index: mistral-vibe-2.25.0/tests/e2e/agent_loop_characterization/test_tool_permissions.py +Index: mistral-vibe-2.25.1/tests/e2e/agent_loop_characterization/test_tool_permissions.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/e2e/agent_loop_characterization/test_tool_permissions.py -+++ mistral-vibe-2.25.0/tests/e2e/agent_loop_characterization/test_tool_permissions.py +--- mistral-vibe-2.25.1.orig/tests/e2e/agent_loop_characterization/test_tool_permissions.py ++++ mistral-vibe-2.25.1/tests/e2e/agent_loop_characterization/test_tool_permissions.py @@ -6,6 +6,8 @@ from pathlib import Path import pexpect import pytest @@ -217,10 +217,10 @@ from tests.e2e.agent_loop_characterization.support import ( answer_approval, assert_tool_result_contains, -Index: mistral-vibe-2.25.0/tests/e2e/agent_loop_characterization/test_user_interaction.py +Index: mistral-vibe-2.25.1/tests/e2e/agent_loop_characterization/test_user_interaction.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/e2e/agent_loop_characterization/test_user_interaction.py -+++ mistral-vibe-2.25.0/tests/e2e/agent_loop_characterization/test_user_interaction.py +--- mistral-vibe-2.25.1.orig/tests/e2e/agent_loop_characterization/test_user_interaction.py ++++ mistral-vibe-2.25.1/tests/e2e/agent_loop_characterization/test_user_interaction.py @@ -7,6 +7,8 @@ import time import pexpect import pytest @@ -230,10 +230,10 @@ from tests.e2e.agent_loop_characterization.support import ( APPROVAL_INPUT_GRACE_PERIOD_S, assert_tool_result_contains, -Index: mistral-vibe-2.25.0/tests/onboarding/test_ui_onboarding.py +Index: mistral-vibe-2.25.1/tests/onboarding/test_ui_onboarding.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/onboarding/test_ui_onboarding.py -+++ mistral-vibe-2.25.0/tests/onboarding/test_ui_onboarding.py +--- mistral-vibe-2.25.1.orig/tests/onboarding/test_ui_onboarding.py ++++ mistral-vibe-2.25.1/tests/onboarding/test_ui_onboarding.py @@ -10,6 +10,8 @@ from unittest.mock import MagicMock, pat import keyring from keyring.errors import KeyringError @@ -243,10 +243,10 @@ from textual.content import Content from textual.events import Resize from textual.geometry import Size -Index: mistral-vibe-2.25.0/tests/tools/test_ui_bash_execution.py +Index: mistral-vibe-2.25.1/tests/tools/test_ui_bash_execution.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/tools/test_ui_bash_execution.py -+++ mistral-vibe-2.25.0/tests/tools/test_ui_bash_execution.py +--- mistral-vibe-2.25.1.orig/tests/tools/test_ui_bash_execution.py ++++ mistral-vibe-2.25.1/tests/tools/test_ui_bash_execution.py @@ -5,6 +5,8 @@ import time from pydantic import JsonValue import pytest @@ -256,10 +256,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.25.0/tests/vscode_extension_promo/test_ui_vscode_extension_promo.py +Index: mistral-vibe-2.25.1/tests/vscode_extension_promo/test_ui_vscode_extension_promo.py =================================================================== ---- mistral-vibe-2.25.0.orig/tests/vscode_extension_promo/test_ui_vscode_extension_promo.py -+++ mistral-vibe-2.25.0/tests/vscode_extension_promo/test_ui_vscode_extension_promo.py +--- mistral-vibe-2.25.1.orig/tests/vscode_extension_promo/test_ui_vscode_extension_promo.py ++++ mistral-vibe-2.25.1/tests/vscode_extension_promo/test_ui_vscode_extension_promo.py @@ -8,6 +8,8 @@ from unittest.mock import patch import pytest ++++++ obs-test-synchronization.patch ++++++ --- /var/tmp/diff_new_pack.QYGfmi/_old 2026-09-10 15:40:20.651376768 +0200 +++ /var/tmp/diff_new_pack.QYGfmi/_new 2026-09-10 15:40:20.674377733 +0200 @@ -73,4 +73,88 @@ await _assert_no_notifications(app, pilot, timeout=0.3) assert notifier.fetch_update_calls == 1 +Index: mistral-vibe-2.25.1/tests/autocompletion/test_ui_chat_autocompletion.py +=================================================================== +--- mistral-vibe-2.25.1.orig/tests/autocompletion/test_ui_chat_autocompletion.py ++++ mistral-vibe-2.25.1/tests/autocompletion/test_ui_chat_autocompletion.py +@@ -2,6 +2,7 @@ + + from pathlib import Path + ++import asyncio + import pytest + from textual.widgets import Markdown + +@@ -12,6 +13,14 @@ + _CompletionRow, + ) + from vibe.cli.textual_ui.widgets.chat_input.container import ChatInputContainer ++ ++async def _wait_until(pilot, predicate, timeout: float = 6.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.mark.asyncio +@@ -183,6 +192,21 @@ + + await pilot.press(*"@src/core/extra/") + ++ expected = ( ++ "src/core/extra/extra_file_1.py", ++ "src/core/extra/extra_file_10.py", ++ "src/core/extra/extra_file_11.py", ++ "src/core/extra/extra_file_12.py", ++ "src/core/extra/extra_file_2.py", ++ "src/core/extra/extra_file_3.py", ++ "src/core/extra/extra_file_4.py", ++ "src/core/extra/extra_file_5.py", ++ "src/core/extra/extra_file_6.py", ++ "src/core/extra/extra_file_7.py", ++ ) ++ assert await _wait_until( ++ pilot, lambda: all(e in popup.content_text for e in expected) ++ ) + popup_content = popup.content_text + assert "src/core/extra/extra_file_1.py" in popup_content + assert "src/core/extra/extra_file_10.py" in popup_content +@@ -225,9 +249,8 @@ + + await pilot.press(*"Print @REA") + await pilot.press("tab") +- await pilot.pause(0.2) +- +- assert chat_input.value == "Print @README.md " ++ ++ assert await _wait_until(pilot, lambda: chat_input.value == "Print @README.md ") + assert popup.styles.display == "none" + + +@@ -242,7 +265,7 @@ + await pilot.press(*"Print @src/m") + await pilot.press("enter") + +- assert chat_input.value == "Print @src/main.py " ++ assert await _wait_until(pilot, lambda: chat_input.value == "Print @src/main.py ") + assert popup.styles.display == "none" + + +@@ -317,7 +340,7 @@ + await pilot.press(*message_to_fill_history) + await pilot.press("enter") + await pilot.press("up", "up") +- assert chat_input.value == "Check @src/main.py" ++ assert await _wait_until(pilot, lambda: chat_input.value == "Check @src/main.py") + await pilot.pause(0.2) + # ensure popup is hidden - user was navigating history: we don't want to interrupt + assert popup.styles.display == "none" +@@ -329,3 +353,3 @@ + await pilot.pause(0.1) +- assert chat_input.value == "Check @src/main.py" ++ assert await _wait_until(pilot, lambda: chat_input.value == "Check @src/main.py") + await pilot.pause(0.2)
