Repository navigation
cmux NEXT Home: search finds message text and lists matching messages, as in Messages - #28532
austinywang wants to merge 8 commits into
Conversation
…s in Messages The Home list's search matched only conversation names and each one's latest preview. It now also asks the conversation owner's message search (conversation-search) and shows a Messages section under Teammates: the conversation's name and avatar, the matching text and its time. Choosing one opens the conversation at that message. The vendored list takes any number of host search sections, each under its own title, answered asynchronously; a newer keystroke cancels an older answer. Refs #27950 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s; tour home-search
debug.home.sidebar_fixture takes messages [{row, text}] (the list's message search answers
from them; messages: [] gives it back to the owner) and query (types into the search field).
The home-search tour captures "lunch" and "Aziz" in light and dark.
Refs #27950
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…wers Review follow-ups: the quick sections no longer wait on the owner's message search; a request's cancel (the next keystroke or an emptied field) cancels its slow task; VoiceOver reads a message result's time; the fixture gives back the page's own message search; the late-answer test holds the older answer past its cancellation instead of yielding. Refs #27950 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…state) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Correctness review (subagent) and resolutionReviewed head before fixes: b71cb36. Fixes in be6ae7c; final head 2781def. No blocking findings. Should-fix items and what happened:
Not changed: debouncing per-keystroke owner searches. They are local ( Tests: SearchSectionsTests, PinnedUnreadDotLayoutTests, PinDragMotionTests passed on the fleet at be6ae7c (step 8c084307974df7d15d2508e3). Head 2781def only changed the media tour. |
Visual review (subagent) at 2781defImages: the three real-app captures in the PR body (fleet build 30dcd0c39f9875137d3069b6). Reviewer verdict: FIX, with one fix finding. Resolution below.
Passes:
My verdict after resolution: PASS. |
…on ratchet) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Default changesThis pull request changes 3 defaults at
Needs a review. It passes with an independent review receipt on this commit: a comment or review whose first line is Regenerate the snapshot with |
|
Review (subagent, correctness first): SHIP at a693f53 A fresh correctness review of the full diff at this head found nothing blocking. The head adds one commit: the French value of Defaults guard: it flagged Advisory, not changed: |
# Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextApp/Home/DebugHomeSidebarFixture.swift # Packages/macOS/CmuxNext/Sources/CmuxNextHome/Sidebar/HomeSidebarView.swift
…SidebarFixtureRows.messageHits), next to the fixture rows feat moved there The merge of feat-cmux-next brought 2fb439d (fixture rows live in CmuxNextHome) and the arch-ratchet app_lines row. The message fixture moves with the rows: the App only reads the request's {row, text} pairs. Same hits as before (ids by entry index, an hour apart, [] gives the search back to the owner).
… app_lines) The team fixture and the debug Me move to HomeSidebarFixtureRows with the message fixture; the App's search wiring and fixture calls take one line each (searchMessages' own doc says what the wiring does). The App now adds no lines over feat-cmux-next.
|
For awareness: this PR has a SHIP review at its head, but GitHub reports it as conflicting with |
Fixes #27950
Changelog
Changed: searching the Home (Chief) list now also finds messages whose text matches, under a Messages section with the conversation, the matching text and its time, as in Messages. Choosing one opens the conversation at that message.
What was wrong
conversation-search,HomeStore.search), but the list never asked it.Change
MessagesLabSidebar): takes any number of host search sections, each under its own title. The singleextraStart/extraTitlebecameSidebarSectionMarks, which owns the row geometry: row top and its inverse, title rects, hit testing, separators, and the search queue's prerender. A request can answer twice: the quick sections first, then the slow ones replace that answer. Cancelling the request (the next keystroke, or an emptied field) cancels the slow task, and an older query's answer is dropped.CmuxSidebarView:searchSections(sync, shown at once) pluslaterSearchSections(async). A result can carry an avatar and a date. VoiceOver reads that date.HomeSidebarView: Teammates show at once. Messages arrive fromsearchMessages; a hit is shown only for a conversation the list shows, and gets that conversation's name and avatar. Choosing one callsonOpenMessage.TopHomePageView:searchMessagesishomeStore.search(query, limit: 20), local owner only (the router's cloud has nohome.searchyet, so Cloud conversations get no message hits).onOpenMessageuses the permalink pathshow(HomeDockSelection(conversation:message:)), which reveals the message.debug.home.sidebar_fixturetakesmessages[{row, text}] andqueryfor screenshots. There's a new tour,home-search. One new string,home.list.searchMessages("Messages"), translated in all 21 catalog locales.Tests
SearchSectionsTests(MessagesLabSidebar) drives a realCmuxSidebarViewin a window:everySectionShowsUnderItsOwnTitleAfterTheConversations: Teammates shows before the held message search answers. Then the Messages section joins: each title sits on its first row, no row overlaps a title, every row's middle hits that row, a title hits nothing, and a message row carries its text and time and reports its host id when chosen.anOlderQuerysLateAnswerIsNeverShown: holds the "lun" answer past its cancellation and releases it after "lunch" has shown. The list keeps "lunch"'s sections only.Fleet runs:
8c084307974df7d15d2508e3at be6ae7c (package-test-lane.sh suite Packages/Shared/CmuxMessagesLab SearchSectionsTests,PinnedUnreadDotLayoutTests,PinDragMotionTests): all 3 suites pass.d4e7a686571b10f06004be3fat b71cb36, the first version: all 3 pass.These tests are new, so there is no red run on the base: the multi-section API they call does not exist there.
Dev build and captures
Tag
27950-chief-search-messages: fleet build6e44e1550aa9a465b9d298c1at a693f53 (this head). The captures below come from build30dcd0c39f9875137d3069b6at 2781def; the only later commit is the French heading text, which no capture shows.Viewed after image: yes
Visual verdict: Yes: the Messages section reads like iMessage's search results, in the list's own row style, and the header stays on one centre line.
"lunch" (three messages, no name match), "Aziz" (the name match, then a message mentioning him), and Home at rest:
Capture
steps-38032e9241at2781def26c96(fleet build, capture mini, text checked for private data)Capture
steps-e95fe29296at2781def26c96(fleet build, capture mini, text checked for private data)Capture
tour-homeat2781def26c96(fleet build, capture mini, text checked for private data)Review
A correctness review subagent at edc6172 found nothing blocking. Its should-fix items are fixed in be6ae7c:
Not changed: one owner search per keystroke. Each search is local and cancelled by the next keystroke, and the repo rules say not to debounce visible work.
Observed / Not run
tour:homefor the header at rest.tour:homeat 3e65269, the header before.conversation-searchround trip in the app. The captures use the DEBUG fixture's hits; the daemon command has its own Rust tests (conversation_tests.rs), unchanged here.🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
Home list search now matches message text, not just conversation names and latest previews. Matching messages appear in a new Messages section under Teammates — each row shows the conversation's name, the matched text, and the message's time — and choosing one opens the conversation at that message, as in Messages.
home.searchyet.Tests
SearchSectionsTestsdrives a realCmuxSidebarView: every section shows under its own title after the conversations, no row overlaps a title, and choosing a message row reports its host id.Written for commit 2781def. Summary will update on new commits.