scan.scan()

Scans transcripts under roots for feedback, incrementally.

Usage

Source

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.jsonl superset 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.