--- kind: epic slug: connected-repos title: Connected repos — paste remote URL, forge adapters plan_slug: automation-foundation status: done priority: P1 tenant_id: global cursor_epic_id: null updated_at: "2026-07-03" --- # Epic objective Workspace admins connect git remotes (Forgejo, GitHub, GitLab, Bitbucket, future Origin) via **paste URL** UX. Store `repo_links` with `forge_type`, API base, and credentials reference. Provide a `ForgeAdapter` interface for clone metadata, open PR, and (later) webhooks. See automation foundation discussion: Vercel/Coolify-style “show me your repo.” ## In scope / out of scope **In scope** - `connected_repos` (or `repo_links`) Drizzle table, workspace-scoped. - tRPC CRUD + “test clone” (shallow fetch). - Settings UI: connect / disconnect / list. - Forge adapter trait + implementations: `forgejo`, `github` (minimum two). **Out of scope** - Webhook receivers (Epic 8). - Orchestrator clone logic (Epic 6 consumes this table). ## Dependencies - Workspace admin auth patterns (existing). ## Blocks - Epic 6 (orchestrator), Epic 7 (worker). ## Acceptance criteria - [x] Admin pastes Forgejo URL; Echodo stores link and detects `forge_type`. - [x] Worker/orchestrator can read `git_remote_url` + default branch from API. ## Tasks - [x] [Task-shared-forge-schemas](./Task-shared-forge-schemas.md) - [x] [Task-db-connected-repos-migration](./Task-db-connected-repos-migration.md) - [x] [Task-forge-adapters-trpc](./Task-forge-adapters-trpc.md) - [x] [Task-settings-connected-repos-ui](./Task-settings-connected-repos-ui.md)