Skip to content

SwiftUI: reveal message timestamps on swipe - #8620

Open
saphid wants to merge 4 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:swiftui/pr-112-timestamps
Open

SwiftUI: reveal message timestamps on swipe#8620
saphid wants to merge 4 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:swiftui/pr-112-timestamps

Conversation

@saphid

@saphid saphid commented Aug 29, 2026

Copy link
Copy Markdown
Contributor

What Changed

Reveal message timestamps by swiping the SwiftUI transcript left, keeping each time aligned with its message. Releasing or cancelling returns the transcript to its normal position.

Why

This makes several message times visible together while preserving vertical scrolling, text selection, code-block scrolling, streaming updates and accessibility.

Verification and remaining proof

Candidate: bfb058405a28d78e87eec3923475720180744507. This PR targets t3code/rebuild-mobile-app-swift; its historical integration base is b67837984e5650888b1eed0e1cd7fff83625f696. The current native parent inspected in the readiness review is b99405468a6b2be1e0f67d551ece824b1627e35c. Merging this child does not by itself deliver the native app to upstream main.

The hosted native build/test job passed on the candidate. The earlier description reports passing Check, Test and native CI on this candidate. It provides no current integrated replacement recording; its previous media was removed after anonymous requests returned 404. No local build, test or client session was run for this description update; full historical local invocations were not recovered here.

Adapt the transcript wrapper to the current parent and capture gesture competition, streaming, bottom anchoring, release/cancel, Reduce Motion and VoiceOver. Historical occupied Simulator slots are not a current capacity check. This PR is not evidence-complete for human merge review against the current native parent.

UI evidence gap

Current comparable before/after captures and interaction proof remain missing. No illustrative or synthetic media is presented as application proof.

Description and evidence audit: GPT-6 in Codex, using prepare-proof-media from #9926.

@coderabbitai

coderabbitai Bot commented Aug 29, 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: 75305a26-1569-4b26-9d68-bd93d33773e9

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

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

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 29, 2026
Comment thread apps/swift-ios/Features/Chat/ThreadDetailView.swift Outdated
Comment thread apps/swift-ios/Features/Chat/ThreadDetailView.swift
@macroscopeapp

macroscopeapp Bot commented Aug 29, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This adds a substantial user-facing iOS transcript interaction involving gesture arbitration, row overlays, streaming updates, accessibility, and bottom-anchor scrolling. Its production behavior extends well beyond a small isolated UI tweak, so the interaction and scrolling impact should receive human review.

You can add or adjust custom eligibility rules. Learn more.

…eveal

Two review findings on the swipe-to-reveal timestamps feature:

Eligibility (streaming -> complete) decided a structural branch around the
message view, so completing a stream rebuilt the row and dropped
MarkdownMessageView's @State, breaking its streaming -> complete promote
path. The message view now sits at one fixed structural position and only
the timestamp overlay is conditional; the accessibility modifier branches
on role, which never changes, and announces an empty value while a message
is still streaming.

Dismissing the reveal zeroed the anchors immediately, so timestamps faded
out while drifting to their row midpoints and the transcript re-anchored
mid-dismissal. beginDismissal() now only zeroes the width; the anchors
survive the slide-back and are cleared by the release animation's
completion, guarded by a generation counter so a stale completion cannot
settle a newer gesture. The collection view mirrors
timestampReveal.isActive on every update so resets that bypass the
completion cannot leave the bottom-anchor suppression stuck on.

Co-Authored-By: Claude <noreply@anthropic.com>
Comment thread apps/swift-ios/Features/Chat/ThreadDetailView.swift

@cursor cursor Bot left a comment

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.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit e87bce8. Configure here.

Comment thread apps/swift-ios/Features/Chat/ThreadDetailView.swift
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL 500-999 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