Patterns
Merge related threads deliberately
Select a related source conversation while preserving the canonical thread and original message identity.
On this page
User goal
Select a related source conversation while preserving the canonical thread and original message identity.
Workflow
| Step | Expected behavior |
|---|---|
| 1 | Open More conversation actions and choose Merge conversation. |
| 2 | Review the canonical subject/person/message count. |
| 3 | Choose another non-junk conversation; same-person options are ranked first. |
| 4 | Read the consequence summary and source message count. |
| 5 | Confirm merge; local source thread disappears and its messages join the target. |
Decision and composition rules
- Same person is a ranking preference, not an enforced condition.
- Target ID remains canonical.
- Production must preserve routing/history and validate cross-contact consequences.
Edge cases and recovery
- No selection disables merge.
- Display-string sorting is not reliable chronology.
- There is no verified undo or durable transaction.
- Do not merge live data during capture; specimen callback is a no-op.
Persistence boundary
The demonstrated frontend uses local React state or static fixtures. Read the readiness topic before connecting these actions to authenticated persistence. A visible toast, badge or timer is not a server acknowledgement.
Source references
| File | Responsibility |
|---|---|
| components/inbox/merge-dialog.tsx | Decision UI |
| components/helpdesk-app.tsx | Local merge logic |
Examples from the app
Actual Sonarist components with fictional conversations, people, example.com addresses and simulated operational states. Captured at 2× resolution or higher. Select an image to inspect it full size.
Related topics
Source audit: 2026-10-08 · Revision 10f45d1377b5 · Documentation v1.0.0