Repository navigation
Repository picker for reviewing initialized submodules #32784
NeilMazumdar
started this conversation in
Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Proposal
Could maintainers approve the direction and scope of a repository picker for reviewing initialized submodules before I open an upstream PR?
I have a working implementation in my fork PR. This discussion requests product-direction approval under CONTRIBUTING.md. The fork PR is available for inspection; there is no upstream PR for this implementation.
Problem and interaction
In an umbrella repository, the Diff pane shows the parent's normal files and submodule pointers. It cannot select a child repository to inspect that child's file changes. A task spanning several submodules therefore requires leaving the thread or opening separate projects to review the work.
The proposed interaction follows the separate-repository model in VS Code and Zed:
auth: mainto review that repository's Changes, Uncommitted files, commits and comparison branches. Entries show the repository name, branch and relative path, including nested submodules and detached HEAD checkouts.Discovery includes declared, initialized submodules. It runs separately from routine status refreshes, uses bounded concurrency and a repository limit, and rejects paths outside the workspace. Opening the web picker or pressing Refresh rediscovers repositories. Child status reads do not fetch remotes.
The implementation adds the shared review RPC, server discovery, a web/desktop picker and a native mobile menu. Child file clicks and review comments resolve back to paths in the thread's workspace. Git writes and turn checkpoints keep their existing thread scope. Checkpoints still do not capture uncommitted submodule contents.
Scope and related work
This proposal covers repository selection for review. It does not add submodule checkpoint capture, repository selection for Git writes, sibling-repository discovery or aggregate pull-request discovery.
Related requests are #6688 and #21031. The existing PR #30239 proposes expanding child files into the parent diff. This alternative retains each repository's native diff and adds explicit selection. I would like maintainer direction on whether this separate-repository approach and review-only scope are wanted.
Before and after
The same synthetic workspace has normal parent files, three direct submodules and a nested submodule. The before build is merge-base
b90e554e; the after build is fork head6f331a02. Screenshots are from the web client, not native mobile apps.Portrait phone recording, 70 seconds
Recorded at a 390 x 585 CSS-pixel phone viewport, to watch on a phone held upright. It starts on the base build's parent diff. On the fork head it picks auth and opens
packages/auth/src/policy.tsfrom the diff, then visits ui with its untracked file, catalog and the nested schema, and returns to the parent. Captions sit above the app, clear of the player's controls. The attachment plays without signing in.pr1-repository-picker-portrait.mp4
Screenshots
Before, the umbrella shows pointer rows with no way to select a child repository:
After, the umbrella keeps those pointer rows and adds the picker:
The picker lists the parent, three children and the nested schema:
Selecting auth shows its own diff. Clicking the file title opens the child file at
packages/auth/src/policy.ts:At a 390 CSS-pixel phone viewport, the repository picker and comparison controls wrap:
Landscape recording, 59 seconds
The recording compares the original umbrella view with the picker flow, then visits auth, ui, catalog and the nested schema before returning to the parent. The attachment plays without signing in. Playback and seeking were checked in a phone-sized Chrome viewport; landscape is easier to read for this version.
pr1-repository-picker-showcase.mp4
More screenshots and recording details.
Verification and limits
On Ubuntu with Node 26.12.1,
vp run check:changedpassed on6f331a02: formatting, lint, knip, GraphQL checks, typechecks for 36 affected packages, React Compiler checks, 412 changed-file tests and 17 cross-file checks. No repository-wide checks ran.Regression coverage includes initialized and nested submodules, uninitialized and malformed entries, duplicate paths, hostile paths and symlinks, subdirectory workspaces, repository-scoped previews and commits, child file opening, comment paths, selection resets and parent commit links. Chrome MCP verified the parent and child views, staged changes, an untracked child file, detached HEAD and full-file expansion. The fixture's edits, indexes and
FETCH_HEADfiles were unchanged after validation. Independent review found no P0 to P2 issues at the recorded head.Native iOS and Android, the Electron shell, Windows and remote/relay connections have not been exercised. Native mobile changes are typechecked. One optional search nit remains: the root's helper text "Workspace repository" is not searchable, though repository names, branches and paths are.
Models and harnesses: Opus 5.5 via Claude Code and Sol 6.1 via Codex, both through T3 Code. Sol implemented and validated the change; Opus independently reviewed it and captured the screenshots and recording.
All reactions