refactor: extract VersionControlProvider abstraction#548
Open
pfitz wants to merge 23 commits into
Open
Conversation
added 23 commits
May 5, 2026 08:01
|
Someone is attempting to deploy a commit to the Matt Pocock's projects Team on Vercel. A member of the Team first needs to authorize it. |
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.
Summary
Pure refactor that extracts a
VersionControlProviderinterface from sandcastle's git-shaped code. Zero behavior change for existing callers.The change adds an optional
vcsoption torun(),interactive(),createSandbox(), andcreateWorktree(), defaulting to agit()implementation that mirrors current behavior. The interface is the seam through which alternative VCS backends (such as Jujutsu, in a follow-up PR) can be implemented.Motivation
I personally use Jujutsu (jj) for development and would like to use jj workspaces instead of git worktrees with sandcastle. This PR is the foundation refactor; a follow-up PR will add a `JjProvider` for jj-colocated repos. I figured a proper pluggable abstraction would benefit other users of alternative VCS tools too.
What's in this PR
What's NOT in this PR (deferred to PR 2)
A design plan with the full feasibility analysis is committed at `docs/superpowers/plans/2026-05-05-vcs-abstraction-pr1-refactor.md`. Happy to drop it from the diff if you'd prefer a smaller PR — let me know.
Notes on the diff size
Test plan
Security note
Several command-builder methods in `git.ts` produce shell command strings that get executed via `handle.exec(...)` inside sandboxes. All user-influenced values are escaped with a POSIX single-quote helper (`shellSingleQuote`) to prevent shell injection. The helper is exported for reuse by future backends.