Repository navigation
Fix V2 New chat carrying over a busy conversation's state - #1620
Merged
Paul Lizer (paullizer) merged 3 commits intoOct 2, 2026
Merged
Conversation
Clicking New chat while chat orchestration was planning or running kept the old turn's Thinking bubble and a Stop button that did nothing. The empty state never appeared and sending stayed blocked until a reload. Orchestration turns hold the chat store's streaming flag without the chat-stream controller that detachActiveStream clears, and their settle is skipped once the conversation is off screen. - Track each conversation's orchestration streaming surface. New chat clears streaming and messagesLoading, and opening a conversation restores Thinking and Stop only for a turn still running there. - Guard the first-message conversation claim (sendMessage, generateImageFromReference, ensureConversation) with a conversation epoch, so a New chat clicked during creation keeps its empty chat. - Workspace Chat on documents or tags, and Home's Start chatting, now start a brand-new conversation. - Add UI and functional regression tests, refresh stale New chat and Stop source pins, and add a fix doc, guide wording and release notes. Bump the version to 0.261.218. Fixes #1617 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Brings in the 17 commits that landed on the V2 branch since this branch was cut (inline media and maps, GPT-6 catalog fixes, workflow background identity and others). The base already used 0.261.218 through 0.261.225, so the two conflicts are version collisions: - application/single_app/config.py: VERSION set to 0.261.226, the next free version after the base's 0.261.225. - docs/explanation/release_notes.md: every base section is kept as-is, including its own v0.261.218 entry, and this branch's New chat entry moves to a new v0.261.226 section at the top. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The merged base already used 0.261.218, so this fix now ships as 0.261.226. Its version references in tests and docs follow: test headers, the functional test's minimum version, the fix doc (including its config.py row, now 0.261.225 -> 0.261.226), the group documents feature doc and the group workspaces guide. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer)
merged commit Oct 2, 2026
1524eeb
into
paullizer-react-v2-ui
10 checks passed
Paul Lizer (paullizer)
added a commit
to paullizer/simplechat
that referenced
this pull request
Oct 2, 2026
Merged with rerere disabled. microsoft#1620 also moved V2 to 0.261.226, the number this branch had just taken, so config.py merged without a conflict (both sides made the same VERSION change); the next commit renumbers this branch to 0.261.227. docs/explanation/release_notes.md conflicted because both sides added a 0.261.226 section at the top. This branch's section stays on top, then microsoft#1620's section under its own heading, unchanged. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer)
added a commit
to paullizer/simplechat
that referenced
this pull request
Oct 2, 2026
microsoft#1620 moved V2 to 0.261.226 while this branch held it, so this branch takes the next version. Mechanical change only: the same 51 lines in 21 files that the previous renumber touched. V2's own 0.261.226 lines from microsoft#1620 are unchanged. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This was referenced Oct 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
In V2, clicking New chat while chat orchestration was planning or running did not give a clean conversation. The new chat kept the old turn's Thinking bubble and a Stop button that did nothing. It never showed its empty state and wouldn't send until the page was reloaded. V1 always starts a fresh conversation.
streamingflag but has no chat-stream controller, sodetachActiveStream()never clears it.settleOrchestrationTurndoesn't clear it either once the conversation is off screen.chatStorenow tracks which conversations have an orchestration turn showing as in progress. New chat clearsstreamingandmessagesLoading. Opening a conversation shows Thinking and Stop again only if its own turn is still running in this tab.sendMessage,generateImageFromReferenceand orchestrationensureConversation. Clicking New chat while a first message is still creating its conversation keeps the new chat empty. The message is still sent and saved in its own conversation, which appears in the rail.Worth a careful look: if you reopen a conversation whose orchestration turn is still running, Thinking and Stop come back and later reasoning steps appear as usual. Steps that arrived while you were away are not replayed into the live bubble. The plan card and step progress are unaffected.
Linked issue
Fixes #1617
Release Notes & Latest Features
Is this visible to end users?
Is this admin-facing (Admin Settings, governance, deployment, config)?
Should this become a Latest Feature card?
Screenshot needed for the card?
Version bump
application/single_app/config.pyVERSIONthird segment bumped, or not needed because this is docs-only (0.261.225->0.261.226)deployers/version.txtbumped, or not needed becausedeployers/was not changedThe latest
paullizer-react-v2-ui(through #1612) has been merged in. The base had already used0.261.218through0.261.225, so this fix was renumbered to0.261.226.config.py: set to the next free version.release_notes.md: every base section is kept as-is, including the base's own v0.261.218 entry, and this fix's entry sits in a new v0.261.226 section at the top.test_v2_new_chat_reset.py, the fix doc, the feature doc and the guide now say0.261.226.Testing / validation
On the merged head:
npm run typecheckinapplication/v2_ui: passed.npm --prefix .\application\v2_ui run build -- --outDir ..\..\ui_tests\artifacts\orchestration-plan-editorandnpm --prefix .\application\v2_ui run build: passed.python -m pytestrun over 13 UI test files: 212 passed, 112 errors.test_v2_new_chat_reset.py,test_v2_orchestration_planning_retry.py,test_v2_chat_context_selection.py,test_v2_orchestration_streaming_bubble.py, the base's newtest_v2_inline_maps.py,test_v2_orchestration_plan_editor.py,test_v2_orchestration_recovery.py,test_v2_orchestration_dependency_plans.py,test_v2_orchestration_workflow_proposal_card.pyandtest_v2_elicitation_composer.py.python -m pytest .\ui_tests\test_v2_reasoning_controls.py -q: 33 passed.python -m pytest .\ui_tests\test_v2_orchestration_approval_persistence.py -q: 23 passed.python -m pytest .\ui_tests\test_v2_prompt_composer_experience.py -q: 56 passed.python -m pytest test_v2_new_chat_reset.py test_v2_stream_leave_without_cancel.py test_v2_new_chat_scoping.py test_v2_chat_context_picker.py test_v2_conversation_deep_link.py test_v2_inline_maps.py test_v2_inline_media_players.py test_v2_rich_rendering.py test_v2_enhanced_citations.py -q(run infunctional_tests): 79 passed, 2 failed.test_v2_chat_context_picker.py::test_the_composer_no_longer_carries_a_write_only_selectionandtest_v2_conversation_deep_link.py::test_incoming_link_is_captured_before_any_effect_runs. They coverComposer.tsxandChatPage.tsx, which neither this PR nor the merged base touches.python .\functional_tests\test_v2_new_chat_reset.py: 6/6 passed.python .\functional_tests\test_docs_app_surface_coverage.py: 7/7 passed.python .\functional_tests\test_docs_site_quality.py: 6/6 passed.python .\functional_tests\test_docs_release_notes_integrity.py: 0/1, failed. This was already failing before this PR because the generated release-notes pages are stale. The base also added its v0.261.218 to v0.261.224 sections without regenerating them, so about 131 earlier versions are now stale.Before the merge:
application/v2_ui/srcchanges stashed,python -m pytest .\ui_tests\test_v2_new_chat_reset.py -qgave 6 failed, 1 passed. The plain chat-stream case already worked and is kept as a regression guard. The 3 updated tests intest_v2_orchestration_planning_retry.pyandtest_v2_chat_context_selection.pyalso fail with the source changes stashed.python -m pytest .\ui_tests\<file> -q. A further 39/39 passed across 7 suites run directly withpython .\ui_tests\<file>, as those files' headers direct. Per-file results are below.ui_tests/test_chat_saved_analysis.py: pyOpenSSL/cryptography import error during test collection.ui_tests/test_v2_orchestration_plan_editor_backend.pyandui_tests/test_v2_orchestration_recovery_backend.py:ModuleNotFoundError: No module named 'content_screening'.The pytest runs also passed
-p no:cacheproviderand a-W ignorewarning filter.Pre-merge UI regression sweep per file
python -m pytest .\ui_tests\<file> -q, all passed:test_v2_orchestration_actions.pytest_v2_orchestration_approval_persistence.pytest_v2_orchestration_auto_open.pytest_v2_orchestration_conversation_context.pytest_v2_orchestration_dependency_plans.pytest_v2_orchestration_generated_images.pytest_v2_orchestration_model_picker.pytest_v2_orchestration_outputs.pytest_v2_orchestration_plan_editor.pytest_v2_orchestration_planning_retry.pytest_v2_orchestration_recovery.pytest_v2_orchestration_streaming_bubble.pytest_v2_orchestration_workflow_proposal_card.pytest_v2_orchestration_workflow_results_input.pytest_v2_orchestration_workflow_run_floor.pytest_v2_orchestration_workflow_run_links.pytest_v2_group_participant_invites.pytest_v2_elicitation_composer.pytest_v2_reasoning_controls.pytest_v2_prompt_composer_experience.pytest_v2_chat_image_uploads.pytest_v2_image_reference_generation.pypython .\ui_tests\<file>, all passed:test_v2_orchestration_composer.pytest_v2_orchestration_drawer_views.pytest_v2_orchestration_elicitation.pytest_v2_orchestration_pending_approval_resume.pytest_v2_orchestration_plan_card.pytest_v2_orchestration_plan_editing.pytest_v2_orchestration_run_hydration.pyDocumentation
V2_GROUP_DOCUMENT_BROWSING.md, anddocs/guides/manage-group-workspaces.md)docs/explanation/fixes/V2_NEW_CHAT_RESET_FIX.md)Security checklist
@swagger_route(security=get_auth_security())(N/A: no routes added or changed)sanitize_settings_for_user()(N/A: no settings payloads changed)