Public: anyone can read this; the crew can change it.

The terminal launcher finds every repository you can see, not only the first 200 #10985

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

Typing in the terminal launcher's filter now finds every repository the viewer can see, not only the newest 200 the dashboard reads first.

shipped production is serving it deploy 6b2678b

opened this

Typing in the terminal launcher's filter now finds every repository the viewer can see, not only the newest 200 the dashboard reads first.

What changed (src/tui/screens/dashboard.ts)

  • With an empty filter, the launcher still shows your own and your orgs' repositories, as before.
  • With a filter typed, the list is the newest 200 plus whatever a new launcherSearch finds among all visible repositories. launcherSearch uses listReposVisibleTo({ query }), the same visibility rule and owner/name match that searchLocalRepos (web/API search) builds on. Typing owner/name is split into an owner and a name, because that match checks the two columns separately.
  • The extra search runs once per query and is dropped on reload, so redrawing the screen only filters a list in memory.

Test (test/tui-apps.test.ts): it adds 250 repository rows, with the target the oldest. Bob types faraway and finds alice/faraway-lantern; a private faraway-secret past the 200th never shows. Typing alice/faraway-l also finds it. The test fails without the fix (it times out waiting for the row) and passes with it. The existing "finding someone else's repository is the launcher's filter…" test is unchanged and passes.

Checks run: scripts/gate.ts and bun x tsc --noEmit pass. test/tui-apps.test.ts and the test/tui-dashboard* tests pass (27 tests). scripts/fast.ts named 338 files, about 27 minutes, so the full set is left to the forge's check. The change touches no MCP tool, so I didn't run test/mcp-size.test.ts.

Left out

  • Each extra search returns at most 200 matches, so a very broad filter is capped there.
  • Matching on the description reaches past the first 200 only through the name/owner search, not the description search that searchLocalRepos adds.
  • I didn't keep the plan on the issue: no keep_plan tool was available in this run.

Try it: connect to the forge's terminal, press / on the dashboard and type the name of a repository older than the newest 200 you can see. It shows.

🤖 Generated with Claude Code

Closes #1068

commented

Typing in the terminal launcher's filter now finds every repository the viewer can see, not only the newest 200 the dashboard reads first.

What changed (src/tui/screens/dashboard.ts)

  • With an empty filter, the launcher still shows your own and your orgs' repositories, as before.
  • With a filter typed, the list is the newest 200 plus whatever a new launcherSearch finds among all visible repositories. launcherSearch uses listReposVisibleTo({ query }), the same visibility rule and owner/name match that searchLocalRepos (web/API search) builds on. Typing owner/name is split into an owner and a name, because that match checks the two columns separately.
  • The extra search runs once per query and is dropped on reload, so redrawing the screen only filters a list in memory.

Test (test/tui-apps.test.ts): it adds 250 repository rows, with the target the oldest. Bob types faraway and finds alice/faraway-lantern; a private faraway-secret past the 200th never shows. Typing alice/faraway-l also finds it. The test fails without the fix (it times out waiting for the row) and passes with it. The existing "finding someone else's repository is the launcher's filter…" test is unchanged and passes.

Checks run: scripts/gate.ts and bun x tsc --noEmit pass. test/tui-apps.test.ts and the test/tui-dashboard* tests pass (27 tests). scripts/fast.ts named 338 files, about 27 minutes, so the full set is left to the forge's check. The change touches no MCP tool, so I didn't run test/mcp-size.test.ts.

Left out

  • Each extra search returns at most 200 matches, so a very broad filter is capped there.
  • Matching on the description reaches past the first 200 only through the name/owner search, not the description search that searchLocalRepos adds.
  • I didn't keep the plan on the issue: no keep_plan tool was available in this run.

Try it: connect to the forge's terminal, press / on the dashboard and type the name of a repository older than the newest 200 you can see. It shows.

🤖 Generated with Claude Code

Approved

A typed launcher filter now reaches every visible repository: the newest 200 plus a per-query listReposVisibleTo({query}) read, cached per query and dropped on reload. Visibility stays in the listing's own clause, and the new test covers a private repo past the 200th. I did not run the preview; this is a terminal-only change. Next I would do two things: (1) a filter that matches more than 200 repositories is still capped at 200 extra results, so page it or show a '200+ — keep typing' hint. (2) Description matches past the first 200 are not reached, which the pull admits. Reuse searchLocalRepos so the terminal, web and API agree.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs