[Bug]: Add to another machine cannot select ignored files after the first 200 candidates#24504

opened14d agobyMMaximilianMauroner

🤖 Comment made by gpt-6.1-sol acting on behalf of @MaximilianMauroner.

Related fix: https://github.com/pingdotgg/t3code/pull/22844

This report records the defect and evidence already described in that PR. Issue filing did not rerun the app or its tests. Maintainer triage and acceptance remain pending.

Before submitting

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

Area

apps/web

Steps to reproduce

  1. Open a Git project with more than 200 eligible ignored files. Include local configuration after the first 200 listing candidates. Wholly ignored folders do not qualify under the existing Git listing policy.
  2. Open the project's "Add to another machine" dialog.
  3. Try to browse or search for an eligible ignored file beyond the first 200 candidates.

The PR supplies a before screenshot and reports fixture checks with 1,066 files. These steps were derived from that report, and were not independently rerun during issue filing.

Expected behavior

Users can find and select eligible ignored files beyond the initial page. Existing copy limits remain 200 selected files and at most 1 MiB per file.

Actual behavior

Only the first 200 ignored files appear. There is no way to browse past that cutoff. Generated files can hide local configuration that users need to copy.

Impact

Major degradation for affected projects: files outside the initial list cannot be selected through this workflow. The number of affected users is unknown.

Version or commit

Affected release not specified in the PR. The linked PR records the proposed repair and its review history.

Environment

Web "Add to another machine" dialog with a Git source project. The PR reports checks on Linux host Lapitopi with Node 24, plus two earlier isolated dev environments. The affected release and browser version are not specified.

Workaround

No verified workaround for selecting a file beyond the cutoff is documented in the PR.

Searches for the dialog name, clone picker, ignored-file listing, the 200-file limit, and pagination found no matching report. General Files-panel and clone-destination issues describe different workflows.

Evidence, proposed repair, and verification limits

The following snapshot preserves the PR description, including its reported checks, scope, and evidence. All results are attributed to the PR authors; they are not new verification from issue filing.

PR #22844: fix(web): find ignored files beyond the clone picker limit

Problem

The "Add to another machine" dialog lists only the first 200 ignored files. Generated files can hide local config, and users cannot browse past the cutoff.

Scope and approval

This targets the existing "Add to another machine" workflow. Its fixed 200-file list prevents users from selecting eligible ignored files after the cutoff. Paging and search address that one selection failure without adding a new copy capability or changing copy limits.

No triaged issue or explicit maintainer approval is linked. This is submitted for consideration under the focused bug-fix exception in Contributing. Maintainers must decide whether the scope qualifies before merging. User authorization to repair this PR is not upstream maintainer approval.

Change

  • Replace the list with pages of at most 200 candidates. Exact path cursors let paging continue when files disappear.
  • Put default env files first. Group the current page into collapsed folders. Expansion sends no request.
  • Search before the page limit. Keep selections and sizes across pages and searches. Bulk actions affect the current page. Copy stays limited to 200 files, at most 1 MiB each.
  • Wait for initial defaults before search. Keep cached rows during refresh and disable paging until it finishes.
  • Reuse the established listing-error code so older clients can decode failed requests.
  • Keep the old single-page list on older source servers. Show Git errors and the 4 MiB output ceiling. Wholly ignored folders stay excluded.

No recursive scan, server cache, or prefetch.

Verification

The conflict repair preserves main's shared clone URL helpers and fork-origin cloning. It keeps the ignored-file selection tests in web and the clone URL tests in shared.

  • Passed env -u T3_SERVICE_LAUNCHER_CONTEXT vp env exec --node 24 vp run check:changed refs/remotes/pr-audit/main on the integrated head. Format, lint, knip, GraphQL checks, 29 affected-package typechecks, and 63 tests in 9 files passed on Linux host Lapitopi.
  • Passed five focused test files with 46 tests for selection, folder grouping, clone URLs, exact-path contracts, and server paging. This overlaps the changed-file test run.
  • GPT 6.1 Sol and Claude Opus 5.5 independently inspected the full integrated diff. Neither found a blocking code issue in that integrated diff. Focused follow-up review covered the listing-error repair and RPC regression. Neither ran the app.
  • The new RPC regression failed before the error-code repair and passes after it. It checks the production error fields and a subsequent request. It does not exercise wire decoding.
  • GitHub reports no merge conflicts. Hosted CI requires maintainer action and started no jobs. The five notified runs on the previous integrated head all stopped with action_required and zero jobs. Local checks do not satisfy the required hosted checks. Codex cloud review on that previous head failed to complete and provided no inline finding. Full CI suites, build, and release smoke were not run locally.

Earlier UI evidence

The results and images below come from the original implementation, before this conflict repair. No new integrated app or real-clone check ran during the repair.

  • Two isolated dev environments reached all 1,066 fixture files in six pages, with no duplicates, at most 200 file checkboxes per page, and no listing requests on folder expansion.
  • The original browser pass checked env files on page 1, selection across pages and search, search reset, and Enter never submitting.

The clone itself and user acceptance remain unverified. Read/write RPC trimming of whitespace file names is a separate existing copy limit.

Before

User-supplied screenshot of the flat cutoff. Colors are adjusted to match the after images. Text and layout are unchanged.

Ignored-file list before the fix

After

The fixture includes 820 eligible files under .agents and 240 build logs. Tracked anchors keep these folders eligible under Git's existing exclusion policy.

Page 1 keeps .env visible

Collapsed .agents folder and visible .env on page 1

Page 3 reaches a file after 400 entries

Selected run-0399.json on page 3

GitHub hosts these screenshots at a fixed commit in the author's fork. These links have no configured expiry.

Written with GPT 6.1 Sol through the Codex harness.