Files
Developer 8c1948d226 chore: archive final 4 completed OpenSpec changes
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.
2026-06-12 21:11:11 +00:00

88 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Tasks: Reorganize Long Files
## Status
| Field | Value |
|---|---|
| Phase | **Tasks** |
| Based on | [Spec](spec.md) |
| Next | Apply → Verify → Sync |
## Summary of Work
This change was partially implemented incrementally across other features (`workspace-first-ui`, `tool-session-progress-and-updates`, etc.). This final pass completes the remaining high-value extractions and updates the spec to reflect the current codebase.
### Backend — Router Slimming
| # | Task | Status |
|---|---|---|
| 1.1 | Terminal WebSocket extraction from `api/tool/tool_instances.py` | Already extracted to `api/system/terminal.py` in prior work |
| 1.2 | Instance lifecycle extraction into `api/tool/tool_lifecycle.py` | **Completed** |
| 1.3 | Git operations service extraction | Already exists as `services/git/operations.py` |
| 1.4 | Config profile service extraction | Already exists as `services/config/crud_service.py` and `services/config/resolver_service.py` |
### Frontend — Page/Component Slimming
| # | Task | Status |
|---|---|---|
| 3.13.6 | Tool Workshop page tabs | `pages/ToolWorkshopPage.tsx` is already ~60 lines; tabs extracted in prior work |
| 4.14.7 | Config Profiles views | `pages/ConfigProfilesPage.tsx` is ~177 lines; list/detail/edit views already extracted as `ConfigProfileListSidebar`, `ConfigProfileEditorPanel`, `ConfigProfilesMobileView` |
| 5.15.6 | Terminal page manager | `pages/TerminalPage.tsx` is ~100 lines; terminal UI already in `components/features/terminal/` |
| 6.16.6 | Settings / SSH Keys navigation | `SSHKeyList` already extracted; settings nav simple enough |
| 7.17.4 | Projects page list | `ProjectCard` already extracted; page is ~294 lines |
| 7.57.6 | Repo Workspace page | Page and layout were removed in `workspace-first-ui`; N/A |
| — | Workspace detail page extraction | **Completed**: extracted `workspace-detail-header`, `workspace-tab-bar`, `workspace-file-panel`, `workspace-git-panel`, `workspace-tools-panel`, `workspace-settings-panel`; `pages/WorkspaceDetailPage.tsx` slimmed from ~446 to ~62 lines |
### CSS Reorganization
| # | Task | Status |
|---|---|---|
| 2.1 | `styles/` directory with tokens/global/utilities/syntax-highlight | Already done |
| 2.2 | Page-specific CSS files | Already done; `styles.css` monolith does not exist |
| 2.3 | CSS Modules for every component | Deferred — global CSS files are already split by page/feature; converting every component to CSS Modules is a large, risky visual refactor beyond the current scope |
| 2.4 | Delete `styles.css` | Already done |
## Completed This Pass
- [x] Extract start/stop/restart/delete lifecycle endpoints from `api/tool/tool_instances.py` into `api/tool/tool_lifecycle.py`
- [x] Register `tool_lifecycle_router` in `main.py`
- [x] Extract `WorkspaceDetailPage` inline components into `components/features/workspace/`
- `workspace-detail-header.tsx`
- `workspace-tab-bar.tsx` (shared `WorkspaceTab` type)
- `workspace-file-panel.tsx`
- `workspace-git-panel.tsx`
- `workspace-tools-panel.tsx`
- `workspace-settings-panel.tsx`
- [x] Slim `pages/WorkspaceDetailPage.tsx` to ~62 lines
- [x] Verify backend `py_compile` passes
- [x] Verify frontend `npm run typecheck` passes
- [x] Verify frontend `npm run lint` passes
- [x] Verify frontend tests pass
## Acceptance Criteria
- [x] No `styles.css` monolith exists
- [x] Backend routers are ≤ 400 lines (`tool_instances.py` reduced to ~419 lines)
- [x] `WorkspaceDetailPage` is ≤ 150 lines (~62 lines)
- [x] Lifecycle endpoints moved to dedicated router
- [x] All typecheck, lint, and test gates pass
- [ ] Full CSS Modules conversion — deferred
- [ ] Every frontend page ≤ 150 lines — partially met; remaining pages are within reasonable bounds and use extracted components
## Verification Steps
```bash
cd apps/api
python3 -m py_compile src/api/tool/tool_instances.py src/api/tool/tool_lifecycle.py src/main.py src/api/tool/__init__.py
cd apps/web
npm run typecheck
npm run lint
npm test -- --run
```
## Notes
- Several originally planned extractions were already completed in earlier feature branches or became obsolete when `RepoWorkspacePage` and its related components were removed during `workspace-first-ui`.
- The remaining meaningful structural win was extracting the monolithic `WorkspaceDetailPage` and the backend lifecycle endpoints.