Repository navigation
Conversation
…tory A sent message stays in the acknowledged list, appended below the feed, until the selected thread's loaded messages contain its echo. A bounded history loads only the newest window, so on a busy thread reopened after more than one window the echo is in unloaded history and the copy stays pinned at the bottom until the app restarts. Treat an acknowledged message as settled when the thread has more history and the message predates the oldest loaded message.
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a small, localized mobile bug fix that adjusts existing acknowledged-message cleanup and adds focused coverage for bounded history cases. It does not introduce a new capability, alter contracts or defaults, or affect production infrastructure. You can add or adjust custom eligibility rules. Learn more. |
|
PR babysit: blocked: CI workflows need maintainer approval |
|
Note This comment is posted by Julius' dot This changes which sent messages remain visible in the mobile thread, but the verification section says the build was not run on a device or simulator and has no before/after screenshots. The verification rule requires UI evidence. Closing for now: reproduce the bounded-history case in the app, attach before/after screenshots and a short recording of reopening the thread, then request reconsideration. |
Problem
On mobile, a sent message can stay at the bottom of a thread below newer messages until the app restarts. This happens when the thread's loaded history window no longer contains the message's echo. Reproduction and cause: #17940.
Change
settledAcknowledgedMessageIds(new, inacknowledged-thread-messages.ts) decides which retained acknowledged messages to drop for the selected thread:history.hasMoreHistory) and the message is older than the oldest loaded message.use-thread-composer-state.tsuses it instead of the id-only check. The check now runs only for the selected thread's retained messages. The outbox and the Pending row for unsent messages are unchanged.Scope and approval
Fixes #17940, which has the full failure analysis. I'm submitting this under the very-small-focused-fix exception (CONTRIBUTING, line 40): it fixes one defect with one pure helper, one hook change and a test. There are no contract, server, web or desktop changes.
Verification
apps/mobile/src/state/acknowledged-thread-messages.test.tscovers four cases: echo loaded, message older than a bounded window (the bug), a fully loaded thread without the echo (kept), and a message inside the window (kept).thread-task-permissions.test.tsmocks./use-thread-detail; I addeduseSelectedThreadDetailStateto that mock because the hook now reads it.vp test runonapps/mobile/src/state: 33 files, 351 tests passed.tsc --noEmitforapps/mobilepasses.vp linton the changed files reports no new warnings.Claude Opus 5.5 via Claude Code