Skip to content

fix(web): replace whitespace in new ref names with dashes - #6270

Merged
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
jorj-pineda:fix/web-sanitize-new-ref-names
Aug 15, 2026
Merged

fix(web): replace whitespace in new ref names with dashes#6270
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
jorj-pineda:fix/web-sanitize-new-ref-names

Conversation

@jorj-pineda

@jorj-pineda jorj-pineda commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Creating a ref from the branch picker passed the typed name straight through to git, which rejects every ref name containing ASCII whitespace. Typing a name like "new branch" therefore always failed with a raw git error, so the picker accepted input it could never act on.

The typed name now has runs of whitespace collapsed to a single dash, turning "new branch" into "new-branch". The picker's "Create new ref" entry shows the sanitized name, so it no longer promises one name and creates another.

Scoped deliberately to whitespace. Case is preserved because git ref names are case sensitive, and existing dashes are left alone because consecutive dashes are valid. Names that are invalid for other reasons still surface the git error unchanged. Only the whitespace git actually rejects is replaced, ASCII space and the ASCII control characters. Names containing whitespace git accepts, such as U+00A0, are left untouched.

Closes #6163

Before / after

Typed Picker shows Result
Before new branch Create new ref "new branch" Failed to create and switch ref.
After new branch Create new ref "new-branch" ref new-branch created and checked out

Before (on main): typing "new branch" fails:
https://github.com/user-attachments/assets/90b1b4ef-2e2b-4c4c-94df-9fe2f8939647

After (this PR): the same input creates new-branch:
https://github.com/user-attachments/assets/63e94eae-c0de-43bf-8022-60fb02daca20

Verification

  • apps/web unit tests: 65 passed, including 9 new cases covering sanitizeNewRefName
  • Targeted lint, typecheck (tsgo --noEmit) and vp fmt --check all pass
  • Every sanitized output asserted in the tests was independently checked against git check-ref-format
  • Verified end to end in the web client: typing "new branch" in the ref picker creates and switches to new-branch

Written with Claude Opus 5 in Claude Code.

Note

Replace whitespace with dashes in new git ref names in the branch picker

  • Adds sanitizeNewRefName in BranchToolbar.logic.ts that trims input and collapses ASCII whitespace runs (spaces, tabs, newlines, etc.) into a single dash, leaving non-ASCII characters and existing dashes untouched.
  • The branch picker's search now matches refs against the sanitized query, so typing "new branch" surfaces "new-branch" in results.
  • Server-side ref queries, collision detection, and the "Create new ref" label all use the sanitized form of the user's input.
  • When creating a new ref, the name is sanitized before submission, preventing invalid git ref names containing spaces.

Macroscope summarized d2241dd.


Note

Low Risk
Scoped UX fix in the web branch picker with thorough unit tests; no auth, persistence, or server contract changes beyond ref query strings.

Overview
The branch picker no longer sends typed ref names with ASCII whitespace straight to git. sanitizeNewRefName trims input and collapses runs of spaces, tabs, and other ASCII control whitespace into a single dash (e.g. new branchnew-branch), while leaving case, slashes, user-typed dashes, and non-ASCII whitespace git accepts unchanged.

Create new ref uses the sanitized name for the mutation, the picker label, duplicate detection, and the paginated ref search query. Client-side filtering via shouldIncludeBranchPickerItem also matches refs when the search text sanitizes to an existing ref name, so spaced queries still surface new-branch.

Unit tests cover sanitization edge cases and picker filtering behavior.

Reviewed by Cursor Bugbot for commit d2241dd. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 5ec71270-58ad-4a89-908a-77799f861bfe

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 12, 2026
Comment thread apps/web/src/components/BranchToolbar.logic.ts
Comment thread apps/web/src/components/BranchToolbarBranchSelector.tsx
@jorj-pineda
jorj-pineda marked this pull request as ready for review August 12, 2026 03:44
Comment thread apps/web/src/components/BranchToolbarBranchSelector.tsx
@jorj-pineda
jorj-pineda marked this pull request as draft August 12, 2026 03:49
@macroscopeapp

macroscopeapp Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved ac70c59

Straightforward bug fix that sanitizes user-typed branch names by replacing spaces with dashes (since git rejects spaces in ref names). Changes are limited to a simple utility function and its usage in the branch picker, with comprehensive test coverage.

You can customize Macroscope's approvability policy. Learn more.

@github-actions github-actions Bot added size:M 30-99 changed lines (additions + deletions). and removed size:S 10-29 changed lines (additions + deletions). labels Aug 12, 2026
@jorj-pineda

Copy link
Copy Markdown
Contributor Author

Thanks — two of the three findings were real and are now fixed. Every review above ran against 111359af5; the branch is three commits past that, so here is where each stands:

Finding Status
Macroscope: over-replaces Unicode whitespace Fixed in 542ef842c
Macroscope: collision check uses the raw query Fixed in d36efad56
Cursor: collision check "still looks up the raw trimmed query" Fixed in d36efad56, which predates that review

The Unicode finding was a good catch and the original code was wrong. Checked against git directly:

Character git check-ref-format --branch
U+0020 space rejected
U+0009 tab rejected
U+00A0 no-break space accepted
U+2009 thin space accepted

\s matched all four, so a name git would happily create was being silently rewritten. The sanitizer now replaces only ASCII space and the ASCII control characters, with tests asserting U+00A0 and U+2009 survive untouched.

Cursor's comment raised a second point that was still live after the collision fix: the existing ref also got filtered out of the list, so a query whose sanitized form already exists showed "No refs found" — create suppressed, matching ref hidden. Fixed in 782578157 with tests.

The approvability verdict above was produced before the first of these fixes was pushed, so it reflects the pre-fix commit.

@jorj-pineda
jorj-pineda marked this pull request as ready for review August 12, 2026 04:11

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 7825781. Configure here.

Comment thread apps/web/src/components/BranchToolbarBranchSelector.tsx
@arturo-source

Copy link
Copy Markdown

Something you might want to consider for future PRs: there are another invalid character that can be replaced by a dash.

