Files
Developer caadd59441 chore: archive 15 completed OpenSpec changes
Move the following audited-and-implemented changes into
openspec/changes/archive/2026-06-12-completed-changes-archive/:

- backend-frontend-refactoring
- config-profile-git-mounts
- config-profile-includes-ui
- config-profile-multi-repo-mounts
- container-monitoring-notifications
- git-mount-url-validation
- home-path-expansion
- mobile-terminal-ux
- mount-specificity-ordering
- notification-center
- persistent-terminal-sessions
- session-list-overhaul
- ssh-key-mounting
- terminal-fullscreen-unified-header
- tool-session-progress-and-updates

Also regenerated .pi-map*.md files for openspec/changes so the
remaining active changes (multi-session-terminal-ux, reorganize-long-files,
working-copies, workspace-first-ui) reflect the new layout.
2026-06-12 14:26:55 +00:00

3.9 KiB

Scope

This change is a pure structural refactoring of the backend and frontend codebase. No API contracts, database schemas, or user-facing behaviors change.

In Scope

  1. Schema extraction (apps/api/src/schemas/)

    • Extract Pydantic models from API routers into dedicated schema modules
    • Schemas to extract: tool_type, tool_instance, config_profile, user, user_config, project, ssh_key, git_repository, health
    • Each API router imports schemas from src.schemas.* instead of defining inline
  2. Docker service package (apps/api/src/services/docker/)

    • Split services/docker.py monolith into focused modules:
      • docker/compose.py — compose file generation, modification, validation
      • docker/container.py — container lifecycle (status, IP, network, logs)
      • docker/config_staging.py — config file staging for instances
      • docker/tunnel.py — tunnel URL extraction (moved from services/tunnel.py)
      • docker/__init__.py — re-exports for backward compatibility
    • Update all imports across the backend
  3. Instance lifecycle extraction (apps/api/src/services/instance_lifecycle.py)

    • Extract instance creation, start, stop, restart, and deletion logic from api/tool_instances.py
    • The API router becomes thin: validates auth, calls service, returns response
    • Service functions are async and receive AsyncSession, models, and raw parameters
  4. Config profile service extraction (apps/api/src/services/config_profiles.py)

    • Extract business logic from api/config_profiles.py: CRUD helpers, validation, default profile management
    • API router delegates to service functions
  5. Auth dependency refactor (apps/api/src/auth/dependencies.py)

    • Add get_current_user dependency that returns a User model directly
    • Update API routers to use user: User = Depends(get_current_user) where the full user object is needed
    • Keep get_current_user_id for endpoints that only need the ID
  6. Frontend reorganization

    • Move components into features/ directories by domain:
      • features/git/ — CommitDialog, FileBrowser, FileEditor, GitToolbar, MergeDialog, WorkspaceSidebar
      • features/dashboard/ — ActiveSessionsList, DashboardSummary, ProjectsSection, QuickCreateForm, RecentSessionsSection
      • features/project/ — RepositoriesSettingsTab
      • features/tool-workshop/ — ToolTypesTab (already exists)
    • Rename API files from snake_case to kebab-case:
      • tool_types.tstool-types.ts
      • ssh_keys.tsssh-keys.ts
      • git_repositories.tsgit-repositories.ts
    • Rename page files to *Page.tsx:
      • dashboard.tsxDashboardPage.tsx
      • projects.tsxProjectsPage.tsx
      • etc.

Out of Scope

  • Any new features or behavioral changes
  • Database schema changes (no migrations)
  • API contract changes (same endpoints, same request/response shapes)
  • Frontend UI behavior changes (same components, same interactions)
  • Removing or modifying the ConfigProfileInclude model (already exists as a relation)
  • Extracting ConfigMount into a separate model (current dev uses JSON arrays; this is a schema decision, not a refactor)
  • Changes to tool_definition_manifest or workspace models

Acceptance Criteria

  1. All existing tests pass without modification (behavior unchanged)
  2. All existing API endpoints return identical responses for identical requests
  3. All frontend pages render identically
  4. docker compose up starts successfully
  5. Backend ruff check passes
  6. Frontend npm run typecheck passes
  7. Frontend npm run build passes
  8. File sizes are reduced: no API router > 500 lines, no service > 400 lines

Preconditions

  • Current dev branch is stable and all behavioral forward-ports are complete
  • All legacy ToolConfig/ConfigFolder code has been removed
  • Database migrations are at a single head