Release: extension 1.17.0, desktop 2.4.0, Merge Studio 1.2.0 - #63
Merged
Merged
Conversation
antonarnaudov
force-pushed
the
release/ext-1.17-app-2.4-ms-1.2
branch
from
September 29, 2026 11:07
6570594 to
f4c7169
Compare
- Git: disposing a git that failed to spawn signalled pid 0, the whole process group, which is the extension host (it killed the test runner). Every kill now needs a real pid. - Desktop: a chat cancelled just before its message went out wrote to the stdin it had just ended, an uncaught 'error' in the main process. - Desktop: the AI settings started as a shallow copy of a shared constant, so the first connection added before any settings file existed was pushed into @gitstudio/ai's EMPTY_AI_SETTINGS. - AI: an Azure base URL ending in "/" before its ?api-version query produced ".../gpt//chat/completions". - Refs: annotated tags (most releases) came back with no date, because %(committerdate) is empty for a tag object; %(creatordate) is the commit's date for a commit and the tagger's for a tag. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…renderer Tests written against real temp repositories, a local bare remote and fakes for GitHub, the AI providers and the CLI — never the network. Every test asserts behaviour: the git state left behind, what a page is sent, what the person is asked and told. Bugs they found and that are not fixed yet are marked test.todo / skip with the correct behaviour written down. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A single c8 run over the whole repo merges V8's raw coverage by script URL and assumes every process ran the same code. A package's source is transpiled once for its own tests and differently again when an app's tests load it through the workspace link, so shared files were read against the wrong text: host-bridge's scrubber reported 13% with every line tested. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ct" too Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Push re-created a branch deleted on the remote: with its tracking config
left behind and the remote-tracking ref pruned, a bare `git push` published
it again. Push (and push-by-name, its twin) now refuses and says the branch
it tracks is gone — while a single-branch clone, where @{u} never resolves,
still pushes.
- A reword's "#" lines were deleted after the rebase paused: the chosen
comment character stayed in .git while the queue moved into rebase-merge/.
- A rebase git refused up front (autostash over unresolved conflicts) was
reported as a rebase stopped on conflicts. It is now refused before
anything runs, with the reason.
- Stash & Retry was offered for a rebase onto, or a pick/revert of, a name
git cannot resolve — git refuses the name before it looks at the tree.
- An unreadable repository (a .git file pointing nowhere) read as a detached
HEAD, so the push review said "HEAD is detached". It now says git's error.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- A conflict both sides inserted between two lines was written after the next line when only that next line had been edited (a, c2, <markers> instead of a, <markers>, c2). - An add/add conflict (no common base) wrote each side with an extra blank line inside the markers, and lost the file's last line break; resolving by hand left a stray blank line. Untouched, the file is now byte-for-byte what git writes. Checked by fuzzing the old and new writer over 450k random merges: every other difference was the first bug being fixed. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Extension: File History, Line History, Open Changes and the Timeline
compared paths with "/" — on Windows no file was ever inside its
repository. They use the shared separator- and case-aware check now.
- Extension: Sync's "upstream no longer exists" question named no upstream;
it reads the configured one now ("tracks origin/topic").
- Desktop: a repository with no commits yet showed "Couldn't load history"
instead of its "No commits yet" tile.
- Desktop: a failed clone showed git's last line — often a fragment like
"and the repository exists." — instead of the reason.
- Desktop: on Windows, repositories were grouped outside the folders they
sit in (backslashes from the folder picker against "/" comparisons).
- Crash reports: a path with a space scrubbed differently the second time,
so the same crash could fingerprint twice.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Versions, changelog headings (29 Sep 2026) and release notes for what the nightly batch merged: ways to support GitStudio, the launch screen, tabs that survive a quit, the no-Git screen, honest PRIVACY.md files and a Gravatar switch, SECURITY.md and issue forms, the macOS 12 guard, and the security fixes. The READMEs now say everything each product sends (the extension's said crash reports were "the one thing"), the root README no longer says AI keys live in SecretStorage, and it links the privacy and security docs. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ease/ext-1.17-app-2.4-ms-1.2
…ase notes Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
antonarnaudov
force-pushed
the
release/ext-1.17-app-2.4-ms-1.2
branch
from
September 29, 2026 16:56
f4c7169 to
392e8e9
Compare
… outran The updater flow waited 20 event-loop turns for electron-updater to load, and the rebase panel read its banner right after a keypress. Both now wait for what they assert, capped by wall time. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ease/ext-1.17-app-2.4-ms-1.2
…n Windows Killing git.exe left the ssh it had started running and holding the clone's pipes, so the clone never reported that it ended — the test for it hung a Windows CI runner for four hours. taskkill /T takes the tree. The test is capped at 30s, and the desktop, extension and git-service suites now fail a test after five minutes instead of waiting forever. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Push re-created a branch deleted on the remote: with its tracking config
left behind and the remote-tracking ref pruned, a bare `git push` published
it again. Push (and push-by-name, its twin) now refuses and says the branch
it tracks is gone — while a single-branch clone, where @{u} never resolves,
still pushes.
- A reword's "#" lines were deleted after the rebase paused: the chosen
comment character stayed in .git while the queue moved into rebase-merge/.
- A rebase git refused up front (autostash over unresolved conflicts) was
reported as a rebase stopped on conflicts. It is now refused before
anything runs, with the reason.
- Stash & Retry was offered for a rebase onto, or a pick/revert of, a name
git cannot resolve — git refuses the name before it looks at the tree.
- An unreadable repository (a .git file pointing nowhere) read as a detached
HEAD, so the push review said "HEAD is detached". It now says git's error.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- A conflict both sides inserted between two lines was written after the next line when only that next line had been edited (a, c2, <markers> instead of a, <markers>, c2). - An add/add conflict (no common base) wrote each side with an extra blank line inside the markers, and lost the file's last line break; resolving by hand left a stray blank line. Untouched, the file is now byte-for-byte what git writes. Checked by fuzzing the old and new writer over 450k random merges: every other difference was the first bug being fixed. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Extension: File History, Line History, Open Changes and the Timeline
compared paths with "/" — on Windows no file was ever inside its
repository. They use the shared separator- and case-aware check now.
- Extension: Sync's "upstream no longer exists" question named no upstream;
it reads the configured one now ("tracks origin/topic").
- Desktop: a repository with no commits yet showed "Couldn't load history"
instead of its "No commits yet" tile.
- Desktop: a failed clone showed git's last line — often a fragment like
"and the repository exists." — instead of the reason.
- Desktop: on Windows, repositories were grouped outside the folders they
sit in (backslashes from the folder picker against "/" comparisons).
- Crash reports: a path with a space scrubbed differently the second time,
so the same crash could fingerprint twice.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… outran The updater flow waited 20 event-loop turns for electron-updater to load, and the rebase panel read its banner right after a keypress. Both now wait for what they assert, capped by wall time. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ease/ext-1.17-app-2.4-ms-1.2
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Push re-created a branch deleted on the remote: with its tracking config
left behind and the remote-tracking ref pruned, a bare `git push` published
it again. Push (and push-by-name, its twin) now refuses and says the branch
it tracks is gone — while a single-branch clone, where @{u} never resolves,
still pushes.
- A reword's "#" lines were deleted after the rebase paused: the chosen
comment character stayed in .git while the queue moved into rebase-merge/.
- A rebase git refused up front (autostash over unresolved conflicts) was
reported as a rebase stopped on conflicts. It is now refused before
anything runs, with the reason.
- Stash & Retry was offered for a rebase onto, or a pick/revert of, a name
git cannot resolve — git refuses the name before it looks at the tree.
- An unreadable repository (a .git file pointing nowhere) read as a detached
HEAD, so the push review said "HEAD is detached". It now says git's error.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- A conflict both sides inserted between two lines was written after the next line when only that next line had been edited (a, c2, <markers> instead of a, <markers>, c2). - An add/add conflict (no common base) wrote each side with an extra blank line inside the markers, and lost the file's last line break; resolving by hand left a stray blank line. Untouched, the file is now byte-for-byte what git writes. Checked by fuzzing the old and new writer over 450k random merges: every other difference was the first bug being fixed. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Extension: File History, Line History, Open Changes and the Timeline
compared paths with "/" — on Windows no file was ever inside its
repository. They use the shared separator- and case-aware check now.
- Extension: Sync's "upstream no longer exists" question named no upstream;
it reads the configured one now ("tracks origin/topic").
- Desktop: a repository with no commits yet showed "Couldn't load history"
instead of its "No commits yet" tile.
- Desktop: a failed clone showed git's last line — often a fragment like
"and the repository exists." — instead of the reason.
- Desktop: on Windows, repositories were grouped outside the folders they
sit in (backslashes from the folder picker against "/" comparisons).
- Crash reports: a path with a space scrubbed differently the second time,
so the same crash could fingerprint twice.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… outran The updater flow waited 20 event-loop turns for electron-updater to load, and the rebase panel read its banner right after a keypress. Both now wait for what they assert, capped by wall time. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ease/ext-1.17-app-2.4-ms-1.2
…not only dots Closes the two open code-scanning alerts (js/incomplete-sanitization). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…duct name User-visible text, prompts, identifiers, file names, comments and past release notes. No setting key, command id or context key ever carried it, so nothing changes for anyone's configuration. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…w and the Dock icon Settings ▸ Appearance ▸ Dark style. Graphite (the default) is today's dark palette, and the running app no longer swaps the Dock icon: it keeps the one macOS shows while GitStudio is closed, so opening and quitting no longer changes it. Neon is a near-black ground with more violet, and the neon Dock icon while GitStudio runs. The launch screen paints the chosen style from its first frame. The macOS 11–15 icns is now the Graphite tile, matching the macOS 26 icon. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…t only dots Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ease/ext-1.17-app-2.4-ms-1.2
Windows joins the renderer folder with a backslash, so the basename the test compared kept a '\r\' prefix. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…2.4-ms-1.2 # Conflicts: # apps/extension/test/commitView.commit.cov.test.ts # apps/extension/test/commitViewCovKit.ts
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #62, which is stacked on #59. It lands after both, and is tagged only on the owner's go.
docs/releases/ext-v1.17.0.mdandapp-v2.4.0.md.gitstudio.avatars.gravatarin the settings table;Tests: merge-studio export 54/54, Merge Studio 62/62, the extension's README/CHANGELOG tests 163/163.
🤖 Generated with Claude Code