Files
headquarter/openspec/changes/git-repo-ssh-clone-check/design.md
T
miguel 2525c58471 feat(web): support ssh owner repo clone flow
- Add SSH-only owner/repo clone path for git.commumedia.org
- Preflight remote repository existence with git ls-remote before cloning
- Keep advanced URL paste fallback and blank repository creation
- Add focused backend and frontend coverage plus docs updates

Quality gates: python -m py_compile, vitest run src/components/repositories-settings-tab.test.tsx, npm run typecheck
2026-05-22 19:07:04 +02:00

2.1 KiB

Context

The current repository creation flow already supports cloning remote repositories via remote_url and can normalize pasted browser URLs. However, the UI asks for a full URL, which is awkward for the fixed provider git.commumedia.org. The requested behavior is to enter owner and repo, check whether the repository exists, and clone only if it does.

Goals / Non-Goals

Goals:

  • Accept SSH-only owner and repo inputs for cloning from git.commumedia.org
  • Verify repository existence before clone
  • Preserve full URL paste as a fallback path
  • Preserve blank repository creation
  • Reuse the existing repository create endpoint and shared dialog

Non-Goals:

  • Supporting multiple git providers
  • Adding a remote repository discovery API
  • Supporting HTTPS clone flow for the new structured path
  • Changing repository storage or clone behavior beyond preflight validation

Decisions

1. Provider assumption

  • Hardcode git.commumedia.org for the structured clone path
  • Build SSH URLs as git@git.commumedia.org:{owner}/{repo}.git

2. Existence check

  • Use git ls-remote on the constructed SSH URL before cloning
  • If the command fails, surface a repository-not-found/inaccessible error and do not clone

3. UI structure

  • Keep the shared repository creation dialog as the single entry point
  • In clone mode, collect owner and repo instead of asking for a full URL
  • Keep an advanced paste-URL fallback for existing behavior and browser URL parsing
  • Keep blank repository creation available in the same dialog

4. Backend behavior

  • Reuse POST /projects/{project_id}/repositories
  • Add preflight logic before the existing git clone --mirror
  • Leave the database schema unchanged

Risks / Trade-offs

[Risk] SSH auth may still fail even if the repo exists → Mitigation: preflight error should be explicit and user-facing. [Risk] Command availability → Mitigation: reuse the same git dependency already required for cloning. [Risk] UI complexity → Mitigation: keep the dialog shared and minimal, with fallback URL paste.