const GIT_REF_FORBIDDEN_CHARS = /[\x00-\x1f\x7f ~^:?*[\\]+/g;

And the branch name cannot start with dash -.

@arturo-source

Copy link
Copy Markdown

Something you might want to consider:

  1. I create a branch "hello world"
  2. The branch created is "hello-world"
  3. Later I search for "hello w"

Even if I search with an space, the branch hello-world should appear as an option of an already created branch.

@jorj-pineda

Copy link
Copy Markdown
Contributor Author

@arturo-source
Thanks for ur input! Both r useful.

On the search case: that one already works as of ae8e65aa7, which landed after you looked. The ref list is filtered server side with a substring match, so the raw hello w was dropping hello-world from the response before the client ever saw it. The query is sanitized now too, so the server matches on hello-w. Added ac70c59d2 covering exactly your scenario, and it passes without any further source change.

On the forbidden characters: you're right that the full set is [\x00-\x1f\x7f ~^:?*[\\] plus the rule that a name cannot start with -. I'd rather keep those out of this PR. #6163 asked specifically for spaces, and handling the rest turns a small input fix into a partial reimplementation of check-ref-format, which deserves its own review. Names invalid for those reasons still surface the git error today, same as before.

Happy to open a separate issue for the wider character set if that's useful.

The ref picker's "Create new ref" entry passes the typed name straight
through to git, which rejects every ref name containing whitespace. Typing
a name like "new branch" therefore always fails with a raw git error.

Add sanitizeNewRefName alongside the other branch toolbar helpers,
initially mirroring the ref creator's current trim-only behavior, together
with tests describing the intended result. Seven of them fail against that
placeholder; the next commit implements the sanitization.
Implement sanitizeNewRefName so runs of whitespace collapse to a single
dash after trimming, turning a typed name like "new branch" into
"new-branch".

Scoped deliberately to whitespace. Case is preserved because git ref names
are case sensitive, and existing dashes are left alone because consecutive
dashes are valid. Names that are invalid for other reasons still surface
the git error unchanged.

Since git rejects any ref name containing whitespace, this can only turn a
failing name into a working one; it cannot break a name that works today.
Every sanitized output covered by the tests was checked against
git check-ref-format.
Route the typed name through sanitizeNewRefName instead of a bare trim, so
creating a ref from the branch picker turns "new branch" into "new-branch"
rather than failing with a raw git error.
The picker offered to create the name exactly as typed while the ref was
created under its sanitized form, so typing "new branch" promised a ref
named "new branch" and produced "new-branch". Show the name that will
actually be created.
The sanitizer matched every Unicode whitespace character, but git only
rejects ASCII space and the ASCII control characters. A name containing
U+00A0 or U+2009 is valid to git, so rewriting it silently created a ref
the user never typed.

Narrow the replacement to ASCII space, tab, newline, carriage return, form
feed and vertical tab, and assert that git-accepted whitespace survives
untouched. Verified each case against git check-ref-format.
The collision check matched the raw query while the ref is created under its
sanitized name, so typing "new branch" while new-branch already existed still
offered to create it and then failed with an already-exists error from git.

Check the sanitized name instead, and reuse it for the entry label so both
read from one value.
Suppressing the create entry for an existing sanitized name left the picker
empty: the filter matched the raw query, so typing "new branch" hid the
existing new-branch ref as well and showed "No refs found".

Fall back to matching the sanitized query, so a spaced name still surfaces
the ref it would have been created as. Also correct a comment that claimed
git rejects every ref name containing whitespace, which the U+00A0 case
disproved.
The ref list is filtered server side with a substring match on the query,
so searching the raw "new branch" dropped an existing new-branch from the
response. The collision check never saw the ref it was meant to detect, and
the picker still offered to create a ref that already existed.

Send the sanitized query instead. Ref names cannot contain an ASCII space,
so no match is lost.
Searching "hello w" has to surface an existing hello-world, since that is
the name the ref was created under. The sanitized fallback already handles
this; pin it so a future change to the filter cannot silently break it.
@juliusmarminge
juliusmarminge force-pushed the fix/web-sanitize-new-ref-names branch from ac70c59 to d2241dd Compare August 15, 2026 10:48
@juliusmarminge
juliusmarminge enabled auto-merge (squash) August 15, 2026 11:31
@juliusmarminge
juliusmarminge merged commit 9e61d0f into pingdotgg:main Aug 15, 2026
17 checks passed
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 15, 2026
## What's Changed
* fix(desktop): app zoom no longer zooms the preview browser by @juliusmarminge in pingdotgg/t3code#6649
* fix(server): keep provider notification consumers alive past startSession by @tsouth89 in pingdotgg/t3code#6538
* fix(server): treat removed Bitbucket permissions endpoint as unknown, not blocking by @lnieuwenhuis in pingdotgg/t3code#6525
* fix(ssh): let cold remote servers finish starting by @gbarros-dev in pingdotgg/t3code#6168
* fix(web): preserve Claude insight line breaks by @nateEc in pingdotgg/t3code#4344
* feat(web): accept file drops across the chat workspace by @dbalders in pingdotgg/t3code#6636
* fix(web): widen ordered-list marker gutter for 3+ digit item numbers by @lnieuwenhuis in pingdotgg/t3code#6527
* fix(server): bound thread activity hydration by @t3-code[bot] in pingdotgg/t3code#6153
* fix(web): restore the Archive action in the default sidebar thread menu by @lnieuwenhuis in pingdotgg/t3code#6526
* fix(web): open diff files from nested projects by @gbarros-dev in pingdotgg/t3code#6174
* fix(mobile): use tryOpenExternalUrl for markdown links in ThreadFeed by @mohamedmastouri-hue in pingdotgg/t3code#5872
* fix(web): open the file a bare filename reference names by @Brechard in pingdotgg/t3code#6297
* fix(server): stop the provider title mirror from overwriting real thread titles by @repparw in pingdotgg/t3code#5941
* fix(shared): match source-control providers by DNS label by @gbarros-dev in pingdotgg/t3code#6175
* feat(desktop): Chrome-style hold-to-quit by @Bil0000 in pingdotgg/t3code#5508
* fix(gitlab): submit review comments on context lines by @tarik02 in pingdotgg/t3code#6348
* fix(marketing): keep Grok mark clear of mobile hero copy by @NicL9923 in pingdotgg/t3code#4542
* fix(mobile): recover the QR pairing scanner when camera access is denied by @hey-jj in pingdotgg/t3code#6487
* fix(web): keep a long path from running under the folder picker button by @Sy-D in pingdotgg/t3code#4823
* fix(terminal): right-click paste works in the terminal by @StiensWout in pingdotgg/t3code#5240
* fix(mobile): explain iOS-only settings on Android by @danvernon in pingdotgg/t3code#4981
* fix(web): stop counting a workflow coordinator as a working agent by @Rishet11 in pingdotgg/t3code#6672
* fix(web): keep floating preview anchored after panel closes by @AksharP5 in pingdotgg/t3code#6547
* fix(web): unstick /connect after in-modal sign-in by redirecting to the authorize endpoint by @TorbenWetter in pingdotgg/t3code#5133
* fix(web): keep send reachable while a turn is running on mobile by @AMohamedAakhil in pingdotgg/t3code#4781
* fix(web): reject unsupported composer image types at attach time by @mdshzb04 in pingdotgg/t3code#6574
* Make ClaudeTextGeneration tests hermetic on Windows by @mihneaptu in pingdotgg/t3code#4508
* fix(web): show command output in work log by @LikoKiko in pingdotgg/t3code#4083
* fix(web): reserve sibling column width when resizing the right panel by @Lasdw6 in pingdotgg/t3code#6279
* fix(web): replace whitespace in new ref names with dashes by @jorj-pineda in pingdotgg/t3code#6270
* fix(client-runtime): branch list no longer resets while paging through refs by @a20hek in pingdotgg/t3code#5858
* fix(web): support Shift+Insert terminal paste by @aoright in pingdotgg/t3code#5982
* fix(web): keep the composer glass aligned with the context strip at any interface font size by @Williawar in pingdotgg/t3code#5703
* fix(codex): keep background memory out of chats by @AksharP5 in pingdotgg/t3code#5468
* fix(server): treat a missing Codex rollout as a recoverable resume error by @Rishet11 in pingdotgg/t3code#6671
* fix(web): hide provider Update toast action while an update is running by @mrmg in pingdotgg/t3code#6544
* fix(desktop): agent shells inherit a UTF-8 locale on macOS by @Linus-Boehm in pingdotgg/t3code#6236
* fix(server): ignore Claude command lifecycle messages by @naveed949 in pingdotgg/t3code#6606
* docs: mention Bitbucket user read scope needed by auth probe by @thamrx in pingdotgg/t3code#6291
* fix(server): return valid preview action results by @duncan-vc in pingdotgg/t3code#5966
* fix(claude): make "Always allow for session" stick, and only for the session by @kakismash in pingdotgg/t3code#5041
* fix(ssh): surface a failed remote t3 install instead of a silent 0-byte server.log by @TorbenWetter in pingdotgg/t3code#5132
* perf(server): persist the wire projection for streaming tool.updated data by @mInrOz in pingdotgg/t3code#6675
* fix(web): stop wrapping partial code block selections in markdown fences by @JoeJoeflyn in pingdotgg/t3code#5069
* fix(web): hide T3 Connect toggle in web app settings by @JoeJoeflyn in pingdotgg/t3code#5068
* fix(web): show provider account accent badge in sidebar rows and hover card by @vitalyiegorov in pingdotgg/t3code#5980
* fix(server): wait for concurrent SQLite writers instead of failing with SQLITE_BUSY by @ostapondo in pingdotgg/t3code#5134
* fix(web): reject oversized prompts before provider turn start by @naveed949 in pingdotgg/t3code#6602
* feat(web): collapse the question prompt from its header by @Jardo-51 in pingdotgg/t3code#6773
* fix(shared): degrade an unknown system time zone to UTC in usage windows by @Rishet11 in pingdotgg/t3code#6670
* fix(claude): discover repo-local .agents/skills in skill discovery by @RoshanMhatre in pingdotgg/t3code#5488
* fix(server): let slow provider CLIs raise their discovery probe budget by @CDVolvik in pingdotgg/t3code#6223
* fix(web): retain terminal PR badges after checkout switch by @sebbonit in pingdotgg/t3code#4755
* fix(web): show selected model in context window tooltip by @nqrwhal in pingdotgg/t3code#4772
* fix(web): scale command details with code font by @Serendeep in pingdotgg/t3code#6510
* fix(web): preserve XML-like tags in user messages by @0utsights in pingdotgg/t3code#4133

## New Contributors
* @mohamedmastouri-hue made their first contribution in pingdotgg/t3code#5872
* @NicL9923 made their first contribution in pingdotgg/t3code#4542
* @hey-jj made their first contribution in pingdotgg/t3code#6487
* @danvernon made their first contribution in pingdotgg/t3code#4981
* @Rishet11 made their first contribution in pingdotgg/t3code#6672
* @AksharP5 made their first contribution in pingdotgg/t3code#6547
* @TorbenWetter made their first contribution in pingdotgg/t3code#5133
* @AMohamedAakhil made their first contribution in pingdotgg/t3code#4781
* @mdshzb04 made their first contribution in pingdotgg/t3code#6574
* @mihneaptu made their first contribution in pingdotgg/t3code#4508
* @LikoKiko made their first contribution in pingdotgg/t3code#4083
* @Lasdw6 made their first contribution in pingdotgg/t3code#6279
* @jorj-pineda made their first contribution in pingdotgg/t3code#6270
* @a20hek made their first contribution in pingdotgg/t3code#5858
* @aoright made their first contribution in pingdotgg/t3code#5982
* @Williawar made their first contribution in pingdotgg/t3code#5703
* @mrmg made their first contribution in pingdotgg/t3code#6544
* @Linus-Boehm made their first contribution in pingdotgg/t3code#6236
* @naveed949 made their first contribution in pingdotgg/t3code#6606
* @thamrx made their first contribution in pingdotgg/t3code#6291
* @duncan-vc made their first contribution in pingdotgg/t3code#5966
* @kakismash made their first contribution in pingdotgg/t3code#5041
* @mInrOz made their first contribution in pingdotgg/t3code#6675
* @JoeJoeflyn made their first contribution in pingdotgg/t3code#5069
* @vitalyiegorov made their first contribution in pingdotgg/t3code#5980
* @ostapondo made their first contribution in pingdotgg/t3code#5134
* @Jardo-51 made their first contribution in pingdotgg/t3code#6773
* @RoshanMhatre made their first contribution in pingdotgg/t3code#5488
* @CDVolvik made their first contribution in pingdotgg/t3code#6223
* @sebbonit made their first contribution in pingdotgg/t3code#4755
* @nqrwhal made their first contribution in pingdotgg/t3code#4772
* @Serendeep made their first contribution in pingdotgg/t3code#6510
* @0utsights made their first contribution in pingdotgg/t3code#4133

**Full Changelog**: pingdotgg/t3code@v0.0.34-nightly.20260815.1100...v0.0.34-nightly.20260815.1101

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.34-nightly.20260815.1101
awtprod added a commit to awtprod/t3-code that referenced this pull request Aug 16, 2026
* feat: pick worktree or current checkout per project (pingdotgg#5766)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): sidebar rows show the branch again, not a truncated plan step (pingdotgg#5776)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* feat(server): vp run migrate-dev-db seeds worktree dev dbs with real data (pingdotgg#5773)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): keep unsent drafts one click away in the sidebar (pingdotgg#5777)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): project icons can be chosen manually (pingdotgg#5775)

* fix(server): one greedy agent process no longer takes down the whole server (pingdotgg#5788)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* ci: label-gated hosted-web preview deploys (pingdotgg#5465)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Add cross-platform mobile usage dashboard (pingdotgg#5743)

* fix(web): preserve desktop route during Clerk auth (pingdotgg#5770)

* fix(web): match create theme and import theme buttons to the standard outline style (pingdotgg#5860)

* fix(server): favicon resolution no longer pins the event loop (pingdotgg#5538)

* fix(shared): bound the file-link label so bracket runs stop rescanning (pingdotgg#5782)

Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(web): thread title button no longer eats the drag area (pingdotgg#5857)

* fix(web): unify usage page chrome (pingdotgg#5823)

* fix(shell): add ~/.local/bin to the Windows CLI resolver so native-installed providers are found (pingdotgg#5074)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(web): match settings search shortcut styling to command palette's (pingdotgg#5841)

* fix(mobile): long-pressing a thread row no longer navigates into the thread (pingdotgg#5901)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): usage no longer double-counts forked Codex sessions (pingdotgg#5887)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): sandbox user-provided SVGs (pingdotgg#5916)

* fix(web): match usage titlebar text styling (pingdotgg#5897)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* Move project settings to contextual project routes (pingdotgg#5923)

* Preserve back navigation when opening settings (pingdotgg#5930)

Co-authored-by: codex <codex@users.noreply.github.com>

* Automate production mobile EAS releases (pingdotgg#5609)

* Add settings and usage breadcrumbs (pingdotgg#5929)

* fix(web): correct model picker trigger padding (pingdotgg#5935)

* fix(web): show worktree icon in sidebar v2 (pingdotgg#5909)

* fix(web): enable restore defaults after theme mix changes (pingdotgg#5928)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* fix(web): trait menu closes after you pick a level (pingdotgg#5879)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(web): align project name with headline (pingdotgg#5864)

* fix(web): update pills use readable theme foregrounds (pingdotgg#5938)

* fix(web): use themed confirmation dialogs (pingdotgg#5624)

* fix(web): use import/export-appropriate icons for theme buttons (pingdotgg#5964)

* fix(mobile): detect PowerShell cmdlet errors in work log rows (pingdotgg#5726)

* fix(mobile): stop Android user bubbles with code blocks from overlapping (pingdotgg#5659)

Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(mobile): parse EAS fingerprint JSON (pingdotgg#5991)

Co-authored-by: codex <codex@users.noreply.github.com>

* chore(release): prepare v0.0.33

* feat: multi-provider pull requests page with in-app reviews (pingdotgg#4849)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: maria <maria@kuuro.net>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* perf(desktop): probe the Windows shell environment concurrently (pingdotgg#5878)

Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com>

* feat(web): add duplicate action to the T3 Code default theme (pingdotgg#6013)

* fix(web): improve built-in theme contrast (pingdotgg#6000)

* fix(ci): extend release publish timeout (pingdotgg#6034)

* Allow Android tablets to rotate (pingdotgg#5613)

* fix(web): account for Windows window controls in PR page header (pingdotgg#6049)

* feat: add three-hour snooze option (pingdotgg#5914)

* fix(mobile): keep chat composer above the Android gesture bar (pingdotgg#5988)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): OpenCode model parsing drops models with a slash in the JSON body (pingdotgg#5072)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(web): persist sidebar shelf collapse state (pingdotgg#5136)

Co-authored-by: Illia Panasenko <hello@ipanasenko.me>

* perf(web): skip base64 for oversized image candidates (pingdotgg#5220)

* fix(server): skip Linux libc detection on Windows/macOS (pingdotgg#5354)

* fix(server): advertise 256-color TERM on Windows terminals (pingdotgg#5693)

* fix(server): handle unborn HEAD in VCS status (pingdotgg#5944)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(pull-requests): route self-hosted GitLab remotes (pingdotgg#6061)

* feat: add ability to create a new thread in the current project with shift+click and show shortcut in tooltip (pingdotgg#5994)

Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>

* feat(web): add Copy Thread ID to the sidebar and chat header thread context menu (pingdotgg#5574)

Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>

* fix(mobile): stabilize thread composer and interactions (pingdotgg#5986)

Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Thuong Tin <thuongtin@gmail.com>
Co-authored-by: Kapish14 <kapishnarang01@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Add hourly past-24-hour usage view (pingdotgg#6170)

* fix(mobile): guard App Store release versions (pingdotgg#6177)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(web): restore typography font sizes to defaults (pingdotgg#6172)

* feat(web): make environment artwork theme aware (pingdotgg#6183)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(shared): normalize a bare Windows drive root the same as C:\ / C:/ (pingdotgg#6189)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(shared): detect Azure DevOps SSH remotes (ssh.dev.azure.com) (pingdotgg#6187)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(web): add back buttons for the pull requests and usage pages in the sidebar footer (pingdotgg#6031)

Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>

* fix(web): render dropdowns above toasts (pingdotgg#6165)

Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(web): thread error banner dismiss survives reconnect and rerenders (pingdotgg#6123)

* fix(web): use a clearer pull action icon (pingdotgg#6194)

* feat(web): use OKLCH for theme palettes (pingdotgg#6036)

* fix(web): use upload icon for disabled push action (pingdotgg#6207)

* feat(web): add Open VSX theme search (pingdotgg#5654)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* fix(web): clean up composer resize animation (pingdotgg#6209)

* feat(web): compact sidebar footer actions (pingdotgg#6210)

* fix(web): keep sidebar wordmark visible at minimum width (pingdotgg#6246)

* feat(mobile): add thread title regeneration (pingdotgg#6253)

* chore: add dara to vouched (pingdotgg#6259)

* fix(web): align the composer model picker (pingdotgg#6252)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>

* fix(mobile): keep ordered lists inside user bubbles (pingdotgg#6154)

Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>

* feat(web): a better right panel empty state (pingdotgg#6258)

* fix(web): align mobile onboarding header (pingdotgg#6293)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>

* fix(connect): preserve CLI OAuth parameters through browser sign-in (pingdotgg#6285)

* fix(web): prevent changed files header overlap (pingdotgg#6314)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>

* fix(web): theme Clerk surfaces (pingdotgg#6300)

* feat(web): reset sidebar width on double click (pingdotgg#6320)

* fix(web): align update toast release notes link (pingdotgg#6322)

Co-authored-by: t3-code[bot] <219304759+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>
Co-authored-by: Exotic <118054752+extoci@users.noreply.github.com>

* fix(web): render tooltips above dropdowns (pingdotgg#6241)

* fix(web): open modified PR clicks in browser (pingdotgg#6278)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>

* Fix mobile command popover glass rendering (pingdotgg#6370)

* test(mobile): seed snoozed showcase threads (pingdotgg#5155)

* fix(web): preserve appearance mode when changing themes (pingdotgg#6343)

* feat(connect): deregister account environments from any client (pingdotgg#4844)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* feat(web): pull request surfaces — filters & qualifiers, all-server listing, update branch, reactions, in-place editing, smarter diffs (pingdotgg#6039)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): cmd+click sidebar PR numbers open in the browser (pingdotgg#6378)

* feat(web): project favicon and workspace icons in command subtitles (pingdotgg#6330)

Co-authored-by: Cursor <cursoragent@cursor.com>

* web/settings: fix source control scan on relay environments (pingdotgg#6230)

* fix(web): make reset zoom hover visible (pingdotgg#6385)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>

* fix(web): keep the typed prompt when a draft changes repo (pingdotgg#6393)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): keep diff file lists scrollable past expanded files (pingdotgg#6423)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): align Codex collaboration prompts (pingdotgg#6432)

* fix(web): keep turn minimap stable as composer grows (pingdotgg#6414)

* fix(web): keep pull request panel within viewport (pingdotgg#6451)

* Add bil0000 to VOUCHED contributors list (pingdotgg#6462)

* fix: ignore pull request actions in latency tracker (pingdotgg#6476)

Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>

* Remove rebase requirement before opening PR (pingdotgg#6479)

* fix(mobile): extend blockquotes across wrapped lines (pingdotgg#6482)

* fix(mobile): prevent invalid HTML entities from crashing markdown (pingdotgg#6495)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* fix(web): avoid Clerk close button overlap (pingdotgg#6442)

Co-authored-by: t3-code[bot] <236186684+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>

* fix(web): show unlinked icon when viewport aspect ratio is unlocked (pingdotgg#6509)

* fix(web): scope pull request errors to their environment (pingdotgg#6490)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(mobile): show a real settings cog in the Android sidebar header (pingdotgg#6520)

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

* fix(web): restore default stage artwork colors (pingdotgg#6535)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>

* fix(web): align sidebar wordmark label (pingdotgg#6086)

* fix(web): align the snoozed thread wake icon (pingdotgg#6215)

* feat: allow disabling auto-settle on merge (pingdotgg#5880)

* Nest mobile task settings in bottom sheets (pingdotgg#6224)

Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* chore(mobile): bump app version to 1.0.4

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(web): simplify the desktop-managed server update banner copy (pingdotgg#6549)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): show background policy tooltips sooner (pingdotgg#6506)

* feat(desktop): add favicons to the Browser panel (pingdotgg#5644)

* fix(preview): only show browser-ready local servers (pingdotgg#6021)

* perf(build): stop unpacking node_modules wholesale from the Windows asar (pingdotgg#5877)

Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com>
Co-authored-by: t3-code[bot] <t3-code[bot]@users.noreply.github.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>
Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>

* fix: avoid stale Live Activities when publishing is disabled (pingdotgg#6325)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): add breathing room between the git progress overlay and the app bar (pingdotgg#6587)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): keep thread rename open during IME composition (pingdotgg#6281)

* refactor(mobile): name the iOS nav bar height fallback (pingdotgg#6589)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(mobile): preserve keyboard suggestions while typing (pingdotgg#6323)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): prevent OTA update restart crashes (pingdotgg#6324)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): align every titlebar control cluster on one shared inset (pingdotgg#6592)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): steer active turns by default (pingdotgg#6543)

* fix(web): clarify desktop update status (pingdotgg#6504)

* fix(server): terminal subprocess polling no longer floods the PID space (pingdotgg#6377)

* fix(web): add copying terminal selection with ctrl+c in the web app (pingdotgg#5638)

* perf(desktop): speed up Windows update installation (pingdotgg#6169)

* fix(web): style sidebar action tooltips (pingdotgg#6371)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>

* refactor(web): simplify global styling (pingdotgg#6381)

Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(server): handle files named HEAD in git status (pingdotgg#6397)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* feat(packaging): maintain AUR packages in-repo (pingdotgg#4128)

* fix(web): bound OKLCH gamut mapping (pingdotgg#6485)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* feat(web): open remote environments in your local editor over SSH (pingdotgg#6572)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): refresh workspace layouts and tool activity

* revert: refresh workspace layouts and tool activity (pingdotgg#6657)

* Sync upstream with public-safe fixtures

Squash the reviewed upstream sync into a public-safe history while preserving its final tree.

* feat(web): older chat timestamps show the date, not just the time (pingdotgg#6654)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): align pull request action menu rows (pingdotgg#6534)

Co-authored-by: Nickolas Kyryliuk <nickolaskyryliuk@gmail.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(web): restore selected themes in dark mode (pingdotgg#6665)

* fix(web): improve Codex usage graph contrast (pingdotgg#6669)

* docs: route feature requests to Discussions

- Disable feature-request issue templates
- Direct contributors to Ideas discussions for proposals

* fix(desktop): app zoom no longer zooms the preview browser (pingdotgg#6649)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(server): keep provider notification consumers alive past startSession (pingdotgg#6538)

Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com>

* fix(server): treat removed Bitbucket permissions endpoint as unknown, not blocking (pingdotgg#6525)

* fix(ssh): let cold remote servers finish starting (pingdotgg#6168)

* fix(web): preserve Claude insight line breaks (pingdotgg#4344)

* feat(web): accept file drops across the chat workspace (pingdotgg#6636)

* fix(web): widen ordered-list marker gutter for 3+ digit item numbers (pingdotgg#6527)

* fix(server): bound thread activity hydration (pingdotgg#6153)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(web): restore the Archive action in the default sidebar thread menu (pingdotgg#6526)

* fix(web): open diff files from nested projects (pingdotgg#6174)

* fix(mobile): use tryOpenExternalUrl for markdown links in ThreadFeed (pingdotgg#5872)

Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): open the file a bare filename reference names (pingdotgg#6297)

Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(server): stop the provider title mirror from overwriting real thread titles (pingdotgg#5941)

* fix(shared): match source-control providers by DNS label (pingdotgg#6175)

* feat(desktop): Chrome-style hold-to-quit (pingdotgg#5508)

* fix(gitlab): submit review comments on context lines (pingdotgg#6348)

* fix(marketing): keep Grok mark clear of mobile hero copy (pingdotgg#4542)

* fix(mobile): recover the QR pairing scanner when camera access is denied (pingdotgg#6487)

* fix(web): keep a long path from running under the folder picker button (pingdotgg#4823)

Co-authored-by: Sy-D <8460326+Sy-D@users.noreply.github.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* fix(terminal): right-click paste works in the terminal (pingdotgg#5240)

* fix(mobile): explain iOS-only settings on Android (pingdotgg#4981)

* fix(web): stop counting a workflow coordinator as a working agent (pingdotgg#6672)

* fix(web): keep floating preview anchored after panel closes (pingdotgg#6547)

* fix(web): unstick /connect after in-modal sign-in by redirecting to the authorize endpoint (pingdotgg#5133)

* fix(web): keep send reachable while a turn is running on mobile (pingdotgg#4781)

Co-authored-by: AMohamedAakhil <hello@takaitech.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* fix(web): reject unsupported composer image types at attach time (pingdotgg#6574)

* Make ClaudeTextGeneration tests hermetic on Windows (pingdotgg#4508)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* fix(web): show command output in work log (pingdotgg#4083)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* fix(web): reserve sibling column width when resizing the right panel (pingdotgg#6279)

* fix(web): replace whitespace in new ref names with dashes (pingdotgg#6270)

* fix(client-runtime): branch list no longer resets while paging through refs (pingdotgg#5858)

* fix(web): support Shift+Insert terminal paste (pingdotgg#5982)

* fix(web): keep the composer glass aligned with the context strip at any interface font size (pingdotgg#5703)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(codex): keep background memory out of chats (pingdotgg#5468)

* fix(server): treat a missing Codex rollout as a recoverable resume error (pingdotgg#6671)

* fix(web): hide provider Update toast action while an update is running (pingdotgg#6544)

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(desktop): agent shells inherit a UTF-8 locale on macOS (pingdotgg#6236)

* fix(server): ignore Claude command lifecycle messages (pingdotgg#6606)

* docs: mention Bitbucket user read scope needed by auth probe (pingdotgg#6291)

Co-authored-by: Gerwin Bisschop <gerwin@regeljelease.nl>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): return valid preview action results (pingdotgg#5966)

Co-authored-by: duncan-vc <247855047+duncan-vc@users.noreply.github.com>

* fix(claude): make "Always allow for session" stick, and only for the session (pingdotgg#5041)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(ssh): surface a failed remote t3 install instead of a silent 0-byte server.log (pingdotgg#5132)

* perf(server): persist the wire projection for streaming tool.updated data (pingdotgg#6675)

Co-authored-by: mInrOz <14320143+mInrOz@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): stop wrapping partial code block selections in markdown fences (pingdotgg#5069)

* fix(web): hide T3 Connect toggle in web app settings (pingdotgg#5068)

* fix(web): show provider account accent badge in sidebar rows and hover card (pingdotgg#5980)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): wait for concurrent SQLite writers instead of failing with SQLITE_BUSY (pingdotgg#5134)

* fix(web): reject oversized prompts before provider turn start (pingdotgg#6602)

* feat(web): collapse the question prompt from its header (pingdotgg#6773)

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

* fix(shared): degrade an unknown system time zone to UTC in usage windows (pingdotgg#6670)

* fix(claude): discover repo-local .agents/skills in skill discovery (pingdotgg#5488)

* fix(server): let slow provider CLIs raise their discovery probe budget (pingdotgg#6223)

Co-authored-by: Julius Marminge <jmarminge@gmail.com>

* fix(web): retain terminal PR badges after checkout switch (pingdotgg#4755)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* fix(web): show selected model in context window tooltip (pingdotgg#4772)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* fix(web): scale command details with code font (pingdotgg#6510)

* fix(web): preserve XML-like tags in user messages (pingdotgg#4133)

Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(desktop): route mouse thumb buttons to the in-app browser (pingdotgg#4459)

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* fix(web): keep the final segment of directory paths with a trailing separator (pingdotgg#5460)

Co-authored-by: jorvarea <jorvarea@users.noreply.github.com>

* Keep block code plain when copying from rendered markdown (pingdotgg#4468)

* fix(web): add web app manifest so installed app keeps its scope (pingdotgg#4306)

* Skip user hooks during Claude capability probes (pingdotgg#4466)

* fix(mobile): use Android monospace font family (pingdotgg#4609)

* fix(desktop): timestamps follow the OS locale instead of en-US (pingdotgg#6190)

* fix(web): keep multi-select questions open after the first click (pingdotgg#6646)

* fix(web): stop clipping the changed-files expand hover on Windows (pingdotgg#6545)

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(server): allow long-running git pushes (pingdotgg#6499)

* fix(desktop): keep probing backend readiness while the process is alive (pingdotgg#5526)

* fix(server): allow install scripts in npm-global provider updates (pingdotgg#5646)

* fix: detect SSH remotes with non-git user prefixes (e.g. gitlab@) (pingdotgg#3649)

* fix(web): describe what Ultracode does in the Reasoning picker (pingdotgg#6092)

* fix(server): settle pending user-input requests when a Claude session stops (pingdotgg#5127)

Co-authored-by: Capxul Agent <agent@capxul.dev>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* fix(server): stop replaying a command receipt for a different aggregate (pingdotgg#5246)

* fix(server): settle snoozed threads immediately (pingdotgg#5379)

* fix(mobile): prevent crash on sign out in settings (pingdotgg#4899)

* fix(mobile): local-checkout threads record their branch so PR badges show (pingdotgg#4986)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* fix(web): contain long approval commands (pingdotgg#6503)

* feat(web): make right panel maximize bindable (pingdotgg#5091)

* fix(server): respect inherited OPENCODE_CONFIG_CONTENT (pingdotgg#4242)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* fix(marketing): detect Mac chip on homepage download button (pingdotgg#4197)

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* Keep the server alive when a response write hits a dead socket (pingdotgg#4470)

* Limit physical key fallback to non-Latin layout output (pingdotgg#4469)

* fix: restore CLAUDE.md symlink target (pingdotgg#3929)

* fix(clients): default clone destination to folder plus repo name (pingdotgg#5989)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* fix(web): keep timestamp date and time in the same locale (pingdotgg#7081)

Co-authored-by: codex <codex@users.noreply.github.com>

* feat(desktop): add signal macOS DMG installer background (pingdotgg#6201)

Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* feat(web): send PR line requests to agent (pingdotgg#6597)

* fix(web): restore dark theme palette (pingdotgg#6663)

Co-authored-by: maria <maria@kuuro.net>

* refactor(web): simplify advanced theme controls (pingdotgg#7107)

* fix(web): keep highlighted command menu items clear of the scroll fade (pingdotgg#7132)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* test: remove redundant and stale tests (pingdotgg#6267)

* fix: repair typecheck errors left by the upstream/main merge

Fixes surfaced by a full repo-wide typecheck after merging upstream/main
and origin/main into sync-upstream-continue:

- apps/web/src/components/SidebarV2.tsx: add missing isRunning field
- apps/web/src/components/settings/BetaSettingsPanel.tsx: replace removed
  useSidebarV2Enabled hook with useClientSettings selector
- apps/web/src/components/settings/SettingsFontPreviews.tsx: drop obsolete
  onCopy callback (GhosttyTerminalSurface now handles copy natively)
- apps/mobile/src/lib/threadActivity.ts: remove duplicate
  MOBILE_TERMINAL_UPDATE_STATUSES/isTerminalBypassUpdate/isAgentInternalActivity
  block left by a silent (non-conflict-marked) merge duplication
- apps/mobile/src/features/threads/ThreadComposer.tsx: remove duplicate
  handleEfficiencyMenuAction, same cause
- apps/mobile/src/features/threads/ThreadDetailScreen.tsx: stop passing
  activeThreadBusy to ThreadComposer, which no longer accepts it
- apps/mobile/src/features/home/HomeScreen.tsx: remove dead
  shouldShowConnectionStatus/WorkspaceConnectionStatus/connectionStatus
  references (connection state now surfaces via the header title slot)
- apps/mobile/src/features/home/HomeRouteScreen.tsx: fix settings-sheet
  navigation params, drop the now-removed onOpenEnvironments prop
- apps/mobile/src/features/settings/SettingsUsageRouteScreen.tsx: use the
  fork's UsageQuerySummary/UsageQueryTokenTotals types instead of upstream's
  UsageSummary/UsageTokenTotals, matching what the usage RPC actually returns
- packages/contracts/src/ipc.ts: drop DesktopBridge.confirm, superseded by
  LocalApi.dialogs.confirm; every desktop-side implementation had already
  dropped it independently
- apps/desktop/src/window/DesktopApplicationMenu.test.ts: drop the
  now-invalid confirm mock to match
- apps/desktop/src/preview/Manager.ts: remove a duplicate
  FrameCaptureConsumer/FrameCaptureSession/PictureInPictureSession block
- apps/server/src/environment/RemoteOpenTargets.ts: fix service tag to the
  fork's @awtprod/command-center/... convention
- apps/server/src/persistence/Layers/ProjectionThreads.ts: restore the
  upsertProjectionThreadRow query, which a conflict resolution had mangled
  into an invalid mix of INSERT and SELECT clauses
- apps/mobile/package.json, patches/@legendapp__list@3.3.3.patch: fix
  @legendapp/list version pin and repair a patch file left with unresolved
  nested conflict markers from a rename/rename conflict

Full repo-wide `vp run -r typecheck` now passes clean across all 16
workspace packages.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* fix: repair pre-existing SQL and test bugs surfaced by running the full suite

- apps/server/src/orchestration/Layers/ProjectionSnapshotQuery.ts: three
  activity-listing queries selected correlated_message_id in their outer
  SELECT but never in the inner bounded subquery (two cases) or not at all
  (listPinnedThreadActivityRowsByThread), causing "no such column" SQL
  errors and schema decode failures. Pre-existing in HEAD before this
  merge, just never exercised until the full test suite ran clean of
  conflict markers.
- packages/contracts/src/settings.test.ts: removed a test asserting that
  decoding drops the sidebarV2Enabled/sidebarV2ConfiguredByUser keys —
  contradicted the adjacent "ClientSettings sidebar v2" tests and the
  real schema, which keeps both fields alive alongside legacySidebarEnabled
  for BetaSettingsPanel.tsx.
- packages/contracts/src/settings.ts: fixed the legacySidebarEnabled
  comment to describe the fields as coexisting, not superseding.
- apps/web/src/browserFaviconStore.test.ts, browserHistoryStore.test.ts:
  switched their `~/state/session` mocks to importOriginal() + override,
  so the real environmentSession export (now used transitively via
  state/server.ts) stays available instead of being dropped entirely.

Full repo-wide `vp run -r test` passes (aside from two known-flaky
poll-based tests that pass in isolation but time out under full
concurrent load, unrelated to this merge).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* fix(server): update stale npm-global test expectation for --allow-scripts

Upstream added the --allow-scripts=<package> flag to npm-global provider
update commands; this test's expectation was the only one in the file
that hadn't been updated to match (the other three assertions in the same
file already expect the flag).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* test(server): skip a deadlocking git-push timeout test pending investigation

"allows pushes to run longer than the default command timeout" hangs until
the test timeout regardless of how long that timeout is (confirmed at both
120s and 180s), merged verbatim from upstream commit 86fb47a and
untouched by any conflict resolution in this sync. Needs its own look at
how pushCurrentBranch's command-timeout override interacts with TestClock;
skipping for now so it doesn't block the suite.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* fix: keep usage dashboard current (#25)

Co-authored-by: atryan <atryan@users.noreply.github.com>

* fix(web): keep usage totals current by default (#26)

Co-authored-by: atryan <atryan@users.noreply.github.com>

* feat(desktop): run local threads without leaving a remote primary (#27)

* fix(web): switch new threads between connected computers

* feat(desktop): keep Windows available with a remote primary

* docs: explain local execution with a remote primary

---------

Co-authored-by: atryan <atryan@users.noreply.github.com>

* fix(web): open usage on the past 24 hours (#28)

* fix(web): open usage on the past 24 hours

* fix(server): resolve native Codex npm runtimes

---------

Co-authored-by: atryan <atryan@users.noreply.github.com>

* fix(desktop): stop remote-primary mode from launching a local backend (#30)

Co-authored-by: atryan <atryan@users.noreply.github.com>

* fix(web): keep visible usage dashboards current (#31)

Co-authored-by: atryan <atryan@users.noreply.github.com>

* Fix/codex isolation missing auth (#32)

* fix(web): open usage on the past 24 hours

* fix(server): resolve native Codex npm runtimes

* fix(desktop): stop remote-primary mode from launching a local backend

* fix(server): bypass identity wrapper for isolated Codex

* fix(server): accept enforced Codex read denials

* fix(server): stop isolation probe from scanning host processes

* fix(server): fail closed when Codex isolation finds no credentials

`prepareCommandCenterCodexHome` only copied `auth.json` into the isolated
home when the source home had one, and never checked the result. A source
home without credentials produced a working session that failed on its
first model call with an opaque provider 401 naming neither the missing
file nor the home Command Center actually read.

Require credentials in the isolated home before returning the layout, and
name the resolved source path in the error.

Seed `auth.json` in the fixtures that relied on the previous fail-open
behavior; they cover home layout and profile injection, not auth.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(server): surface Codex sandbox permission requests

Codex 0.147 asks to widen its sandbox with
`item/permissions/requestApproval`. No handler was registered, so the
request fell through to `handleUnknownServerRequest` and was answered
with a JSON-RPC "method not found". Codex reports that as
`user rejected MCP tool call`, so the turn failed with an approval the
user was never shown and could not answer.

Register the handler and map the method through to a real approval
prompt. The request carries an arbitrary path list (each read/write/deny)
plus a network toggle, so the decision is classified on the requested
permissions rather than on the tool that triggered them — a read-only
tool can still ask for write.

`autoApproveReadOnlyPermissions` (off by default) grants an escalation
without prompting only when every entry is a read: any write, sandbox
denial, legacy write list, or network enable still prompts. Auto-grants
are scoped to the turn, never the session.

The approval channel carries only accept/decline, so the granted profile
is the requested one echoed back on accept and an empty profile on
refusal, mirroring how ClaudeAdapter replays SDK permission suggestions.

Requests are surfaced with the `file-change` kind: ingestion derives the
kind from the canonical request type alone, and a kind that varied per
request would disagree between the opened and resolved activities. A
request with no kind renders no prompt in web or mobile while the server
still opens a pending row, which parks the thread unanswerable.

The persisted activity keeps only `detail`, so the requested paths are
folded into it — otherwise the prompt cannot be reviewed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: atryan <atryan@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* style(web): wrap an over-long condition in useLiveRefresh (#34)

`vp check` fails on sync-upstream because this line exceeds the print width,
which blocks CI for every PR targeting the branch. Formatter-only change: the
condition is re-wrapped, with no behaviour difference.

Co-authored-by: atryan <atryan@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(dev): stop a stray system `vp` from silently killing dev servers (#33)

dev-runner spawns `vp` by bare name with `extendEnv: false`, so resolution
depended entirely on the PATH it inherited. When node_modules/.bin was absent
from that PATH, an unrelated /usr/bin/vp (atfs/ShapeTools) won the lookup and
failed in the worst possible way: it printed `basename: unrecognized option
'--filter=...'`, started no dev server, and exited 0. The launcher reported
success while the stack was already gone.

Pin the repo's node_modules/.bin ahead of the inherited PATH so `vp` always
means this repo's toolchain, whatever environment we were launched from.

Co-authored-by: atryan <atryan@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(web): drop stale ComposerPrimaryActions.test.ts duplicate

The upstream sync left both .ts and .tsx test files for the same
component; they collide on case-insensitive filesystems (Windows/macOS
CI) and release-smoke's path-collision check fails the build. The .tsx
version is upstream's current file and is a strict superset of the
stale fork-only .ts copy.

---------

Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Robert Soriano <sorianorobertc@gmail.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>
Co-authored-by: Matt Urenovich <murenovich@gmail.com>
Co-authored-by: Tyler <tyler@southboundsoftware.com>
Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com>
Co-authored-by: nathangerday <44236114+nathangerday@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Arham Amin <132888838+arhxam@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Ellie Gummere <hello@unknownhost.name>
Co-authored-by: Tristan Knight <admin@snappeh.com>
Co-authored-by: Simone <lucenz@proton.me>
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: Carter Smith <51297686+carterwsmith@users.noreply.github.com>
Co-authored-by: Chris Deeming <chris@xenforo.com>
Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>
Co-authored-by: Mina Yacoub <56601613+myacoub91@users.noreply.github.com>
Co-authored-by: Rodrigo Brechard <rodrigobrechard@gmail.com>
Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr>
Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com>
Co-authored-by: maria <maria@kuuro.net>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: Jono Kemball <Noojuno@users.noreply.github.com>
Co-authored-by: Pavlo Trinko <paul.trinko95@gmail.com>
Co-authored-by: Alex <me@pixp.cc>
Co-authored-by: Illia Panasenko <hello@ipanasenko.me>
Co-authored-by: Taras <Taras.Fomin@gmail.com>
Co-authored-by: bkntr <888122+bkntr@users.noreply.github.com>
Co-authored-by: yassiEmp <158713173+yassiEmp@users.noreply.github.com>
Co-authored-by: Guilherme Vieira <46866023+GuilhermeVieiraDev@users.noreply.github.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: Thuong Tin <thuongtin@gmail.com>
Co-authored-by: Kapish14 <kapishnarang01@gmail.com>
Co-authored-by: Exotic <118054752+extoci@users.noreply.github.com>
Co-authored-by: Nick Anisimov <n.anisimov.23@gmail.com>
Co-authored-by: t3-code[bot] <219304759+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Gianmarco <gianmarcosimone89@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Dominic Roy <dominic@goauthentik.io>
Co-authored-by: Dominic Roy <dominic@sdko.org>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
Co-authored-by: t3-code[bot] <236186684+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Adamulek123 <adam.bogucki@piekna.edu.pl>
Co-authored-by: Paul van Dyk <paul@vandyk.fr>
Co-authored-by: Taylor Bombay <taylor@warheadent.com>
Co-authored-by: Rakshith Bhat <88523594+RakshithBhat03@users.noreply.github.com>
Co-authored-by: David Hu <davidhu314@gmail.com>
Co-authored-by: t3-code[bot] <t3-code[bot]@users.noreply.github.com>
Co-authored-by: Michael Charles Aubrey <aubrey@michaelcharl.es>
Co-authored-by: Dara Adedeji <76637177+SunkenInTime@users.noreply.github.com>
Co-authored-by: atryan <atryan@users.noreply.github.com>
Co-authored-by: Nickolas Kyryliuk <nickolaskyryliuk@gmail.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
Co-authored-by: Guilherme Barros <gbarros1095@gmail.com>
Co-authored-by: Yukun Shan <92423096+nateEc@users.noreply.github.com>
Co-authored-by: David Balderston <dbalders@gmail.com>
Co-authored-by: mohamedmastouri-hue <mohamed.mastouri@ensi-uma.tn>
Co-authored-by: Ulises Britos <45952970+repparw@users.noreply.github.com>
Co-authored-by: Nicolas Layne <49288482+NicL9923@users.noreply.github.com>
Co-authored-by: JJ <93147993+hey-jj@users.noreply.github.com>
Co-authored-by: Simon Doba <simon.doba@hotmail.de>
Co-authored-by: Sy-D <8460326+Sy-D@users.noreply.github.com>
Co-authored-by: Daniel Vernon <danpvernon@gmail.com>
Co-authored-by: Rishet11 <154429365+Rishet11@users.noreply.github.com>
Co-authored-by: Akshar Patel <123344143+AksharP5@users.noreply.github.com>
Co-authored-by: Torben Wetter <github@torben.id>
Co-authored-by: BootesVoid <78485654+AMohamedAakhil@users.noreply.github.com>
Co-authored-by: AMohamedAakhil <hello@takaitech.com>
Co-authored-by: mohammed shazeb <mohammedshazeb10@gmail.com>
Co-authored-by: Mihnea Peteu <mihneanob@gmail.com>
Co-authored-by: LikoKiko Tech <145937091+LikoKiko@users.noreply.github.com>
Co-authored-by: Vividh Mahajan <82711162+Lasdw6@users.noreply.github.com>
Co-authored-by: Jorge Pineda <jorgepineda0310@gmail.com>
Co-authored-by: abhwshek <67309069+a20hek@users.noreply.github.com>
Co-authored-by: aoright <102943475+aoright@users.noreply.github.com>
Co-authored-by: Williawar <28518115+Williawar@users.noreply.github.com>
Co-authored-by: Mark Griffin <mrmg@deflexion.net>
Co-authored-by: Linus Boehm <linus.boehm@finto.de>
Co-authored-by: Naveed Iqbal <naveediqbal949@gmail.com>
Co-authored-by: Gerwin <9853101+thamrx@users.noreply.github.com>
Co-authored-by: Gerwin Bisschop <gerwin@regeljelease.nl>
Co-authored-by: duncan-vc <duncan@ommsocial.co.za>
Co-authored-by: duncan-vc <247855047+duncan-vc@users.noreply.github.com>
Co-authored-by: Joaquin Navarro <alfian1991@gmail.com>
Co-authored-by: Martin Bergo <martin.n.bergo@gmail.com>
Co-authored-by: mInrOz <14320143+mInrOz@users.noreply.github.com>
Co-authored-by: Tai Nguyen <87302343+JoeJoeflyn@users.noreply.github.com>
Co-authored-by: Vitaly Iegorov <vitalyiegorov@gmail.com>
Co-authored-by: Ostap <33957189+ostapondo@users.noreply.github.com>
Co-authored-by: Jaroslav Brtis <6890442+Jardo-51@users.noreply.github.com>
Co-authored-by: Roshan Mhatre <officialroshanm@gmail.com>
Co-authored-by: Carlos Jimenez <cjimenez@r21digital.com>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
Co-authored-by: sebbonit <36650750+sebbonit@users.noreply.github.com>
Co-authored-by: nqrwhal <81386789+nqrwhal@users.noreply.github.com>
Co-authored-by: CursedApple <36764254+Serendeep@users.noreply.github.com>
Co-authored-by: John Surles <outsightszs@Outlook.com>
Co-authored-by: Akos Balogh <hello.akosb@gmail.com>
Co-authored-by: jorvarea <47249803+jorvarea@users.noreply.github.com>
Co-authored-by: jorvarea <jorvarea@users.noreply.github.com>
Co-authored-by: Aditya Garud <153842990+yashranaway@users.noreply.github.com>
Co-authored-by: Alex Brodsky <122503996+Albro3459@users.noreply.github.com>
Co-authored-by: Harshith Goka <harshith9399@gmail.com>
Co-authored-by: Paul <paul@brzz.dev>
Co-authored-by: RaitP1 <150583432+RaitP1@users.noreply.github.com>
Co-authored-by: Dev Talan <chaudhary.dev.talan@gmail.com>
Co-authored-by: Luis Gustavo Couto Wacker <luis.wacker@pagar.me>
Co-authored-by: JackatDJL <71508487+JackatDJL@users.noreply.github.com>
Co-authored-by: delltrak <78751023+delltrak@users.noreply.github.com>
Co-authored-by: Aaron Abu Usama <50079365+AaronAbuUsama@users.noreply.github.com>
Co-authored-by: Capxul Agent <agent@capxul.dev>
Co-authored-by: Kevin Bravo <79945749+0bkevin@users.noreply.github.com>
Co-authored-by: shubhu <93861282+shubhu121@users.noreply.github.com>
Co-authored-by: Zeus-Deus <100132710+Zeus-Deus@users.noreply.github.com>
Co-authored-by: El-Hussein Abdelraouf <hussein@raoufs.me>
Co-authored-by: Jono <jono@foodnotblogs.com>
Co-authored-by: Mahdi Ben Messaoud <mahdibenmassoud98@gmail.com>
Co-authored-by: Ngo Quoc Viet <123613986+NgoQuocViet2001@users.noreply.github.com>
Co-authored-by: Inaya Yousfi <zied.essaber@gmail.com>
Co-authored-by: Eddy Naboulet <93473191+eddy-naboulet@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M 30-99 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.

[Feature]: Replace white spaces with dashes when creating a branch

3 participants