Resolves the working-tree paths that differ from ref, plus all uncommitted
modifications/additions, as absolute paths — or scope: 'everything' when a blast-radius
file (package.json, tsconfig*.json, …) changed.
Runs one git command with a hard upper bound on how long it can take.
| { scope: "paths"; paths: Set<string>; }
What a change scan found.
The failure a git-change scan declares — the E of its Task, the Err of .result().
Exact basenames whose modification invalidates the entire test suite. A change
to any of these short-circuits getChangedFilePathsInGitSince to null, signalling
the caller to skip filtering and run everything. The qunitx config lives
inside package.json per project convention, so package.json alone covers it.
Basename regexes with the same blast-radius semantics. Currently catches
tsconfig.json and editor variants like tsconfig.test.json /
tsconfig.build.json.
Upper bound on a single git invocation. --changed already degrades to "run all tests" when
git fails, so a stuck git should reject rather than wedge the run — without a bound the CLI
hangs forever, since neither git nor the caller ever gives up. 30s is orders of magnitude
above a healthy git status on a large repo, so it only fires on a genuine wedge.
git could not answer: not a repo, unknown ref, git missing, or it exceeded timeoutMs.
Usage
import * as mod from "lib/utils/get-changed-file-paths-in-git-since.ts";