Desktop Material

Native large-repository handling

Root causes for this feature were found live on a 211k-file repository, where background Git maintenance, stale locks, deleted-directory polling, and a slow first git status combined to freeze or spam the app. The feature adds a per-repository "large repository" mode plus four independent reliability guards. Every reusable decision is a pure function under app/src/lib/large-repository/, unit-tested with fixtures, so the behaviour is deterministic and the Git command layer stays free of async work on its hot path.

Behaviour

1. Large-repository mode and maintenance suppression

2. Stale index.lock handling

3. Async status — explicit "computing" state

4. Stop polling deleted repositories

5. Nested .git handling

Configuration

Failure modes

Security

Verification

Pure decisions are unit-tested with fixtures under app/test/unit/large-repository/:

The suppression extension is pinned by the contract test app/test/unit/git/commit-auto-gc-test.ts, which now proves status/add/ checkout/fetch inherit the flags through largeRepositoryGitArgsForPath and that the one explicit repack carries them too.

API applicability

This feature changes local desktop scheduling, Git argument construction, and recovery behaviour. It adds no HTTP endpoint, so a Postman collection is not applicable.