From 99de252081adc21e2cb007a51c2da088eacfb80b Mon Sep 17 00:00:00 2001 From: digua Date: Thu, 23 Jul 2026 21:55:26 +0800 Subject: [PATCH] fix(relationships): scope friend search results Limit friends-mode search results to nodes in the friend graph so selecting an off-scope groupmate cannot replace the canvas with an empty neighborhood. --- .../src/services/people/relationships/service.test.ts | 4 ++-- .../src/services/people/relationships/service.ts | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/node-runtime/src/services/people/relationships/service.test.ts b/packages/node-runtime/src/services/people/relationships/service.test.ts index 95d96e7d..1b6e1ec9 100644 --- a/packages/node-runtime/src/services/people/relationships/service.test.ts +++ b/packages/node-runtime/src/services/people/relationships/service.test.ts @@ -347,7 +347,7 @@ test('excludes silent non-friend group roster members from the close relationshi } }) -test('returns a friends relationships graph without groupmate nodes while keeping full search results', () => { +test('returns only friends in the friends graph and search results', () => { const dir = makeTempDir() try { const service = createPeopleRelationshipsService({ @@ -400,7 +400,7 @@ test('returns a friends relationships graph without groupmate nodes while keepin ) assert.equal( response.searchResults.some((result) => result.key === groupmate.key), - true + false ) } finally { fs.rmSync(dir, { recursive: true, force: true }) diff --git a/packages/node-runtime/src/services/people/relationships/service.ts b/packages/node-runtime/src/services/people/relationships/service.ts index 07d94a6f..6221d936 100644 --- a/packages/node-runtime/src/services/people/relationships/service.ts +++ b/packages/node-runtime/src/services/people/relationships/service.ts @@ -292,7 +292,7 @@ class DefaultPeopleRelationshipsService implements PeopleRelationshipsService { const graph = includeSnapshot && snapshot ? buildGraphForScope(snapshot, graphScope) : emptyGraph() return { graph, - searchResults: includeSnapshot && snapshot ? buildSearchResults(snapshot, options.query, graph) : [], + searchResults: includeSnapshot && snapshot ? buildSearchResults(snapshot, options.query, graph, graphScope) : [], diagnostics: includeSnapshot ? sanitizePeopleRelationshipsDiagnostics(snapshot?.diagnostics ?? createEmptyDiagnostics()) : createEmptyDiagnostics(), @@ -457,12 +457,14 @@ function filterCommunitiesForNodes( function buildSearchResults( snapshot: PeopleRelationshipsSnapshot, queryInput: string | undefined, - graph: PeopleRelationshipsGraphData + graph: PeopleRelationshipsGraphData, + graphScope: PeopleRelationshipsGraphScope ): PeopleRelationshipsSearchResult[] { const query = queryInput?.trim().toLowerCase() ?? '' if (!query) return [] const visibleKeys = new Set(graph.nodes.map((node) => node.key)) - return snapshot.nodes + const searchableNodes = graphScope === 'friends' ? graph.nodes : snapshot.nodes + return searchableNodes .filter((node) => node.searchText.includes(query)) .sort(compareNodes) .slice(0, snapshot.limits.searchResultLimit)