Files
Atomizer/war-room-migration-plan-v2.md
2026-02-24 08:00:09 +00:00

132 lines
6.0 KiB
Markdown

# War-Room Migration Plan v2 — Projects-First Architecture
Date: 2026-02-23
Adapted by: Manager
Reviewer: Auditor (Codex 5.3)
Original: `war-room-migration-plan.md` (2026-02-20)
## Key Change from v1
**Top-level `studies/` folder is eliminated.** All work lives under `projects/`, where each project is self-contained per the Atomizer Project Standard. Studies are nested inside their parent project.
### New repo structure
```
Atomizer/
├── projects/ # Canonical project home (Project Standard)
│ ├── hydrotech-beam/ # ✅ already exists
│ ├── isogrid-dev-plate/ # ✅ already exists
│ └── <future projects>/ # Created per Project Standard when needed
├── studies/ # ⚠️ LEGACY — kept as-is, not actively used
│ ├── M1_Mirror/ # Migrated into projects/ one-at-a-time
│ ├── UAV_Arm/ # when the project becomes active
│ ├── ... # (restructured to new standard at that time)
├── optimization_engine/
├── templates/
├── ...
```
### Migration strategy: INCREMENTAL
- **No bulk migration.** Legacy `studies/` stays untouched.
- `projects/` is the new canonical root for all code paths.
- When a legacy study becomes active, it gets migrated into a proper project under `projects/` and restructured to the Project Standard at that time.
- New projects are always created under `projects/`.
---
## Phase 0 — Stop The Bleeding (P0, 1-2 days)
*Unchanged from v1.* Fix broken imports, plugin paths, smoke tests. No folder moves yet.
## Phase 1 — Entrypoint Contract Unification (P0, 2-4 days)
*Unchanged from v1.* Canonical runner API (`optimization_engine/app/runner_service.py`).
**Addition:** The canonical runner must resolve study paths via a **project-aware resolver** (see Phase 2).
## Phase 2 — Projects-First Code Migration (P0, 2-3 days) ⬅️ NEW
*Replaces v1 "Study Script Decoupling"*
### 2A — No folder moves
Legacy `studies/` stays as-is. No bulk migration. Projects get migrated individually when they become active.
### 2B — Update code paths to use `projects/` as primary
Files referencing `studies/` that need updating:
| File | Reference type | Action |
|---|---|---|
| `atomizer.py` (lines 135, 193, 301-310, 373-377, 443, 538, 573-598) | `PROJECT_ROOT / "studies"` | Change to `PROJECT_ROOT / "projects"` with project-aware resolver |
| `optimization_engine/validators/results_validator.py` (line 468) | `Path(f"studies/{study_name}")` | Update to project-relative path |
| `optimization_engine/validators/config_validator.py` (line 12) | Docstring example | Update path |
| `optimization_engine/insights/__init__.py` (lines 51-77) | Docstring examples | Update paths |
| `optimization_engine/templates/__init__.py` (line 155) | Example display | Update path |
| `optimization_engine/devloop/planning.py` (lines 298-345) | `studies/_Other/` hardcoded | Update to use projects/ with legacy fallback |
| `optimization_engine/processors/surrogates/*.py` | Hardcoded Windows paths | Update to project-relative |
| `optimization_engine/gnn/*.py` | Hardcoded Windows paths | Update to project-relative |
### 2C — Project-aware study resolver (with legacy fallback)
New module: `optimization_engine/app/study_resolver.py`
```python
def resolve_study(study_name: str, project: str = None) -> Path:
"""
Resolve study path. Search order:
1. projects/{project}/studies/{study_name} (if project specified)
2. projects/*/studies/{study_name} (search all projects)
3. studies/{study_name} (legacy fallback)
"""
```
CLI changes:
- `atomizer list-studies``atomizer list-studies [--project X]` (lists from projects/ + legacy studies/)
- `atomizer neural-optimize --study X` → add optional `--project P` flag, auto-resolve with fallback
- `atomizer create-study` → requires `--project` (new studies always go in projects/)
### 2D — Legacy studies/ gets a README
```
studies/README.md:
"Legacy study folder. New work goes in projects/.
These studies will be migrated into projects/ individually when needed."
```
---
## Phase 3 — Hooks/Plugins Hardening (P1, 3-5 days)
*Unchanged from v1.*
## Phase 4 — Extractor Surface Rationalization (P1, 1 week)
*Unchanged from v1.*
## Phase 5 — Template/Study Generation Repair (P1, 2-4 days)
*Updated:* `atomizer create-study` must now:
1. Accept `--project` flag (required)
2. Generate study inside `projects/{project}/studies/{study_name}/`
3. Create project scaffold if project doesn't exist yet (with confirmation)
## Phase 6 — Future Folder Re-homing (P2, 1 week)
*Unchanged from v1.*
## Phase 7 — Verification and Guardrails (P0 ongoing)
*Updated tests:*
- `test_project_structure.py` — validate all projects have required subdirs
- `test_study_resolver.py` — study lookup works across projects
- `test_no_toplevel_studies.py` — fail if `studies/` dir exists at repo root
- Original tests from v1 still apply
---
## Dependency-Critical Ordering Summary
1. **Phase 0** — import/plugin path fixes (no folder moves)
2. **Phase 1** — canonical runner contract
3. **Phase 2** — projects-first migration (folder moves + path updates + resolver)
4. **Phase 5** — template generation updated for projects
5. **Phase 3** — hooks hardening
6. **Phase 4 + 6** — extractor/future rationalization
7. **Phase 7** — continuously
## Quick Wins (do first in Phase 2)
1. Add `--project` flag to CLI + study resolver with legacy fallback
2. Update `atomizer.py` to search `projects/` first, `studies/` second
3. Add README to `studies/` marking it legacy
4. Update docstring examples
## Risk Notes
- **Zero breaking changes**: legacy `studies/` untouched, resolver falls back to it
- **Windows hardcoded paths**: GNN test files reference `C:/Users/Antoine/Atomizer/studies/...` — low priority, update when those projects get migrated
- **Syncthing**: no changes needed now since studies/ stays. Update sync config only when individual projects migrate.