77 lines
3.2 KiB
Markdown
77 lines
3.2 KiB
Markdown
---
|
|
id: "06-shared-source-picker"
|
|
title: "Shared source picker"
|
|
status: done
|
|
wave: 3
|
|
depends_on: ["02-attachment-service"]
|
|
plan: "plan.md"
|
|
spec: "../../specs/tasks/system-design/attach-workspace-sources.md"
|
|
---
|
|
|
|
# Task 06: Shared Source Picker
|
|
|
|
## Acceptance
|
|
|
|
- Reusable workspace-repository, remote-repository, branch, and folder selection leaves live under
|
|
`components/workspace-source-picker/` with task-create behavior unchanged.
|
|
- Mixed source form state supports independent stable rows, validation, retry, and exact HTTP payload
|
|
construction for repository, remote repository, and folder kinds.
|
|
- Executor capability hides the folder row kind for Docker, SSH, Sprites, and remote Docker while
|
|
leaving local and remote repository choices available.
|
|
- Frontend API/types/store contracts model workspace folders and attachment responses, and the old
|
|
Worktree-only multi-repository guard is removed only after runtime capability is present.
|
|
|
|
## Verification
|
|
|
|
```bash
|
|
cd apps/web
|
|
rtk pnpm test -- components/workspace-source-picker components/task-create-dialog lib/api/domains/kanban-api
|
|
rtk pnpm run typecheck
|
|
```
|
|
|
|
## Files likely touched
|
|
|
|
- `apps/web/components/workspace-source-picker/**` (new)
|
|
- `apps/web/components/task-create-dialog-workspace-repo-chips.tsx`
|
|
- `apps/web/components/task-create-dialog-remote-repo-chip.tsx`
|
|
- `apps/web/components/task-create-dialog-remote-repo-chips.tsx`
|
|
- `apps/web/components/folder-picker.tsx`
|
|
- `apps/web/components/task-create-dialog-computed.ts`
|
|
- `apps/web/components/task-create-dialog-multi-repo-guard.ts`
|
|
- `apps/web/lib/api/domains/kanban-api.ts`
|
|
- `apps/web/lib/types/http.ts`
|
|
- `apps/web/lib/state/slices/kanban/types.ts`
|
|
|
|
## Dependencies
|
|
|
|
Task 02 for the final request contract. This task may begin extraction in parallel with Tasks 03/04
|
|
but must not delete the executor guard until Task 05 is integrated.
|
|
|
|
## Inputs
|
|
|
|
- Existing task-create picker files named above.
|
|
- Spec: mixed batch inputs and executor parity.
|
|
|
|
## Output contract
|
|
|
|
Summary, files changed, tests run, blockers, risks, divergence, and task/plan status updates.
|
|
|
|
## Completion notes
|
|
|
|
- Added the shared typed source-row state, validation, deterministic request
|
|
builder, and executor capability helper under
|
|
`apps/web/components/workspace-source-picker/`.
|
|
- Re-exported the existing task-create repository, remote repository, branch,
|
|
and folder picker leaves from the shared namespace without changing their
|
|
behavior. Task 07 owns the Add sources desktop/dialog/drawer compositions.
|
|
- Mobile parity handoff: Task 07 must consume this same state/capability layer
|
|
in a phone-native, viewport-contained `MobilePickerSheet` or Drawer with a
|
|
single internal scroll owner and 44px touch controls; this task introduces
|
|
no rendered outer surface, so no mobile E2E is appropriate yet.
|
|
- Kept the existing Worktree-only multi-repository guard in
|
|
`task-create-dialog-computed.ts` and `task-create-dialog-multi-repo-guard.ts`.
|
|
**Deferred handoff to Task 05:** remove or relax that create-task guard only
|
|
after Task 05 wires the remote runtime multi-repository capability and its
|
|
executor profile contract; this attachment-picker capability does not make
|
|
create-task provisioning safe by itself.
|