# Tasks: ~ / $HOME Expansion in Mount Paths ## T1: Backend — Core helpers and pipeline ### T1.1: Add `expand_container_path` helper **File**: `apps/api/src/services/config_profile_resolver.py` - Add `expand_container_path(path: str, home_dir: str) -> str` - Handle `~/`, `~`, `$HOME/`, `$HOME` patterns - Must not expand if path doesn't start with these patterns ### T1.2: Add `get_manifest_home_dir` helper **File**: `apps/api/src/services/manifest_compiler.py` - Add `get_manifest_home_dir(manifest: dict) -> str` - Returns `/home/{user.name}` if user block exists, else `/root` ### T1.3: Set `HOME` and `USER` env vars in Dockerfile **File**: `apps/api/src/services/manifest_compiler.py` - In `compile_dockerfile()`, after user creation block, add `ENV HOME=...` and `ENV USER=...` - Update existing manifest compiler tests ### T1.4: Update `apply_resolved_profile` to expand paths **File**: `apps/api/src/services/config_profile_resolver.py` - Add `home_dir: str = "/root"` parameter - Expand mount targets before creating mount directories and volume entries ### T1.5: Update git mount resolution to expand paths **File**: `apps/api/src/api/tool_instances.py` - Add `home_dir: str = "/root"` parameter to `_resolve_git_mount_mappings()` - Expand mapping target paths before resolving - Add `home_dir` parameter to `_resolve_git_mounts()` and `_resolve_single_git_mount()` ### T1.6: Determine home_dir in instance lifecycle **File**: `apps/api/src/api/tool_instances.py` - In `create_instance`: determine `home_dir` from tool type + manifest (if manifest), pass to `_modify_compose_file` - In `start_instance`: determine `home_dir` from tool type + resolved manifest, pass to `apply_resolved_profile` and `_resolve_git_mounts` - In `_prepare_manifest_instance`: return `home_dir` alongside image_tag and compose_content ### T1.7: Update `_modify_compose_file` to expand paths **File**: `apps/api/src/api/tool_instances.py` - Add `home_dir: str = "/root"` parameter - Expand `working_directory` and any mount targets in extra_volumes ### T1.8: Unit tests **File**: `apps/api/tests/unit/test_home_path_expansion.py` (new) - Test `expand_container_path` with `~`, `~/foo`, `$HOME`, `$HOME/foo`, `/abs/path`, `rel/path` - Test `get_manifest_home_dir` with user, without user **File**: `apps/api/tests/unit/test_manifest_compiler.py` - Test Dockerfile contains `ENV HOME=...` for user-based manifests - Test Dockerfile contains `ENV HOME=/root` for root manifests --- ## T2: Verification ### T2.1: Run all affected tests ```bash cd apps/api && pytest tests/unit/test_home_path_expansion.py tests/unit/test_manifest_compiler.py tests/unit/test_config_profile_resolver.py tests/unit/test_git_mounts.py -xvs ``` ### T2.2: Frontend typecheck ```bash cd apps/web && npm run typecheck ``` --- ## Estimation | Task | Effort | Files | |------|--------|-------| | T1.1-T1.7 | 2h | 3 | | T1.8 | 1h | 2 | | T2.1-T2.2 | 0.5h | — | | **Total** | **3.5h** | **5** |