scan.scan()
Scans transcripts under roots for feedback, incrementally.
Usage
scan.scan(
store,
roots,
*,
findings_dirs=(),
full=False,
)Each transcript is parsed only when new or modified since the last scan (unless full), parsing runs concurrently across files, and every candidate is inserted idempotently. A transcript that fails to parse — for example one Claude Code is still appending to — is silently skipped by the parser and left unrecorded, so the next scan retries it. After the transcript pass, every issues.jsonl findings file under findings_dirs is anchored to the closest session under roots and its findings are recorded through the same idempotent insert.
Parameters
store: FeedbackStore-
The store to read mtimes from and write candidates to.
roots: Sequence[Path]-
The directories to search recursively for transcripts.
findings_dirs: Sequence[Path] = ()-
The directories to search recursively for
issues.jsonlsuperset findings files. full: bool = False- When set, re-scan every transcript and findings file, ignoring recorded mtimes.
Returns
The: ScanReport- class:ScanReport for this pass.