Skip to content

Commit 8774dba

Browse files
committed
fix(search): stop a live read cancelled during current-scope verification
1 parent bb7323d commit 8774dba

2 files changed

Lines changed: 25 additions & 1 deletion

File tree

‎apps/sim/lib/sim-search/live/application.test.ts‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,27 @@ describe('authorized live retrieval', () => {
441441
).rejects.toBe(reason)
442442
}
443443
)
444+
it('rejects a read cancelled while its current scope was being verified', async () => {
445+
const search = await searchLiveKnowledge.execute({ principal, input })
446+
const controller = new AbortController()
447+
mocks.service.mockResolvedValueOnce(undefined)
448+
mocks.service.mockImplementationOnce(async () => {
449+
controller.abort('user_stop:test')
450+
return { policy: defaultLiveSearchPolicy(), verify: async () => true, partial: false }
451+
})
452+
await expect(
453+
readLiveDocument.execute({
454+
principal,
455+
input: {
456+
workspaceId: 'workspace',
457+
documentId: search.results[0]!.documentId,
458+
limit: 1,
459+
resultSecretRegistry: new ResolvedSecretTraceRegistry([]),
460+
signal: controller.signal,
461+
},
462+
})
463+
).rejects.toBe('user_stop:test')
464+
})
444465
it('rejects cross-user document references before token resolution', async () => {
445466
const search = await searchLiveKnowledge.execute({ principal, input })
446467
const reference = decodeLiveReference(search.results[0].documentId)

‎apps/sim/lib/sim-search/live/application.ts‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,10 @@ export const readLiveDocument = defineAuthorizedKnowledgeUseCase({
663663
document = await measureSearchStage('live.read', () => session.read(reference, input.filters))
664664
/** Readers degrade section failures to warnings, so the signal decides cancellation. */
665665
signal.throwIfAborted()
666-
if (!(await session.verifyCurrent(document)))
666+
const current = await session.verifyCurrent(document)
667+
/** A verifier may report a check cut short by cancellation as a normal result. */
668+
signal.throwIfAborted()
669+
if (!current)
667670
throw new OrchestrationError(
668671
'not_found',
669672
'Document is outside your organization’s search scope'

0 commit comments

Comments
 (0)