Correct mutable read checks and fixture type annotations

This commit is contained in:
Brennan Benson
2026-11-13 13:59:29 -08:00
parent abd271bcf8
commit d1e25af0ae
4 changed files with 28 additions and 14 deletions
@@ -4,8 +4,10 @@ import { dirname, join } from 'node:path'
import { Readable } from 'node:stream'
import { afterEach, beforeEach, expect, it, vi } from 'vitest'
import { resetSessionParseCacheForTests } from '../../ai-vault/parse-cache/session-parse-cache-store'
import { resetTranscriptConsumersForTests } from '../../ai-vault/transcripts/session-transcript-consumers'
import { registerTranscriptConsumer } from '../../ai-vault/transcripts/session-transcript-consumers'
import {
resetTranscriptConsumersForTests,
registerTranscriptConsumer
} from '../../ai-vault/transcripts/session-transcript-consumers'
import { physicalSessionCandidates } from '../../ai-vault/session-scanner-types'
import { isolatedScanRoots } from '../../ai-vault/scanner-fixtures/session-scanner-test-fixtures'
import {
@@ -21,7 +23,7 @@ import {
type SessionSearchIndexFile
} from '../storage/session-search-index-test-fixture'
const io = vi.hoisted(() => ({ failed: '', paths: [] as string[] }))
const io = vi.hoisted((): { failed: string; paths: string[] } => ({ failed: '', paths: [] }))
vi.mock(
'../../native-chat/transcript-filesystem/wsl-transcript-fs-access',
async (importOriginal) => {
@@ -32,12 +32,13 @@ export async function runSessionSearchIndexPass(
): Promise<{ stats: SessionParseStats; outOfTime: boolean; left: number }> {
const stats = createSessionParseStats()
const cutoffMs = store.retentionCutoff
const acceptsReads = () => store.acceptingReads !== false
let read = 0
let outOfTime = false
let left = 0
for (const choice of candidates) {
throwIfAiVaultScanCancelled(options.signal)
if (store.acceptingReads === false) {
if (!acceptsReads()) {
break
}
let deferred = false
@@ -45,7 +46,7 @@ export async function runSessionSearchIndexPass(
let admitted = false
for (const candidate of physicalSessionCandidates(choice)) {
throwIfAiVaultScanCancelled(options.signal)
if (store.acceptingReads === false) {
if (!acceptsReads()) {
break
}
const path = candidate.file.path
@@ -72,7 +73,7 @@ export async function runSessionSearchIndexPass(
continue
}
throwIfAiVaultScanCancelled(options.signal)
if (store.acceptingReads === false) {
if (!acceptsReads()) {
break
}
admitted = true
@@ -1,5 +1,10 @@
import { isTranscriptSourceFailure } from './session-scanner-jsonl-reader'
import { physicalSessionCandidates, type SessionFileChoice } from '../session-scanner-types'
import {
physicalSessionCandidates,
type SessionFileCandidate,
type SessionFileChoice,
type SessionParseResult
} from '../session-scanner-types'
import { yieldToEventLoop } from '../../../shared/event-loop-yield'
import { isTextTaskRequestSession } from './text-task-request-sessions'
import { candidateFileTime } from '../scanners/antigravity/antigravity-transcript-candidates'
@@ -26,7 +31,6 @@ import {
sessionParseCacheKey
} from '../parse-cache/session-parse-cache-store'
import { canStopParsingSessions } from './session-scan-cutoff'
import type { SessionFileCandidate, SessionParseResult } from '../session-scanner-types'
import { throwIfAiVaultScanCancelled } from '../scan-lifecycle/ai-vault-scan-cancellation'
import { noteAiVaultScanWorkChanged } from '../scan-lifecycle/ai-vault-scan-progress'
@@ -9,12 +9,19 @@ import { sessionCandidatesFromDiscoveries } from '../../discovery/session-scanne
import { scanAiVaultSessions } from '../../session-scanner'
import { isolatedScanRoots, jsonLines } from '../../scanner-fixtures/session-scanner-test-fixtures'
const reads = vi.hoisted(() => ({
failed: '',
failedSlice: '',
cancel: null as AbortController | null,
paths: [] as string[]
}))
const reads = vi.hoisted(
(): {
failed: string
failedSlice: string
cancel: AbortController | null
paths: string[]
} => ({
failed: '',
failedSlice: '',
cancel: null,
paths: []
})
)
vi.mock(
'../../../native-chat/transcript-filesystem/wsl-transcript-fs-access',
async (importOriginal) => {