pingdotgg / pingdotgg/t3code

[Bug]: Images and other binary file types are missing from Files sidebar in non-Git projects

Open
#10,628 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

accepted bug via-triage
Dominant language
TypeScript
Stars
23k
Forks
5.9k
Avg merge
11h 14m
Merged PRs (30d)
357

Description

Before submitting
  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.
Area

apps/server

Steps to reproduce
  1. Create a folder outside any existing Git repository.
  2. Add a PNG or JPEG image and a text file before opening the folder in T3 Code.
  3. Open the folder as a project and inspect the Files sidebar.
Expected behavior

The Files sidebar lists both the image and the text file.

Actual behavior

The text file appears, but the image is missing.

Impact

Minor bug or occasional failure

Version or commit

0.0.40-nightly.20260907.1359

Environment

Linux x64

Screenshots, recordings, or supporting files

ImagesNoGitRepo.png
ImagesGitRepo.png

Astra Description and Research

The underlying behavior was reproduced independently using FFF 0.9.4 with T3's path-index configuration:

{
  basePath: cwd,
  disableMmapCache: true,
  disableContentIndexing: true,
  aiMode: false,
  enableFsRootScanning: true,
  enableHomeDirScanning: true,
}

After awaiting waitForIndexReady(), both mixedSearch("", { pageSize: 100 }) and fileSearch("", { pageSize: 100 }) omitted the images.

State when FFF scans the folder Result with FFF 0.9.4
No Git repository PNG, JPEG and .bin files missing
Git initialized before creating the files Files included
Files created before Git initialization, then scanned Files included
Files staged or committed Files included

For an index already opened without Git, running git init left the files absent in the immediate query. Calling scanFiles() and awaiting waitForIndexReady() restored them. The live-watcher behavior for files created after indexing wasn't independently tested.

The cause appears to be this explicit check in FFF 0.9.4's filesystem scanner:

if !is_git_repo && is_known_binary_extension(path) {
    return ignore::WalkState::Continue;
}

This drops files before they enter the index. T3's WorkspaceSearchIndex.list() uses mixedSearch, but switching to file-only search wouldn't resolve the issue because both search the same incomplete index.

The filtering is based on extensions. Plain text saved as text.png was also excluded, while .txt and .svg files were included. The extension list covers other formats such as PDFs, archives, fonts and databases, though those weren't individually tested.

Possible fix: upgrading FFF looks promising. Running the same standalone reproduction against published version 0.10.6 included all the test files, with and without Git.

That upgrade hasn't been verified inside T3. It would need regression coverage for listing images in non-Git projects and a check of the existing Electron .asar.unpacked loading patch, since FFF's package layout changed between these versions.

A temporary workaround is to initialize Git and rebuild the server-side index. Existing images don't need to be recreated.

The dependency reproduction and source investigation were performed with Codex assistance. No production fix or integrated browser/mobile test has been completed.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in apps/server by tracing WorkspaceSearchIndex.list() and the FFF indexing calls, including scanFiles() and waitForIndexReady(). Reproduce the missing-image case in a non-Git project, then evaluate the FFF 0.10.6 upgrade while checking the existing Electron .asar.unpacked loading patch. Done means images appear in the Files sidebar without Git and regression coverage verifies the behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
git, typescript
Domain
backend, search
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.