3.8 KiB
3.8 KiB
| kind | slug | title | plan_slug | status | priority | tenant_id | cursor_epic_id | updated_at |
|---|---|---|---|---|---|---|---|---|
| epic | repo-discovery-onboarding | Repository discovery, context import, and agent onboarding | automation-foundation | ready | P1 | global | null | 2026-09-25 |
Epic objective
Replace one-repository-at-a-time URL entry with a secure account/instance flow: discover repositories visible to the current operator, explicitly select repositories for the current workspace, import bounded repository context, and show accurate agent setup instructions.
Product decisions
- Repositories are attached to the current workspace; discovery does not implicitly create workspaces.
- GitHub uses the current user's linked Auth.js account. Access tokens remain server-side and users explicitly re-authorize when additional scope is required.
- Forgejo/Gitea v1 uses an instance URL and a server-side token environment-variable reference. Plaintext PATs are not persisted in the application database.
- Batch connection and context ingestion are separate operations. Connecting repos is fast and atomic; remote content import is retryable and reports per-repo progress.
- V1 context import is bounded to root
README.md,AGENTS.md,CONTRIBUTING.md, and.convoys/*.md. Recursivedocs/**andplans/**import is deferred until source identity and conflict semantics are specified. - Agent setup instructions must match a transport the MCP server actually supports and must never expose
DATABASE_URL, forge tokens, or provider API keys.
In scope
- Paginated GitHub and Forgejo/Gitea repository discovery with normalized, zod-validated results.
- Searchable multi-select picker and admin-only, idempotent batch connection.
- Idempotent import of supported docs as
documentobjects and existing convoy manifests with source provenance. - OpenCode and Cursor onboarding guidance for the deployed MCP transport.
- Optional bootstrap PR only when branch/file commit support exists; otherwise a separate follow-up task is created.
Out of scope
- Automatic workspace creation for each repository.
- Unbounded recursive import or two-way synchronization of remote documentation.
- Browser-visible forge credentials or direct database credentials in generated snippets.
- Full git worktree management, which remains in
apps/worker.
Dependencies
- Epic
connected-reposfor the base schema, CRUD router, and forge adapters. - Auth.js account linking in
apps/web/lib/auth.ts. - Convoy lifecycle schemas and local reconciliation behavior.
- A configured workspace model route, Redis, and worker are runtime dependencies for executing the implementation convoy, not for using the finished repo picker.
Acceptance criteria
- A GitHub-linked user or configured Forgejo/Gitea admin sees all accessible repositories through explicit pagination without receiving a token in the browser.
- An admin selects multiple repos and connects them to the current workspace in an idempotent operation; manual URL connection still works.
- Supported documentation imports as
documentobjects with repo/path/revision provenance and no duplicates on retry. - Valid
.convoys/*.mdmanifests reconcile into workspace-scoped convoy objects; malformed files are reported without aborting other imports. - OpenCode and Cursor setup instructions are syntactically accurate for the supported transport and contain no secrets.
- Tenant isolation, credential redaction, pagination, idempotency, and partial-failure behavior have automated coverage.
Tasks
Execution convoy
.convoys/repo-discovery-onboarding.md