Additional reproduction for the same unbounded untracked-input path: a single sparse file can stall Changes totals, even in a tiny repository.
Observed in a Linux self-hosted T3 0.1.5 environment: an untracked crash dump had 1,378,833,166,336 bytes of logical size, but only 9,240,064 bytes allocated. The active git diff --numstat -z <base> -- process used T3's temporary review index, held that file open and consumed approximately one CPU core. The remaining tracked repository was about 5.45 MB. Removing the dump and excluding future dump files stopped the scan; a direct regular-index diff then completed in 0.0078 s. This last measurement is not a T3 UI benchmark or the exact temporary-index path.
The same missing preflight remains in current main 4c3a9d58184f20bd76833bd599c3544d2c09e3eb: prepareUntrackedReviewIndex caps file count but passes all candidate paths to prepareReviewIndex, which adds intent-to-add entries before readBranchChangeTotals reads numstat. Output caps cannot prevent reading a huge input. The selected-file 1 MB expansion guard runs later and does not protect this path.
A synthetic Git-level reproduction in a disposable container (no network, one CPU, 256 MiB RAM, read-only root, 16 MiB tmpfs) used one 8 GiB sparse file with only 4 KiB allocated. A fresh temporary index with git add --intent-to-add followed by git diff --numstat exceeded a two-second subprocess limit. A preflight prototype using logical file size and excluding the oversized untracked input before adding it to the index completed the diff in about 3.5 ms. This is a mechanism reproduction, not a patched T3 integration test.
Suggested scope: bound per-file and aggregate untracked input bytes before content-reading Git commands, preserve normal file review, and explicitly report incomplete/skipped large-file statistics rather than presenting partial totals as exact. Reuse the policy for Changes totals and review previews. Include a focused regression using a sparse fixture so tests do not allocate huge files. Timeout remains a fallback; filename-only crash-dump exclusions would not cover other oversized files.
No crash dump contents, credentials or private workspace paths are included. The suspected browser crash that created the dump is a separate, unconfirmed cause and need not be part of this bug fix.
Implementation submitted in #32463: 10 MiB per untracked file, 64 MiB in total, with incomplete previews and omitted unavailable branch totals. Both focused regression tests fail on the base commit and pass with the patch. vp run check:changed --concurrency 1 passed all steps, including 242 tests across two files. Upstream CI and maintainer review remain separate.
Prepared with GPT-6.1 Sol in the Codex harness.