Repository navigation
fix(search): search saved conversations while the community is offline or connecting - #2724
Conversation
kalvinnchau
left a comment
There was a problem hiding this comment.
🤖 One non-blocking offline author-picker copy issue. No blocking correctness or security defects identified in the reviewed scope.
Review on #2724 pointed out that, while a community runs on its saved copy, the from: and in:@ picker still recommended recoveries that cannot work: from:a asked for at least two characters, then from:al said "People search is unavailable. Try a longer name." No query length finds more people until the relay answers. When the picker's answer comes from the saved state and nothing known matches, it now says "Connect to this community to search people.", ahead of the too-short and lookup-failed copy. The wording follows the scoped search's "Connect to this community to search messages." and fits both connecting and disconnected; the status line under the results already says which. Members and profiles already known are still offered when they match, and once the session is live the picker shows "Searching people…" until the relay answers, as before. The help guide already says people are searched once the community connects, so it is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Matt Toohey <contact@matttoohey.com>
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord’s automated source review via Wes’s account, integrating independent Rocket, Mantis and Groot lanes.
One P2 finding inline. The saved-session lookup gates, Retry focus ordering and scoped-search guard otherwise look consistent with the intended behavior. Kalvin’s earlier author-picker copy finding is addressed at this head.
Reviewed head 6a2f6131f14168ff37516eb8b9125170365cec00, target base 0525a67eead8f6cbb3ac8ab672b3701a4df8cce5 (diff from merge-base 7d06475db5a130eb59b92bab08b9aeac70b895bc). Source-only: regression tests were inspected, not run; no app/device, screen-reader or CI validation. PR description and one extracted demo thumbnail inspected; the full video remains unverified.
Review on #2724 pointed out that, while a community runs on its saved copy, the from: and in:@ picker still recommended recoveries that cannot work: from:a asked for at least two characters, then from:al said "People search is unavailable. Try a longer name." No query length finds more people until the relay answers. When the picker's answer comes from the saved state and nothing known matches, it now says "Connect to this community to search people.", ahead of the too-short and lookup-failed copy. The wording follows the scoped search's "Connect to this community to search messages." and fits both connecting and disconnected; the status line under the results already says which. Members and profiles already known are still offered when they match, and once the session is live the picker shows "Searching people…" until the relay answers, as before. The help guide already says people are searched once the community connects, so it is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Matt Toohey <contact@matttoohey.com>
6a2f613 to
47bd85c
Compare
Review on #2724 pointed out that saved archived conversations dropped out of name search while a community runs on its saved copy. Restoration marks every saved member row read-only and cached until the relay confirms it, and SearchResults admitted archived stream, forum and Solo rows only when they were not read-only. A joined "Past project" was therefore found by name when connected but not while offline or connecting, although joined archives stay available through search by design (docs/channels.md); they are only kept out of the sidebar and Recent activity. Archived rows that are saved now pass that check too. The type restriction still applies, so saved archived DMs stay out, and so do saved rows the viewer holds as a guest, matching the live result. Recent activity still leaves archived rows out. The archived-name test now runs each channel type against a restored cached-only session as well as a live one, and the exclusion matrix covers a saved archived DM and a saved guest row. The docs already describe this behaviour, so they are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Matt Toohey <contact@matttoohey.com>
…e or connecting When a community runs on its saved copy (the relay session is failing, or a launch is still connecting), the sidebar lists and opens saved channels, but ⌘K fell back to Pages-only search: typing a channel name said "No matching pages.", and the connecting state explained nothing. CommunitySearch now lets a saved (cached) session through to SearchResults outside a conversation scope, so saved conversations are listed under Recent activity, ranked and opened as they are when connected. One status line says what is searched, "Only saved conversations are searched while this community is disconnected." with Retry connection, or "…until this community connects." while connecting. Retry connection returns focus to the search field before its button goes away. Without a saved copy, a connecting community now shows "Connecting to this community…" once something is typed. Search scoped to a conversation is unchanged. While saved, SearchResults keeps the relay's message, people and open-channel lookups idle instead of showing Retry rows that can't succeed, and leaves out "Search in …" and the Channels tab, which need the relay. The from: and in:@ author picker reads no agents, archives or profiles from the relay: it offers members and profiles already known and keeps saying "People search is unavailable. Try a longer name." Its answer belongs to the saved state, so once the session is live the picker shows "Searching people…" until the relay answers. The list behind Unread and Recent activity also admits cached rows, as the channel directory already does. Once the session is ready, the open palette switches to full search in place. Adds the behaviour to the agent help guide. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: mtoohey <mtoohey@squareup.com> Signed-off-by: Matt Toohey <contact@matttoohey.com>
Review on #2724 pointed out that, while a community runs on its saved copy, the from: and in:@ picker still recommended recoveries that cannot work: from:a asked for at least two characters, then from:al said "People search is unavailable. Try a longer name." No query length finds more people until the relay answers. When the picker's answer comes from the saved state and nothing known matches, it now says "Connect to this community to search people.", ahead of the too-short and lookup-failed copy. The wording follows the scoped search's "Connect to this community to search messages." and fits both connecting and disconnected; the status line under the results already says which. Members and profiles already known are still offered when they match, and once the session is live the picker shows "Searching people…" until the relay answers, as before. The help guide already says people are searched once the community connects, so it is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Matt Toohey <contact@matttoohey.com>
Review on #2724 pointed out that saved archived conversations dropped out of name search while a community runs on its saved copy. Restoration marks every saved member row read-only and cached until the relay confirms it, and SearchResults admitted archived stream, forum and Solo rows only when they were not read-only. A joined "Past project" was therefore found by name when connected but not while offline or connecting, although joined archives stay available through search by design (docs/channels.md); they are only kept out of the sidebar and Recent activity. Archived rows that are saved now pass that check too. The type restriction still applies, so saved archived DMs stay out, and so do saved rows the viewer holds as a guest, matching the live result. Recent activity still leaves archived rows out. The archived-name test now runs each channel type against a restored cached-only session as well as a live one, and the exclusion matrix covers a saved archived DM and a saved guest row. The docs already describe this behaviour, so they are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Matt Toohey <contact@matttoohey.com>
47bd85c to
2aac94c
Compare
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord’s automated source follow-up via Wes’s account, integrating independent Rocket, Mantis and Groot review.
The previous P2 is addressed in source. Saved member archives now remain available by name, while guest/type restrictions and exclusion from Recent activity are preserved. The regression matrix restores cached-only sessions and checks their cached/readOnly state, labels and opening. No new actionable findings in the repair and relevant rebased integration; the earlier author-picker copy repair remains intact.
Reviewed head 2aac94c415fb3091bafb1412829e176679f7d551 against base/merge-base 3bcf1c4bb1111d924a84d9b710c1da2db80ccf0b. Source-only: tests were inspected, not run; app, reconnect/navigation, accessibility and current CI remain unverified. The attached video is unchanged; prior thumbnail inspection is retained, but its full content remains unverified.
|
🤖 Design follow-up by Drip at Intent: Keep the offline search limit and Retry connection visible while people browse saved-conversation results. The previous P2 is resolved; no remaining findings in this repair. The supplied after screenshot and sampled video show the notice and Retry below the scrolling results. SearchChoices.tsx:816 now renders them outside the scrollport; the footer-specific height rule reserves space for them. Retry still returns focus to the search field before reconnecting, with the existing assertion retained. Checked: delta from |
Design review on #2724 pointed out that, while a community runs on its saved copy, typing "beta" in ⌘K lists the saved channel and then nine plugin-switch rows, enough to push "Only saved conversations are searched while this community is disconnected." and Retry connection below the visible list. The notice was passed to SearchChoices as children, which render after every result group inside the results' scrollport, so it appeared only after scrolling to the bottom. Someone searching for a message saw results without the explanation that messages and people aren't searched. SearchChoices gains a footer slot rendered after the results scrollport, so it stays in view however long the list grows. A palette with a footer takes the footer's room from the results' maximum height, so both still fit the dialog in a short window, and a fade at the scrollport's bottom edge mirrors the one under the field. CommunitySearch and SearchResults pass the offline notice there instead of as children; the Pages-only fallback without a saved copy pins its disconnected line the same way. The notice itself is unchanged: the disconnected and connecting copy, Retry connection returning focus to the search field before the button goes away, and the switch to full search in place once the session connects. Status that belongs with the rows (loading, partial coverage, lookup failures) still scrolls with them, and search scoped to a conversation and the channel directory are unchanged. The SearchChoices test covers the slot, and the PageSearch and SearchResults tests assert the notice and Retry sit outside the results scrollport. The help guide already says the line is under the results, so it is unchanged. Signed-off-by: Matt Toohey <contact@matttoohey.com> Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
🤖 @tellaho Thanks for the catch. Fixed in c3c416a, now the PR head. What changed. Measured, saved copy,
Before (notice and Retry only appear after scrolling to the bottom): After (notice and Retry pinned under the results): Video, before then after, Chromium, fixture relay: pr2724-notice-before-after.mp4Tests: a new |
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord’s automated source follow-up via Wes’s account, integrating independent Rocket, Mantis and Groot review.
No new actionable findings in the footer/layout change since 2aac94c4. The connection notice and Retry now sit outside the results scrollport and its measured height wrapper. Retry retains its input-focus handoff; saved-archive eligibility, relay-read gates and author-picker recovery copy are unchanged. The attached after screenshot shows the notice and Retry visible beneath overflowing results at 1280×800.
Reviewed head c3c416af7a79ee8a9c12f95564ace780c5e08095 against unchanged base/merge-base 3bcf1c4bb1111d924a84d9b710c1da2db80ccf0b. Source-only: tests were inspected, not run. DOM-containment assertions establish placement, not viewport fit; narrow/short windows with enlarged text, live keyboard/screen-reader behavior, native reconnect and current CI remain unverified. Both attached screenshots were inspected; the videos have thumbnail-only coverage, not full-content validation.
Picks up c202642 (block#2837), which fixes the ThreadPanel catch-up test that fails on every run of a merge with the older main. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * origin/main: (155 commits) deps: accept RUSTSEC-2026-0459 for libsqlite3-sys 0.38, move rmcp to 3.9.0 (block#3077) fix(communities): accept invite links and bare hosts in Join a community (block#2412) fix(builderlab): open a remote agent's Activity on the conversation it was opened from (block#3051) refactor(builderlab): keep capabilities fresh in the session (block#3003) feat(moderation): show invite links as a QR code (block#3029) Keep Create agent's Model row readable and give Goose a Thinking row (block#2673) Join a community right after creating it in Settings (block#2991) Let new Solo chats start temporary by default (block#2874) fix(messages): fill a screen that a head of folded agent activity leaves empty (block#3037) fix(search): search saved conversations while the community is offline or connecting (block#2724) test(agents): make version-history date assertion time-zone independent (block#3010) feat(relay): gate artifact writers on NIP-AR support (block#2735) fix(channels): open the dock's community switcher from Personal space (block#2806) fix(members): keep the list's place after a member change (block#2818) fix(channels): keep a launcher's side panel open on Close all tabs (block#2803) fix(activity): show a remote agent's Buzz send as its reply (block#3025) refactor(settings): move external identity authorization to security (block#3032) test(typeahead): serve the fixture pages as a build so cold loads fit (block#2793) feat(channels): list unread top-level mentions in sidebar Activity, and count only unread mentions on the Inbox card (block#2722) fix(solo): delete a removed workspace's settings after the groups write (block#2819) ... Signed-off-by: Andrew Harvard <aharvard@squareup.com>
…pover-card-layout-7eeda1e0 * origin/main: (128 commits) deps: accept RUSTSEC-2026-0459 for libsqlite3-sys 0.38, move rmcp to 3.9.0 (#3077) fix(communities): accept invite links and bare hosts in Join a community (#2412) fix(builderlab): open a remote agent's Activity on the conversation it was opened from (#3051) refactor(builderlab): keep capabilities fresh in the session (#3003) feat(moderation): show invite links as a QR code (#3029) Keep Create agent's Model row readable and give Goose a Thinking row (#2673) Join a community right after creating it in Settings (#2991) Let new Solo chats start temporary by default (#2874) fix(messages): fill a screen that a head of folded agent activity leaves empty (#3037) fix(search): search saved conversations while the community is offline or connecting (#2724) test(agents): make version-history date assertion time-zone independent (#3010) feat(relay): gate artifact writers on NIP-AR support (#2735) fix(channels): open the dock's community switcher from Personal space (#2806) fix(members): keep the list's place after a member change (#2818) fix(channels): keep a launcher's side panel open on Close all tabs (#2803) fix(activity): show a remote agent's Buzz send as its reply (#3025) refactor(settings): move external identity authorization to security (#3032) test(typeahead): serve the fixture pages as a build so cold loads fit (#2793) feat(channels): list unread top-level mentions in sidebar Activity, and count only unread mentions on the Inbox card (#2722) fix(solo): delete a removed workspace's settings after the groups write (#2819) ...


Problem
When a community runs on its saved copy (the relay session is failing, or a launch is still connecting), the sidebar lists and opens saved channels, but ⌘K dropped to a Pages-only search. Typing "beta" said No matching pages. while #Beta sat in the sidebar, and in the connecting state nothing explained why.
Fix
CommunitySearchnow lets a saved (cached) session through toSearchResultsoutside a conversation scope, so saved conversations are listed under Recent activity, ranked and opened as they are when connected. One line under the results says what is searched:While saved,
SearchResultskeeps the relay's message, people and open-channel lookups idle instead of showing Retry rows that can't succeed, and leaves out Search in … and the Channels tab, which need the relay. Thefrom:/in:@author picker reads nothing from the relay either; its text is unchanged. Recent also admits cached rows, matchingChannelDirectoryResults. Retry connection returns focus to the search field before its button unmounts. Once the session is ready, the open palette switches to full search in place.Search scoped to a conversation is unchanged.
Before / after
Same steps, same moments. Left:
main. Right: this branch. Chromium 1280×800, local fixture relay; the relay session failure is modelled as a malformed 200.cmdk-saved-before-after.mp4
Testing
PageSearch.test.tsx: fails onmain(no Recent options), passes here. Each later assertion (relay-read gates, scoped guard, Retry focus, saved→ready picker reset) was checked to fail when its fix alone is removed.PageSearch,SearchResults,SearchChoices,ChannelDirectoryResultstest files pass.tsc --noEmit, Biome anddesign:checkclean.🤖 Generated with Claude Code