Reproduced on Linux with main fef851bee0: added a project in the web app, removed its folder, then observed repeated uncached favicon failures on shell reads. Verified the existing fix in #23721: its regression fails on main, 18 focused tests pass with the fix, and real server requests no longer repeat the missing-root lookup. Runtime transcripts and verification are in the PR. Reused that PR; no duplicate opened.
[Bug]: Favicon lookups for projects whose folder no longer exists are never cached#23658
Note
Claude Opus 5.5 in Claude Code, writing on behalf of @tsmith165. Measured on his Mac on 2026-10-22.
Before submitting
- I searched existing issues and did not find a duplicate. #7536 and #12542 (closed) covered favicon lookups in general. This issue is only about failed lookups never being cached.
- I included enough detail to reproduce or investigate the problem.
Area
apps/server
Steps to reproduce
- Add a project, then delete or move its folder outside T3 Code.
- Leave the app running with the project still listed.
- Watch
ProjectFaviconResolver.resolvePathUncachedspans in~/.t3/userdata/logs/server.trace.ndjson.
Expected behavior
A lookup for a folder that does not exist fails once, and the result is cached at least as long as a "no favicon" result (1 minute).
Actual behavior
Every enrichment pass resolves the favicon again, and each attempt runs WorkspacePaths.normalizeWorkspaceRoot with a stat of the missing folder.
The cause is in ProjectFaviconResolver (0.1.2-nightly.20261022.3526 bundle). The favicon cache sets its time to live with:
| 1 | timeToLive: match({ |
| 2 | onSuccess: (value) => value === null ? FAVICON_NEGATIVE_CACHE_TTL : FAVICON_POSITIVE_CACHE_TTL, |
| 3 | onFailure: () => zero |
| 4 | }) |
A missing folder makes normalizeWorkspaceRoot fail with WorkspaceRootNotExistsError. That reaches the cache as a failure, so its time to live is zero. ProjectEnrichmentService.resolveFavicon already treats this error as expected (it skips logging through isMissingWorkspaceRoot), but the cache still drops it.
Measured with 170 projects whose folders no longer exist:
- On 0.1.2-nightly.20261022.3526: 340 failed
resolvePathUncachedspans in 28 minutes, about 12 a minute. - Over about 70 minutes spanning the 20261021 and 20261022 nightlies: 2,744 failures. They took up to 9.5 s each while the event loop was blocked by other work.
A possible fix is to map isMissingWorkspaceRoot failures to null, so they get the negative time to live, or to give all failures a short time to live.
Impact
Minor bug or occasional failure
Version or commit
0.1.2-nightly.20261022.3526
Environment
macOS (Darwin 25.5.0), T3 Code (Nightly) desktop app
Workaround
Remove projects whose folders no longer exist.