Skip to content

fix(client-runtime): preserve saved names for repository groups - #27652

Open
iTzFrancesco wants to merge 1 commit into
pingdotgg:mainfrom
iTzFrancesco:fix/project-group-label-evidence
Open

iTzFrancesco wants to merge 1 commit into
pingdotgg:mainfrom
iTzFrancesco:fix/project-group-label-evidence

Conversation

@iTzFrancesco

@iTzFrancesco iTzFrancesco commented Oct 30, 2026 •

Copy link
Copy Markdown

Problem

With repository grouping enabled, grouped checkouts can share a saved project title equal to the repository name. The current label derivation treats that title as repository identity and falls back to owner/repo, so the picker and project settings can show a different label from the saved project name. Related to #4880.

This qualifies for the small, focused bug-fix exception in CONTRIBUTING.md: it fixes one mismatch in an existing workflow, with no new option, product default, or workflow. The patch changes only the derived display label and its regression test; stored titles, repository identity, and grouping keys stay unchanged.

This replaces #27133, which was closed because it lacked real-client before/after evidence.

Change

Prefer a unanimous non-empty saved project title even when it matches the repository name. Fall back to repository identity only when member titles are missing or disagree. The regression test covers local and remote checkouts and asserts that the canonical group key stays unchanged while the label uses the saved title.

Reproduction

  1. Enable repository grouping.
  2. Add the same GitHub repository as a checkout in local and remote environments.
  3. Give both checkouts the same project title, equal to the repository name.
  4. Before this change the group label falls back to owner/repo; with this change the picker and Settings use the saved title.

Before and after

The two before screenshots are the original Windows T3 Code report, showing the affected owner/repo labels in the project picker and Settings.

Before — project picker

Before: project picker showing owner/repo labels for grouped projects

Before — project settings

Before: project settings for the grouped Traflix Agency project

The after screenshots are from the T3 Code web client using an isolated development home. The fixture has two checkout entries pointing at the same GitHub remote and sharing the short saved title. It does not use the live VPS; the focused regression test covers the local/remote environment case.

After — project picker

After: project picker showing the saved short project name

After — project settings

After: project settings showing the saved short name and both checkouts

Checks

  • pnpm exec vp test run packages/client-runtime/src/state/projectGrouping.test.ts — 21 tests passed.
  • Focused lint on the changed source and test files — passed.
  • check:changed — format, lint, both Knip passes, typecheck for 7 affected workspaces, and the focused test file passed. On Windows I ran the script directly with a temporary child-process shim because the normal runner's child process cannot launch vp.cmd (spawn vp ENOENT).

Two different repositories with the same unanimous saved short title may now display the same label; their repository grouping identities remain distinct.

Prepared and verified by Codex in T3 Code (GPT-6 Luna).

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Oct 30, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at f73df47

Macroscope's review found this PR approvable — Repository groups now retain their shared saved title even when it matches a repository name. The change affects displayed labels without changing grouping identity or stored data.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between 6575ce3 and f73df47.

Files selected for processing: 2
  • packages/client-runtime/src/state/projectGrouping.test.ts
  • packages/client-runtime/src/state/projectGrouping.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.

Walkthrough

The project grouping logic now uses the sole shared project title as the group label, even when it matches the repository name. A test covers this behavior for local and remote projects with the same repository identity.

Changes: Grouped project labels

Layer / File(s) Summary
Preserve shared project titles
packages/client-runtime/src/state/projectGrouping.ts, packages/client-runtime/src/state/projectGrouping.test.ts
The label derivation returns the sole shared project title without excluding titles that match the repository display name or repository name. A test verifies the label for matching local and remote projects.

Priority: Low

Estimated code review effort: 2 (Simple) | ~8 minutes

Change: Bug fix

Possibly related issues

  • pingdotgg/t3code#26296 — Removes the guard for a saved title that equals the repository name.
  • pingdotgg/t3code#15049 — Changes the label logic for the case where the saved title remains the repository name.
  • pingdotgg/t3code#24999 — Changes the grouped-label derivation used by the interface, though the described mismatch may not be fully covered.

Suggested labels: bugfix, size:XS

Suggested reviewers: t3dotgg, macroscopeapp

Merge Risk: Minimal · up to f73df

No actionable merge-blocking risk remains in the reviewed grouping-label change.

Pre-merge checks: Passed 4
Check name Status Explanation
Title check Passed The title clearly and concisely describes the main change: preserving saved names for repository groups. It uses an appropriate conventional commit format.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Description check Passed The description is complete and relevant. It explains the problem, change, reproduction steps, scope exception, linked issue, screenshots, focused verification results, limitations, and agent attribut…
Full details: Description check

Explanation

The description is complete and relevant. It explains the problem, change, reproduction steps, scope exception, linked issue, screenshots, focused verification results, limitations, and agent attribution. The verification content uses a "## Checks" heading instead of the template's "## Verification" heading, but it provides the required information.

Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@maria-rcks

maria-rcks commented Nov 1, 2026 •

Copy link
Copy Markdown
Collaborator

Note

Written by gpt-6.1-sol on behalf of Maria

Verified in a real dev environment

verified unchanged head f73df475088397b6e13cdd09ee270598756539d8 on this linux vm using playwright from the repository and /usr/bin/google-chrome.

  • reproduced on github/main at ce48e45900 in /home/user/main, installed with vp i, and started vp run dev in the background. added real checkout paths through the web app and saved the shared project name t3code. main displayed pingdotgg/t3code in the picker and settings despite the saved name.
  • stopped main before starting the exact pr head. copied only this task's app-created state for matching data. the pr displays t3code in both places. the group contains /home/user/main/apps/server, /home/user/t3code, and /home/user/main; the first was automatically created at startup. no fixtures, mocks, or demo data were used.
  • ran real codex gpt-6.1-sol turns through the web composer on main and the pr. the pr turn executed pwd and git rev-parse --show-toplevel, returned /home/user/main for both, and completed with pr provider verified. the existing thread also reopened with its history intact.
  • renamed the group to evidence rename, saved, and restored t3code. disabled grouping and saw three separately saved t3code entries; enabled grouping and saw one combined entry. the completed thread remained accessible.
  • blacksmith: vp test run packages/client-runtime/src/state/projectGrouping.test.ts passed all 21 tests. vp run check:changed passed format, lint, both knip passes, seven package typechecks, and the focused tests. the worker needed its shallow git history expanded before check:changed could find the merge base.

before, main project picker:

main picker displays pingdotgg/t3code

after, pr project picker with the same thread:

pr picker displays the saved t3code name

before, main project settings:

main settings show a t3code saved name and pingdotgg/t3code label

after, pr project settings:

pr settings preserve the t3code name in the group label

fresh pr-side provider turn:

codex gpt-6.1-sol completed directory checks through the pr web client

rename, restore, grouping off/on, and retained provider thread (idle intervals removed):

group rename and grouping round trip

Not verified

native electron, ios/android clients, separate remote environments, relay/tunnel connections, and providers other than codex were not exercised. all three real checkouts used this linux environment. the older pr server warned about newer migration ids in the copied task database, then started and completed the flows above.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS 0-9 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants