Repository navigation
Conversation
Local status ran `git status` without an untracked-files mode, so `status.showUntrackedFiles=no` left new files out of the working-tree list and hasWorkingTreeChanges. The Diff panel still listed them, but Commit stayed disabled. Pass `--untracked-files=normal`, as worktree removal already does with `-c status.showUntrackedFiles=normal`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — Adds an explicit Git status mode so repositories configured to hide untracked files still expose them to the commit flow, with a focused integration test. Default Git behavior remains unchanged, making this a small, localized bug fix rather than a new capability or product-default change. You can add or adjust custom eligibility rules. Learn more. |
|
Note Written by Verified in a real dev environmentverified as-is at
main, same repository and four-line file: pr, same repository and four-line file: git command transcript. screenshots inspected; uploaded video playback and seeking checked in the t3 browser player. blacksmith checks: focused regression passed; changed-file formatting passed; lint had zero errors and two existing warnings; server typecheck passed. the two git suites had 260 passes and one failure in Not verifiednative desktop shell, ios/android, macos/windows, remote/relay/tunnel connections, other providers, global git config, and performance with large untracked trees were not exercised. no source changes or pushes were needed. |
|
Note 🤖 Opus 5.5 replying on behalf of Victor. @maria-rcks thanks for testing this; your report showed the hidden file committing end to end with the setting in local config. We ran your two open items on Linux, dev server and web client, on current main (20c3dd3) and this head (4e3033d): with |





Problem
With
status.showUntrackedFiles=noin Git config, a new file shows up in the Diff panel but the Commit action stays disabled and the commit file list is empty. People set that option to speed upgit statusin repos with large untracked trees, globally or per repo.Local status runs
git status --porcelain=2 --branch -zwith no untracked-files mode, so Git applies the config and returns no record for the new file.hasWorkingTreeChangesand the untracked entries inworkingTree.filescome only from those records (diff-indexnever lists untracked files), so the server reports a clean tree. The Diff panel lists untracked files withgit ls-files --others, which ignores that option, so the two disagree.Repro: a repo with one commit,
git config status.showUntrackedFiles no, then createnotes.md. The Diff panel lists it and Commit is disabled.Change
readStatusDetailsLocalpasses--untracked-files=normaltogit status. That's the mode Git uses when the option is unset, so nothing changes for anyone who hasn't set it, including how untracked directories collapse todir/. It follows the overrideremoveWorktreealready makes for the same setting (-c status.showUntrackedFiles=normal, #15834).The flag also overrides
status.showUntrackedFiles=all. Withall, a new directory now shows as onedir/row in the commit file list, as it does by default, instead of one row per file.Cost: with the option set, status now walks the untracked tree, which the option was meant to skip. When the status refresh computes the branch Changes totals, it already lists every untracked file with
ls-files --others, so in that case this is a second walk in a refresh that already does one.Scope and approval
A small fix of an obvious bug, so no prior issue: the server reports a clean working tree while the Diff panel lists a new file, and Commit can't pick it up. It changes one argument list in
GitVcsDriverCore.tsand adds one test. No open or closed PR changes these status arguments; I searched forshowUntrackedFiles,untracked-filesanduntracked files.Verification
Production builds of main (05696c6) and this branch, served by
apps/serverin web mode with fresh state, in headed Chrome on Linux. A demo repo with one pushed commit,status.showUntrackedFiles=no, and an untrackednotes.md. The host name is hidden in the panel screenshots.Main: the Diff panel lists
notes.md(+4) and Changes shows +4, but the Git action reads Commit and is disabled. The options menu has Commit, Push and Create PR all disabled.This branch, same repo and config: the action is "Commit & push" and enabled, the same action main shows when the option is unset.
Options menu, Commit on this branch: the dialog lists
notes.md. I closed it without committing. It shows +0 / -0, which is how main lists an untracked file when the option is unset.New test in
GitVcsDriverCore.test.ts, "lists untracked files that status is configured to hide": a repo with one commit,status.showUntrackedFiles=no, an untrackednotes.txt. It assertsstatusDetailsLocalreportshasWorkingTreeChangesand listsnotes.txt. It fails on main and passes on this branch.Also on this branch, in
apps/server:vp test run src/vcs/GitVcsDriverCore.test.ts156 passed,src/git/GitManager.test.ts105 passed,tsc-rs --noEmitclean.vp fmt --checkandvp linton the two changed files: clean.Global config and a large untracked tree, on current main (20c3dd3) and this head (4e3033d): dev server and web client on Linux, isolated home and T3 home,
status.showUntrackedFiles=noset only in the global Git config, nothing local. Main listsnotes.mdin Diff with Commit disabled; this head shows Commit & push, and the Commit dialog committednotes.md(4 lines) and left a clean tree.Status time with that global setting, 20,000 untracked files and 2,000 tracked files, warm disk cache. Server spans are medians over 15 to 39 refreshes from the web client; git alone is the median of 40 interleaved runs of the exact arguments.
git statusno(two rounds)nononononoThe worst case adds about 6 ms of git time per read, the same as with the option unset. Most of each refresh is the Changes count walk (
ls-files --others), which main already runs with the option set.Not checked: Windows and macOS (Git reads this option the same way on each), the desktop app, mobile clients, a cold disk cache and network filesystems.
Prior PRs: #15834 by @SunkenInTime fixed the same setting for worktree removal. This PR applies its approach and test setup to local status.
Generated with Claude Opus 5.5 in T3 Code Nightly