CmuxConversation iOS: the reply thread drops from under the quote's tail
Upstream copy of the CmuxConversation part of #24202 (feat-cmux-next), so Packages/iOS/CmuxConversation stays byte-identical on both branches (the TestFlight builder checks for drift).
Cause. MessageCellLayout started the thread line beside the quote at its middle, which drew a hook out of the quote's leading side through its tail (user report in Chief, 2026-10-21).
Fix. The line comes from ConversationReplyThread (CmuxConversationGeometry). It drops from under the quoted bubble's tail (or, in a group, the avatar column beside an incoming quote), turns toward a reply on the other side level with the reply's middle, and ends in a short level run before the reply. A same-side reply gets a straight line that stops above it. The row keeps room for the quote's tail. Before/after against Messages, in both directions and light and dark: see #24202.
Tests. swift test --filter ConversationReplyThreadTests on a fleet mini: 6 tests with 13 issues on the old geometry, all pass now. All 255 CmuxConversationGeometryTests pass.
The macOS UI (MacConversationRows) has its own thread layout and is unchanged.
š¤ Generated with Claude Code
![View with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/view-with-codesmith-dark-v3-3x.png)
![Autofix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark-3x.png)
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Fixes the inline reply thread line in CmuxConversation iOS so it no longer draws a hook out of the quote's leading side through its tail.
- The
ConversationReplyThreadgeometry drops the line from under the quote's tail (or a group's avatar column), turns it toward a reply on the other side level with the reply's middle, and ends in a short level run short of the reply; same-side replies get a straight line that stops above them. - The line meets the reply's first piece of content, so a photo or file above the caption is never crossed.
- Rows now keep room for the quote's tail and for a same-side reply's straight line.
- Keeps
Packages/iOS/CmuxConversationbyte-identical with thefeat-cmux-nextbranch's #24202, so the TestFlight drift check passes. - Adds
ConversationReplyThreadTests(6 tests, all failing on the old geometry) plus a new geometry suite (255 tests).