Skip to content

Fix V2 attachment leakage between conversations - #1896

Merged
Paul Lizer (paullizer) merged 2 commits into
paullizer-react-v2-uifrom
paullizer-conversation-attachment-isolation
Nov 6, 2026
Merged

Paul Lizer (paullizer) merged 2 commits into
paullizer-react-v2-uifrom
paullizer-conversation-attachment-isolation

Conversation

@paullizer

Copy link
Copy Markdown
Contributor

Summary

  • Fix images, files, and restored document selections leaking into another V2 conversation during rapid navigation, including chips displaying document GUIDs instead of filenames.
  • Retain unsent attachment selections in account/conversation-scoped tab memory. Guard late uploads, message/metadata loads, failed-send recovery, and stale Send handlers by ownership, navigation generation, and draft revision.
  • Preserve upload-created conversation adoption and processing/retry behavior without moving or deleting stored files. Update the upload/context guidance and fix documentation, and bump the application to 0.261.411.

Linked issue

N/A. Issue creation was declined for this work.

Release Notes & Latest Features

  • New Feature
  • Bug Fix
  • UI Enhancement
  • Breaking Change
  • Internal only

Is this visible to end users?

  • Yes
  • No

Is this admin-facing (Admin Settings, governance, deployment, config)?

  • Yes
  • No

Should this become a Latest Feature card?

  • Yes
  • No
  • Already added

Screenshot needed for the card?

  • Yes
  • No
  • Attached

Release notes remain unchanged pending user approval; no Latest Feature card is proposed.

Version bump

  • application/single_app/config.py VERSION third segment bumped, or not needed because this is docs-only
  • deployers/version.txt bumped, or not needed because deployers/ was not changed

Application version: 0.261.410 -> 0.261.411. No deployer changes.

Testing / validation

  • node .\functional_tests\test_v2_chat_attachment_isolation.mjs - passed real ownership, recovery, adoption, scope, revision, and filename helper checks.
  • npm --prefix .\application\v2_ui run build - passed TypeScript compilation and the production build; the existing bundle-size advisory remains.
  • python -m pytest .\ui_tests\test_v2_new_chat_reset.py .\ui_tests\test_v2_chat_attachment_isolation.py -q --tb=short - 33 passed, including 26 new attachment-isolation scenarios. Coverage includes delayed responses, A-to-B-to-A navigation, successive null-ID drafts, interrupted/processing uploads, manual/Orchestrate payloads, and navigation plus Send in one event.
  • python -m pytest .\functional_tests\test_v2_chat_context_picker.py .\functional_tests\test_v2_new_chat_reset.py -k "not orchestration_turns_record_their_streaming_surface_whatever_is_on_screen" -q --tb=short --disable-warnings - 16 passed, 1 deselected. The excluded legacy source-literal assertion also fails against the unmodified base commit.
  • python .\functional_tests\test_docs_app_surface_coverage.py - 7/7 checks passed; inventory is current.
  • python .\functional_tests\test_docs_site_quality.py - 6/6 documentation source checks passed.
  • git -c core.whitespace=blank-at-eol,blank-at-eof,space-before-tab,cr-at-eol diff --check - passed before commit.

The original two browser reproductions failed before the fix and now pass. An exploratory affected-browser sweep passed all 133 test bodies but exposed four shared-fixture teardown errors for an unmocked pending-credential read. This PR supplies that expected empty response without relaxing error checks; both consuming suites were then re-run clean (33 passed above).

Known unrelated legacy limitations are documented in docs/explanation/fixes/V2_CONVERSATION_ATTACHMENT_ISOLATION_FIX.md: the obsolete orchestration-map assertion and closed namespaces missing backend locals in functional_tests/test_v2_prompt_attachment_persistence.py. The exploratory functional run had 64 passes and 37 failures from those existing harness problems; the affected backend routes and legacy harness are unchanged.

Documentation

  • Release notes updated, or not needed
  • Feature documentation updated, or not needed
  • Fix documentation updated, or not needed

Updated the chat upload guide and context-picker documentation. Added the versioned attachment-isolation fix notes with behavior, root cause, validation evidence, and legacy harness limitations. Pending selections are tab-memory only; no server-side draft persistence or historical data repair is introduced.

Security checklist

  • New Flask routes include @swagger_route(security=get_auth_security())
  • Settings sent to non-admin frontends use sanitize_settings_for_user()
  • Browser JavaScript is served from local SimpleChat static assets only; no CDN-hosted JS
  • No secrets, keys, connection strings, or local-only artifacts are included

No Flask routes or settings payloads were added or changed. Filename hydration uses existing authorized, explicitly scoped document-detail readers, and filenames remain escaped React text. Existing source authorization is unchanged.

Keep pending attachments scoped to their original conversation, reject stale async updates and sends, and restore document filenames. Include regression coverage, documentation, and application version 0.261.411.

Co-authored-by: Copilot App <[email protected]>
Resolve the application version conflict at 0.261.414, preserve incoming guided-question support and document planning recovery, and synchronize the strict shared API fixture with current pending-question read contracts.

Co-authored-by: Copilot App <[email protected]>
@paullizer
Paul Lizer (paullizer) merged commit 78595f7 into paullizer-react-v2-ui Nov 6, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants