8c1948d226
Move the following completed changes from openspec/changes/ to openspec/changes/archive/2026-06-12-completed-changes-archive/: - multi-session-terminal-ux - reorganize-long-files - working-copies - workspace-first-ui Update parent and archive .pi-map*.md indexes to reflect the move and remove the transient active-changes-archive grouping. openspec/changes/ now contains only the archive/ directory.
5.0 KiB
5.0 KiB
Tasks: Workspace-First UI Refresh
Status
| Field | Value |
|---|---|
| Phase | Tasks |
| Based on | Design |
| Next | Apply |
PR Breakdown
PR-1: Backend — Workspace File, Git & Instance Endpoints
Scope: All new backend endpoints for workspace-scoped operations Est. lines: ~900 backend, ~400 tests Files touched: 10 new, 3 modified
Tasks:
- Create
FileService(apps/api/src/services/file_service.py) - Create
GitOperationsservice (apps/api/src/services/git_operations.py) - Create
workspace_filesAPI router (apps/api/src/api/workspace_files.py) - Create
workspace_gitAPI router (apps/api/src/api/workspace_git.py) - Create
workspace_instancesAPI router (apps/api/src/api/workspace_instances.py) - Register new routers in
main.py - Update
workspaces.pyPOST to acceptrepo_iddirectly - Enrich
projects.pylist response with repos + workspaces - Write unit tests for FileService
- Write unit tests for GitOperations
- Write integration tests for workspace file endpoints
- Write integration tests for workspace git endpoints
- Write integration tests for workspace instance endpoints
PR-2: Frontend — Workspace Detail Page
Scope: Workspace detail page with 4 tabs, replaces old repo-workspace Est. lines: ~1,400 frontend, ~300 tests Files touched: 14 new, 3 modified
Tasks:
- Create
useWorkspaceFileshook - Create
useWorkspaceGithook - Create
useWorkspaceInstanceshook - Create workspace API clients (
workspace-files.ts,workspace-git.ts,workspace-instances.ts) - Create
WorkspaceHeadercomponent (inline in WorkspaceDetailPage) - Create
WorkspaceTabscomponent (inline in WorkspaceDetailPage) - Create
WorkspaceFilePanelcomponent (inline in WorkspaceDetailPage) - Create
GitToolbarcomponent (inline in Files tab) - Create
WorkspaceGitPanelcomponent (inline in WorkspaceDetailPage) - Create
WorkspaceToolsPanelcomponent (inline in WorkspaceDetailPage) - Create
WorkspaceSettingsPanelcomponent (inline in WorkspaceDetailPage) - Create
WorkspaceDetailPagepage - Add
/workspaces/:idroute - Delete
repo-workspace.tsxand related components - Write component tests for WorkspaceDetailPage
PR-3: Frontend — Projects Page Refresh & Routing
Scope: Projects page with inline repos + workspaces, mobile layout Est. lines: ~800 frontend, ~200 tests Files touched: 5 new, 5 modified
Tasks:
- Update
projects.tsAPI client for enriched response - Create
useProjectshook with enriched response - Create
ProjectCardcomponent - Inline repo section in ProjectCard
- Inline workspace chips in ProjectCard
- Inline new workspace form in ProjectCard
- Rewrite
ProjectsPage - Inline project detail on ProjectsPage (mobile + desktop)
- Update
AppShellnav order (Workspaces → Projects) - Update
WorkspacesPage/ WorkspaceCard to link to detail - Add mobile tab bar to workspace detail
- Remove old repo-workspace route and components
- Write component tests for ProjectCard
- Write component tests for RepoSection
- Write tests for NewWorkspaceInline
Acceptance Criteria (All PRs)
- Old
repo-workspace.tsxis deleted /projects/:idshows project detail with repos + workspaces (inline on ProjectsPage)/workspaces/:idshows workspace detail with 4 tabs- File browser reads from workspace clone path
- File viewer/editor works on workspace files
- Git toolbar on Files tab supports commit/push/pull/fetch
- Git tab shows commit history
- Tools tab lists instances + spawn modal (or empty prompt)
- Settings tab shows workspace info + rename/sync/delete
- Projects page shows inline repos + workspace cards
- Inline "New Workspace" form on project page
- Mobile: 4-tab bottom navigation
- All existing tests pass or updated
- ruff clean (ruff not available in current environment; py_compile passed)
- TypeScript compilation clean
- eslint clean
Implementation Order
PR-1 (Backend endpoints)
→ PR-2 (Workspace detail page)
→ PR-3 (Projects refresh + routing)
Each PR depends on the previous. No parallel work.
Verification Steps per PR
PR-1
cd apps/api
pytest tests/unit/test_file_service.py tests/unit/test_git_operations.py -v
pytest tests/integration/test_workspace_files.py tests/integration/test_workspace_git.py tests/integration/test_workspace_instances.py -v
python -m ruff check src/services/file_service.py src/services/git_operations.py src/api/workspace_*.py
PR-2
cd apps/web
npx tsc --noEmit
npx eslint src/pages/workspace-detail.tsx src/components/workspace/
npm run test -- --run workspace-detail
PR-3
cd apps/web
npx tsc --noEmit
npx eslint src/pages/projects.tsx src/components/project/
npm run test -- --run projects