Fix the bugs the new tests found: push, rebase, merge editor, Windows paths, and more - #66
Merged
Merged
Conversation
- 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>
antonarnaudov
force-pushed
the
fix/bugs-from-coverage
branch
from
September 29, 2026 16:33
0415dc7 to
b474f86
Compare
…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>
antonarnaudov
force-pushed
the
fix/bugs-from-coverage
branch
from
September 29, 2026 21:00
b153245 to
aeecb42
Compare
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>
antonarnaudov
force-pushed
the
fix/bugs-from-coverage
branch
from
September 29, 2026 21:01
aeecb42 to
044927e
Compare
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
AutumnPizazz
added a commit
to AutumnPizazz/gitstudio
that referenced
this pull request
Sep 30, 2026
Upstream's 68c1c70 — "Fix the bugs the new tests found: push, rebase, merge editor, Windows paths, and more (GitStudioHQ#66)" — merged over the Simplified Chinese commit. Three files conflicted; each was resolved by taking upstream's logic and keeping the l10n wrapper: · apps/extension/src/history/historyContext.ts — both import lines kept. · apps/extension/src/statusBar/syncStatus.ts — upstream's config-based upstream lookup, falling back to l10n.t("its upstream"). · packages/git-service/src/RebaseRunner.ts — upstream's `live` guards on the paused-on-conflict branches, their messages still translated. The message bundle is unchanged (2991 messages, none added or removed) and no new untranslated prose came in, so there is nothing further to localise. One new test, apps/extension/test/stashesView.cov.test.ts, fails: with a stale .git/index.lock in place git 2.43 exits 1 having printed nothing at all, so the toast reads "GitStudio: Stash failed." with no reason to show. Upstream's own code builds that message the same way, so the test is red on 68c1c70 itself and not on this merge.
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 #65. Every bug here has a test that fails on the old code and passes now; the tests were written first, by the coverage push.
Git layer (both apps):
@{u}never resolves, still pushes.#-lines were deleted after the rebase paused. The comment character stayed in.gitwhile the queue moved intorebase-merge/.Merge editor's file writer (engine, so Merge Studio too):
Apps:
/.Left for a decision:
git checkout --orphan, the desktop graph still errors. The fix is in the shared LogProvider and needs the extension's "Uncommitted changes" row looked at.🤖 Generated with Claude Code