Files
headquarter/openspec/changes/repo-restructure/apply-3.5-report.md
T
Developer ae420708f2 refactor: split tool-workshop page into tab components (Task 4.1)
- Extract ToolTypesTab, ToolConfigsTab, ConfigFoldersTab from inline page
- Each tab is self-contained with own state, API calls, and forms
- Slim page to 77 lines (tab switcher + composition only)
- Add barrel export for tool-workshop feature components
- Add tsconfig path alias for @/* imports

Quality gates: tsc (pass), eslint (pass)
Refs: repo-restructure Task 4.1
2026-06-02 21:49:20 +00:00

63 lines
3.3 KiB
Markdown

# Task 3.5 Apply Report: Slim git_repositories and config_profiles Routers
**Status:** Success
## Files Created (4)
- `apps/api/src/services/git/__init__.py` — Package marker
- `apps/api/src/services/git/repository.py` — Repository lifecycle (create, delete, list, path helpers, clone/init)
- `apps/api/src/services/git/control.py` — Git control operations with repo validation (branch, commit, fetch, pull, push, merge, status)
- `apps/api/src/services/git/files.py` — Git file operations with repo validation (list files, get file, update file, list branches)
## Files Modified (2)
- `apps/api/src/services/config_profiles.py` — Expanded with:
- `check_duplicate_name()` — name uniqueness validation
- `profile_to_dict()` — serialization helper
- `check_duplicate_include()` — include uniqueness validation
- `include_to_dict()` — serialization helper
- `check_duplicate_mount_path()` — mount path uniqueness validation
- `mount_to_dict()` — serialization helper
- `get_or_create_user_config()` — user config retrieval/creation
- `validate_default_profiles()` — validate profile ownership for defaults
- `get_default_profiles()` / `set_default_profiles()` / `get_default_profile_for_tool_type()` — default profile management
- `list_includes_for_profile()` / `list_mounts_for_profile()` — list helpers
- `apps/api/src/api/git_repositories.py` — Slimmed from ~1,050 to **276 lines**
- Removed all subprocess calls (clone, init, preflight)
- Removed all inline git utility calls with error handling
- Removed verbose docstrings from endpoints
- Router now contains only: imports, endpoint definitions, thin handlers delegating to services
- `apps/api/src/api/config_profiles.py` — Slimmed from ~765 to **299 lines**
- Removed inline cycle detection logic (moved to service)
- Removed inline duplicate validation (moved to service)
- Removed inline response serialization (moved to service)
- Removed default profile management logic (moved to service)
- Removed include/mount list building logic (moved to service)
- Router now contains only: imports, endpoint definitions, thin handlers
## Quality Gate Results
| Gate | Result |
|------|--------|
| `python3 -m py_compile api/git_repositories.py` | ✅ PASS |
| `python3 -m py_compile api/config_profiles.py` | ✅ PASS |
| `python3 -m py_compile services/git/repository.py` | ✅ PASS |
| `python3 -m py_compile services/git/control.py` | ✅ PASS |
| `python3 -m py_compile services/git/files.py` | ✅ PASS |
| `python3 -m py_compile services/config_profiles.py` | ✅ PASS |
| `wc -l api/git_repositories.py` | ✅ 276 lines (≤300) |
| `wc -l api/config_profiles.py` | ✅ 299 lines (≤300) |
| `grep -n "subprocess" api/git_repositories.py` | ✅ 0 results |
| `grep -n "subprocess" api/config_profiles.py` | ✅ 0 results |
## Blockers/Deviations
- None. Both routers successfully slimmed to under 300 lines.
## Notes
- The history endpoints (get_repository_history, get_repository_commit) still do inline repo validation + git history calls because `services/git/history.py` doesn't exist yet and the existing utility functions in `utils/git_history.py` are already thin wrappers.
- `ProjectOverrideWithId` remains in `api/config_folders.py` as noted in Task 3.2 (Pydantic type invariance issue).