Skip to content

feat(swift-ios): copy thread metadata from rows - #6134

Draft
saphid wants to merge 13 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:saphid/swiftui-thread-menu-copy-metadata
Draft

feat(swift-ios): copy thread metadata from rows#6134
saphid wants to merge 13 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:saphid/swiftui-thread-menu-copy-metadata

Conversation

@saphid

@saphid saphid commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • add Copy Metadata to thread row menus
  • format stable project, branch, checkout, provider, and thread details for sharing
  • keep the copied payload independent of visible row truncation

Dependency

Stacked on the swipe-safety work in #6117. Review commit 7280970f6 for this feature until that PR lands.

Verification

UI

Copy Metadata is available from the thread row context menu and copies a readable multi-line summary.

Note

Add thread metadata copy menu and settle undo toast to iOS sidebar

  • Adds a context menu to thread rows in HomeThreadCollectionView.swift with copy actions for path, branch, and thread ID, backed by the new ThreadMetadataCopy.swift model.
  • Adds a temporary "Thread settled" undo toast in WorkspaceView.swift that auto-expires after 5s (15s with VoiceOver/Switch Control) and restores pin and snooze state on undo.
  • Replaces hardcoded trailing swipe actions with a plan-driven approach: primary lifecycle action (restore/settle/reopen/archive) plus Delete; full-swipe triggers settle or reopen only, never delete.
  • Deleting a thread now requires an explicit confirmation alert rather than acting immediately on swipe.
  • setSettled, setSnoozed, and setPinned in FeatureRootModel.swift now return Bool indicating mutation success, used by the undo flow to conditionally restore state.
📊 Macroscope summarized 7280970. 5 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted

🗂️ Filtered Issues

No issues evaluated.

@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 0a0ac529-7229-43f2-b727-0d666363ec34

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added the vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. label Aug 11, 2026
@github-actions github-actions Bot added the size:XXL 1,000+ changed lines (additions + deletions). label Aug 11, 2026
return notice
}

mutating func finishUndo(id: UUID) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Medium Workspace/WorkspaceView.swift:104

finishUndo clears the notice unconditionally, even when the undo operation fails. Because the caller invokes it from a defer block, if model.setSettled(..., settled: false) (or a subsequent pin/snooze restoration) returns false, the thread stays settled or partially restored while the undo notice disappears — leaving the user with no way to retry. Consider clearing the notice only when the undo succeeded, or resetting undoInProgressID while preserving the notice on failure so the user can retry.

🤖 Copy this AI Prompt to have your agent fix this:
In file @apps/swift-ios/Features/Workspace/WorkspaceView.swift around line 104:

`finishUndo` clears the notice unconditionally, even when the undo operation fails. Because the caller invokes it from a `defer` block, if `model.setSettled(..., settled: false)` (or a subsequent pin/snooze restoration) returns `false`, the thread stays settled or partially restored while the undo notice disappears — leaving the user with no way to retry. Consider clearing the notice only when the undo succeeded, or resetting `undoInProgressID` while preserving the notice on failure so the user can retry.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL 1,000+ changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant