496 lines
20 KiB
Markdown
496 lines
20 KiB
Markdown
|
|
# Unified Configuration Architecture - Execution Plan
|
||
|
|
|
||
|
|
**Project**: AtomizerSpec v2.0 Implementation
|
||
|
|
**Reference Document**: `docs/plans/UNIFIED_CONFIGURATION_ARCHITECTURE.md`
|
||
|
|
**Schema Definition**: `optimization_engine/schemas/atomizer_spec_v2.json`
|
||
|
|
**Status**: Ready for Implementation
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Project Overview
|
||
|
|
|
||
|
|
Transform Atomizer's fragmented configuration system into a unified architecture where:
|
||
|
|
- One JSON schema (AtomizerSpec v2.0) is the single source of truth
|
||
|
|
- Canvas, Backend, Claude, and Optimization Engine all use the same spec
|
||
|
|
- Real-time WebSocket sync keeps all clients updated
|
||
|
|
- Claude can dynamically modify specs and add custom functions
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Phase Structure
|
||
|
|
|
||
|
|
| Phase | Name | Duration | Focus |
|
||
|
|
|-------|------|----------|-------|
|
||
|
|
| 1 | Foundation | Week 1-3 | Backend SpecManager, REST API, Migration |
|
||
|
|
| 2 | Frontend | Week 4-6 | SpecRenderer, WebSocket Sync, Store |
|
||
|
|
| 3 | Claude Integration | Week 7-9 | MCP Tools, Custom Functions |
|
||
|
|
| 4 | Polish & Testing | Week 10-12 | Migration, Testing, Documentation |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Implementation Order (Critical Path)
|
||
|
|
|
||
|
|
```
|
||
|
|
1. Schema & Types (P1.1-P1.3)
|
||
|
|
└── 2. SpecManager Service (P1.4-P1.7)
|
||
|
|
└── 3. REST Endpoints (P1.8-P1.12)
|
||
|
|
├── 4. Migration Script (P1.13-P1.16)
|
||
|
|
└── 5. Frontend Store (P2.1-P2.4)
|
||
|
|
└── 6. SpecRenderer (P2.5-P2.10)
|
||
|
|
└── 7. WebSocket Sync (P2.11-P2.15)
|
||
|
|
└── 8. MCP Tools (P3.1-P3.8)
|
||
|
|
└── 9. Custom Functions (P3.9-P3.14)
|
||
|
|
└── 10. Testing & Polish (P4.1-P4.12)
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## PHASE 1: Foundation (Backend)
|
||
|
|
|
||
|
|
### P1.1 - Create TypeScript types from JSON Schema
|
||
|
|
- **File**: `atomizer-dashboard/frontend/src/types/atomizer-spec.ts`
|
||
|
|
- **Action**: Generate TypeScript interfaces matching `atomizer_spec_v2.json`
|
||
|
|
- **Reference**: Schema at `optimization_engine/schemas/atomizer_spec_v2.json`
|
||
|
|
- **Acceptance**: Types compile, cover all schema definitions
|
||
|
|
|
||
|
|
### P1.2 - Create Python Pydantic models from JSON Schema
|
||
|
|
- **File**: `optimization_engine/config/spec_models.py`
|
||
|
|
- **Action**: Create Pydantic models for AtomizerSpec validation
|
||
|
|
- **Reference**: Schema at `optimization_engine/schemas/atomizer_spec_v2.json`
|
||
|
|
- **Acceptance**: Models validate example specs correctly
|
||
|
|
|
||
|
|
### P1.3 - Create spec validation utility
|
||
|
|
- **File**: `optimization_engine/config/spec_validator.py`
|
||
|
|
- **Action**: JSON Schema validation + semantic validation (bounds, references)
|
||
|
|
- **Dependencies**: P1.2
|
||
|
|
- **Acceptance**: Validates good specs, rejects invalid with clear errors
|
||
|
|
|
||
|
|
### P1.4 - Create SpecManager core class
|
||
|
|
- **File**: `atomizer-dashboard/backend/api/services/spec_manager.py`
|
||
|
|
- **Action**: Implement `load()`, `save()`, `_validate()`, `_compute_hash()`
|
||
|
|
- **Reference**: Design in UNIFIED_CONFIGURATION_ARCHITECTURE.md Section 5.1
|
||
|
|
- **Dependencies**: P1.3
|
||
|
|
- **Acceptance**: Can load/save/validate atomizer_spec.json files
|
||
|
|
|
||
|
|
### P1.5 - Add SpecManager patch functionality
|
||
|
|
- **File**: `atomizer-dashboard/backend/api/services/spec_manager.py`
|
||
|
|
- **Action**: Implement `patch()` method for JSONPath-style updates
|
||
|
|
- **Dependencies**: P1.4
|
||
|
|
- **Acceptance**: Can update nested fields with conflict detection
|
||
|
|
|
||
|
|
### P1.6 - Add SpecManager node operations
|
||
|
|
- **File**: `atomizer-dashboard/backend/api/services/spec_manager.py`
|
||
|
|
- **Action**: Implement `add_node()`, `remove_node()`, `_generate_id()`, `_auto_position()`
|
||
|
|
- **Dependencies**: P1.5
|
||
|
|
- **Acceptance**: Can add/remove design vars, extractors, objectives, constraints
|
||
|
|
|
||
|
|
### P1.7 - Add SpecManager custom function support
|
||
|
|
- **File**: `atomizer-dashboard/backend/api/services/spec_manager.py`
|
||
|
|
- **Action**: Implement `add_custom_function()` with Python syntax validation
|
||
|
|
- **Dependencies**: P1.6
|
||
|
|
- **Acceptance**: Can add custom extractors with validated Python code
|
||
|
|
|
||
|
|
### P1.8 - Create spec REST router
|
||
|
|
- **File**: `atomizer-dashboard/backend/api/routes/spec.py`
|
||
|
|
- **Action**: Create FastAPI router for spec endpoints
|
||
|
|
- **Dependencies**: P1.7
|
||
|
|
- **Acceptance**: Router imports and mounts correctly
|
||
|
|
|
||
|
|
### P1.9 - Implement GET /studies/{study_id}/spec
|
||
|
|
- **File**: `atomizer-dashboard/backend/api/routes/spec.py`
|
||
|
|
- **Action**: Return full AtomizerSpec for a study
|
||
|
|
- **Dependencies**: P1.8
|
||
|
|
- **Acceptance**: Returns valid spec JSON, 404 for missing studies
|
||
|
|
|
||
|
|
### P1.10 - Implement PUT /studies/{study_id}/spec
|
||
|
|
- **File**: `atomizer-dashboard/backend/api/routes/spec.py`
|
||
|
|
- **Action**: Replace entire spec with validation
|
||
|
|
- **Dependencies**: P1.9
|
||
|
|
- **Acceptance**: Validates, saves, returns new hash
|
||
|
|
|
||
|
|
### P1.11 - Implement PATCH /studies/{study_id}/spec
|
||
|
|
- **File**: `atomizer-dashboard/backend/api/routes/spec.py`
|
||
|
|
- **Action**: Partial update with JSONPath
|
||
|
|
- **Dependencies**: P1.10
|
||
|
|
- **Acceptance**: Updates specific fields, broadcasts change
|
||
|
|
|
||
|
|
### P1.12 - Implement POST /studies/{study_id}/spec/validate
|
||
|
|
- **File**: `atomizer-dashboard/backend/api/routes/spec.py`
|
||
|
|
- **Action**: Validate spec and return detailed report
|
||
|
|
- **Dependencies**: P1.11
|
||
|
|
- **Acceptance**: Returns errors, warnings, summary
|
||
|
|
|
||
|
|
### P1.13 - Create config migration base
|
||
|
|
- **File**: `optimization_engine/config/migrator.py`
|
||
|
|
- **Action**: Create SpecMigrator class with field mapping
|
||
|
|
- **Reference**: Design in UNIFIED_CONFIGURATION_ARCHITECTURE.md Section 8
|
||
|
|
- **Acceptance**: Class structure ready for migration logic
|
||
|
|
|
||
|
|
### P1.14 - Implement design variable migration
|
||
|
|
- **File**: `optimization_engine/config/migrator.py`
|
||
|
|
- **Action**: Migrate `bounds[]` → `bounds.min/max`, `parameter` → `expression_name`
|
||
|
|
- **Dependencies**: P1.13
|
||
|
|
- **Acceptance**: All DV formats convert correctly
|
||
|
|
|
||
|
|
### P1.15 - Implement objective/constraint migration
|
||
|
|
- **File**: `optimization_engine/config/migrator.py`
|
||
|
|
- **Action**: Migrate `goal` → `direction`, extraction configs to new format
|
||
|
|
- **Dependencies**: P1.14
|
||
|
|
- **Acceptance**: Objectives and constraints convert correctly
|
||
|
|
|
||
|
|
### P1.16 - Implement full config migration
|
||
|
|
- **File**: `optimization_engine/config/migrator.py`
|
||
|
|
- **Action**: Complete migration including canvas positions, extractors inference
|
||
|
|
- **Dependencies**: P1.15
|
||
|
|
- **Acceptance**: Can migrate any existing optimization_config.json to AtomizerSpec
|
||
|
|
|
||
|
|
### P1.17 - Create migration CLI tool
|
||
|
|
- **File**: `tools/migrate_to_spec_v2.py`
|
||
|
|
- **Action**: CLI for batch migration with dry-run support
|
||
|
|
- **Dependencies**: P1.16
|
||
|
|
- **Acceptance**: `python tools/migrate_to_spec_v2.py --dry-run studies/*`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## PHASE 2: Frontend Integration
|
||
|
|
|
||
|
|
### P2.1 - Create useSpecStore hook
|
||
|
|
- **File**: `atomizer-dashboard/frontend/src/hooks/useSpecStore.ts`
|
||
|
|
- **Action**: Zustand store for AtomizerSpec state management
|
||
|
|
- **Dependencies**: P1.1
|
||
|
|
- **Acceptance**: Store holds spec, provides typed accessors
|
||
|
|
|
||
|
|
### P2.2 - Add spec loading to useSpecStore
|
||
|
|
- **File**: `atomizer-dashboard/frontend/src/hooks/useSpecStore.ts`
|
||
|
|
- **Action**: Implement `loadSpec(studyId)` fetching from API
|
||
|
|
- **Dependencies**: P2.1, P1.9
|
||
|
|
- **Acceptance**: Loads spec from backend, updates store
|
||
|
|
|
||
|
|
### P2.3 - Add spec modification to useSpecStore
|
||
|
|
- **File**: `atomizer-dashboard/frontend/src/hooks/useSpecStore.ts`
|
||
|
|
- **Action**: Implement `patchSpec()`, `addNode()`, `removeNode()` calling API
|
||
|
|
- **Dependencies**: P2.2, P1.11
|
||
|
|
- **Acceptance**: Modifications persist to backend
|
||
|
|
|
||
|
|
### P2.4 - Add optimistic updates to useSpecStore
|
||
|
|
- **File**: `atomizer-dashboard/frontend/src/hooks/useSpecStore.ts`
|
||
|
|
- **Action**: Update local state immediately, rollback on error
|
||
|
|
- **Dependencies**: P2.3
|
||
|
|
- **Acceptance**: UI feels instant, handles errors gracefully
|
||
|
|
|
||
|
|
### P2.5 - Create specToNodes converter
|
||
|
|
- **File**: `atomizer-dashboard/frontend/src/lib/spec/converter.ts`
|
||
|
|
- **Action**: Convert AtomizerSpec to ReactFlow nodes array
|
||
|
|
- **Reference**: Design in UNIFIED_CONFIGURATION_ARCHITECTURE.md Section 5.2
|
||
|
|
- **Dependencies**: P1.1
|
||
|
|
- **Acceptance**: All node types render correctly
|
||
|
|
|
||
|
|
### P2.6 - Create specToEdges converter
|
||
|
|
- **File**: `atomizer-dashboard/frontend/src/lib/spec/converter.ts`
|
||
|
|
- **Action**: Convert spec.canvas.edges to ReactFlow edges
|
||
|
|
- **Dependencies**: P2.5
|
||
|
|
- **Acceptance**: All connections render correctly
|
||
|
|
|
||
|
|
### P2.7 - Create SpecRenderer component
|
||
|
|
- **File**: `atomizer-dashboard/frontend/src/components/canvas/SpecRenderer.tsx`
|
||
|
|
- **Action**: ReactFlow component that renders from useSpecStore
|
||
|
|
- **Dependencies**: P2.5, P2.6, P2.4
|
||
|
|
- **Acceptance**: Canvas displays spec correctly
|
||
|
|
|
||
|
|
### P2.8 - Wire node editing to spec updates
|
||
|
|
- **File**: `atomizer-dashboard/frontend/src/components/canvas/SpecRenderer.tsx`
|
||
|
|
- **Action**: Node data changes call useSpecStore.patchSpec()
|
||
|
|
- **Dependencies**: P2.7
|
||
|
|
- **Acceptance**: Editing node properties persists to spec
|
||
|
|
|
||
|
|
### P2.9 - Wire node position to spec updates
|
||
|
|
- **File**: `atomizer-dashboard/frontend/src/components/canvas/SpecRenderer.tsx`
|
||
|
|
- **Action**: Drag-drop updates canvas_position in spec
|
||
|
|
- **Dependencies**: P2.8
|
||
|
|
- **Acceptance**: Layout persists across reloads
|
||
|
|
|
||
|
|
### P2.10 - Update node panels for full spec fields
|
||
|
|
- **Files**: `atomizer-dashboard/frontend/src/components/canvas/panels/*.tsx`
|
||
|
|
- **Action**: Update all node config panels to show/edit full spec fields
|
||
|
|
- **Dependencies**: P2.8
|
||
|
|
- **Acceptance**: All spec fields are editable in UI
|
||
|
|
|
||
|
|
### P2.11 - Create WebSocket connection hook
|
||
|
|
- **File**: `atomizer-dashboard/frontend/src/hooks/useSpecSync.ts`
|
||
|
|
- **Action**: WebSocket connection to `/api/studies/{id}/sync`
|
||
|
|
- **Dependencies**: P2.4
|
||
|
|
- **Acceptance**: Connects, handles reconnection
|
||
|
|
|
||
|
|
### P2.12 - Create WebSocket backend endpoint
|
||
|
|
- **File**: `atomizer-dashboard/backend/api/routes/spec.py`
|
||
|
|
- **Action**: WebSocket endpoint for spec sync
|
||
|
|
- **Dependencies**: P1.12
|
||
|
|
- **Acceptance**: Accepts connections, tracks subscribers
|
||
|
|
|
||
|
|
### P2.13 - Implement spec_updated broadcast
|
||
|
|
- **File**: `atomizer-dashboard/backend/api/services/spec_manager.py`
|
||
|
|
- **Action**: SpecManager broadcasts to all subscribers on save
|
||
|
|
- **Dependencies**: P2.12
|
||
|
|
- **Acceptance**: All connected clients receive updates
|
||
|
|
|
||
|
|
### P2.14 - Handle spec_updated in frontend
|
||
|
|
- **File**: `atomizer-dashboard/frontend/src/hooks/useSpecSync.ts`
|
||
|
|
- **Action**: On spec_updated message, refresh spec from store
|
||
|
|
- **Dependencies**: P2.11, P2.13
|
||
|
|
- **Acceptance**: Changes from other clients appear in real-time
|
||
|
|
|
||
|
|
### P2.15 - Add conflict detection
|
||
|
|
- **File**: `atomizer-dashboard/frontend/src/hooks/useSpecStore.ts`
|
||
|
|
- **Action**: Compare hashes, warn on conflict, offer merge/overwrite
|
||
|
|
- **Dependencies**: P2.14
|
||
|
|
- **Acceptance**: Concurrent edits don't silently overwrite
|
||
|
|
|
||
|
|
### P2.16 - Replace CanvasView with SpecRenderer
|
||
|
|
- **File**: `atomizer-dashboard/frontend/src/pages/CanvasView.tsx`
|
||
|
|
- **Action**: Switch from useCanvasStore to useSpecStore + SpecRenderer
|
||
|
|
- **Dependencies**: P2.10, P2.15
|
||
|
|
- **Acceptance**: Canvas page uses new spec-based system
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## PHASE 3: Claude Integration
|
||
|
|
|
||
|
|
### P3.1 - Create spec_get MCP tool
|
||
|
|
- **File**: `mcp-server/atomizer-tools/src/tools/spec_tools.ts`
|
||
|
|
- **Action**: Tool to retrieve full AtomizerSpec
|
||
|
|
- **Reference**: Design in UNIFIED_CONFIGURATION_ARCHITECTURE.md Section 5.3
|
||
|
|
- **Dependencies**: P1.9
|
||
|
|
- **Acceptance**: Claude can read spec via MCP
|
||
|
|
|
||
|
|
### P3.2 - Create spec_modify MCP tool
|
||
|
|
- **File**: `mcp-server/atomizer-tools/src/tools/spec_tools.ts`
|
||
|
|
- **Action**: Tool to apply modifications (set, add, remove operations)
|
||
|
|
- **Dependencies**: P3.1, P1.11
|
||
|
|
- **Acceptance**: Claude can modify spec fields
|
||
|
|
|
||
|
|
### P3.3 - Create spec_add_node MCP tool
|
||
|
|
- **File**: `mcp-server/atomizer-tools/src/tools/spec_tools.ts`
|
||
|
|
- **Action**: Tool to add design vars, extractors, objectives, constraints
|
||
|
|
- **Dependencies**: P3.2
|
||
|
|
- **Acceptance**: Claude can add nodes to canvas
|
||
|
|
|
||
|
|
### P3.4 - Create spec_remove_node MCP tool
|
||
|
|
- **File**: `mcp-server/atomizer-tools/src/tools/spec_tools.ts`
|
||
|
|
- **Action**: Tool to remove nodes (with edge cleanup)
|
||
|
|
- **Dependencies**: P3.3
|
||
|
|
- **Acceptance**: Claude can remove nodes
|
||
|
|
|
||
|
|
### P3.5 - Create spec_validate MCP tool
|
||
|
|
- **File**: `mcp-server/atomizer-tools/src/tools/spec_tools.ts`
|
||
|
|
- **Action**: Tool to validate spec and return report
|
||
|
|
- **Dependencies**: P1.12
|
||
|
|
- **Acceptance**: Claude can check spec validity
|
||
|
|
|
||
|
|
### P3.6 - Create spec_add_custom_extractor MCP tool
|
||
|
|
- **File**: `mcp-server/atomizer-tools/src/tools/spec_tools.ts`
|
||
|
|
- **Action**: Tool to add custom Python functions as extractors
|
||
|
|
- **Dependencies**: P1.7, P3.3
|
||
|
|
- **Acceptance**: Claude can add custom extraction logic
|
||
|
|
|
||
|
|
### P3.7 - Register spec tools in MCP server
|
||
|
|
- **File**: `mcp-server/atomizer-tools/src/index.ts`
|
||
|
|
- **Action**: Import and register all spec_* tools
|
||
|
|
- **Dependencies**: P3.1-P3.6
|
||
|
|
- **Acceptance**: Tools appear in MCP tool list
|
||
|
|
|
||
|
|
### P3.8 - Update ContextBuilder for spec awareness
|
||
|
|
- **File**: `atomizer-dashboard/backend/api/services/context_builder.py`
|
||
|
|
- **Action**: Include spec summary in Claude context, mention spec tools
|
||
|
|
- **Dependencies**: P3.7
|
||
|
|
- **Acceptance**: Claude knows about spec tools in context
|
||
|
|
|
||
|
|
### P3.9 - Create custom extractor runtime loader
|
||
|
|
- **File**: `optimization_engine/extractors/custom_loader.py`
|
||
|
|
- **Action**: Dynamically load and execute custom functions from spec
|
||
|
|
- **Dependencies**: P1.7
|
||
|
|
- **Acceptance**: Custom functions execute during optimization
|
||
|
|
|
||
|
|
### P3.10 - Integrate custom extractors into optimization runner
|
||
|
|
- **File**: `optimization_engine/core/runner.py`
|
||
|
|
- **Action**: Check spec for custom extractors, load and use them
|
||
|
|
- **Dependencies**: P3.9
|
||
|
|
- **Acceptance**: Optimization uses custom extractors defined in spec
|
||
|
|
|
||
|
|
### P3.11 - Add custom extractor node type to canvas
|
||
|
|
- **File**: `atomizer-dashboard/frontend/src/components/canvas/nodes/CustomExtractorNode.tsx`
|
||
|
|
- **Action**: New node type showing custom function with code preview
|
||
|
|
- **Dependencies**: P2.10
|
||
|
|
- **Acceptance**: Custom extractors display distinctly in canvas
|
||
|
|
|
||
|
|
### P3.12 - Add code editor for custom extractors
|
||
|
|
- **File**: `atomizer-dashboard/frontend/src/components/canvas/panels/CustomExtractorPanel.tsx`
|
||
|
|
- **Action**: Monaco editor for viewing/editing custom Python code
|
||
|
|
- **Dependencies**: P3.11
|
||
|
|
- **Acceptance**: Users can view and edit custom function code
|
||
|
|
|
||
|
|
### P3.13 - Create spec_create_from_description MCP tool
|
||
|
|
- **File**: `mcp-server/atomizer-tools/src/tools/spec_tools.ts`
|
||
|
|
- **Action**: Tool to create new spec from natural language + model path
|
||
|
|
- **Dependencies**: P3.6, P1.16
|
||
|
|
- **Acceptance**: Claude can create studies from descriptions
|
||
|
|
|
||
|
|
### P3.14 - Update Claude prompts for spec workflow
|
||
|
|
- **File**: `atomizer-dashboard/backend/api/services/context_builder.py`
|
||
|
|
- **Action**: Update system prompts to guide Claude on using spec tools
|
||
|
|
- **Dependencies**: P3.13
|
||
|
|
- **Acceptance**: Claude naturally uses spec tools for modifications
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## PHASE 4: Polish & Testing
|
||
|
|
|
||
|
|
### P4.1 - Migrate m1_mirror studies
|
||
|
|
- **Action**: Run migration on all m1_mirror_* studies
|
||
|
|
- **Dependencies**: P1.17
|
||
|
|
- **Acceptance**: All studies have valid atomizer_spec.json
|
||
|
|
|
||
|
|
### P4.2 - Migrate drone_gimbal study
|
||
|
|
- **Action**: Run migration on drone_gimbal study
|
||
|
|
- **Dependencies**: P1.17
|
||
|
|
- **Acceptance**: Study has valid atomizer_spec.json
|
||
|
|
|
||
|
|
### P4.3 - Migrate all remaining studies
|
||
|
|
- **Action**: Run migration on all studies in studies/
|
||
|
|
- **Dependencies**: P4.1, P4.2
|
||
|
|
- **Acceptance**: All studies migrated, validated
|
||
|
|
|
||
|
|
### P4.4 - Create spec unit tests
|
||
|
|
- **File**: `tests/test_spec_manager.py`
|
||
|
|
- **Action**: Unit tests for SpecManager operations
|
||
|
|
- **Dependencies**: P1.7
|
||
|
|
- **Acceptance**: All SpecManager methods tested
|
||
|
|
|
||
|
|
### P4.5 - Create spec API integration tests
|
||
|
|
- **File**: `tests/test_spec_api.py`
|
||
|
|
- **Action**: Integration tests for REST endpoints
|
||
|
|
- **Dependencies**: P1.12
|
||
|
|
- **Acceptance**: All endpoints tested
|
||
|
|
|
||
|
|
### P4.6 - Create migration tests
|
||
|
|
- **File**: `tests/test_migrator.py`
|
||
|
|
- **Action**: Test migration with various config formats
|
||
|
|
- **Dependencies**: P1.16
|
||
|
|
- **Acceptance**: All config variants migrate correctly
|
||
|
|
|
||
|
|
### P4.7 - Create frontend component tests
|
||
|
|
- **File**: `atomizer-dashboard/frontend/src/__tests__/SpecRenderer.test.tsx`
|
||
|
|
- **Action**: Test SpecRenderer with various specs
|
||
|
|
- **Dependencies**: P2.16
|
||
|
|
- **Acceptance**: Canvas renders correctly for all spec types
|
||
|
|
|
||
|
|
### P4.8 - Create WebSocket sync tests
|
||
|
|
- **File**: `tests/test_spec_sync.py`
|
||
|
|
- **Action**: Test real-time sync between multiple clients
|
||
|
|
- **Dependencies**: P2.15
|
||
|
|
- **Acceptance**: Changes propagate correctly
|
||
|
|
|
||
|
|
### P4.9 - Create MCP tools tests
|
||
|
|
- **File**: `mcp-server/atomizer-tools/src/__tests__/spec_tools.test.ts`
|
||
|
|
- **Action**: Test all spec_* MCP tools
|
||
|
|
- **Dependencies**: P3.7
|
||
|
|
- **Acceptance**: All tools work correctly
|
||
|
|
|
||
|
|
### P4.10 - End-to-end testing
|
||
|
|
- **Action**: Full workflow test: create study in canvas, modify via Claude, run optimization
|
||
|
|
- **Dependencies**: P4.1-P4.9
|
||
|
|
- **Acceptance**: Complete workflow works
|
||
|
|
|
||
|
|
### P4.11 - Update documentation
|
||
|
|
- **Files**: `docs/04_USER_GUIDES/CANVAS.md`, `docs/04_USER_GUIDES/DASHBOARD.md`
|
||
|
|
- **Action**: Document new spec-based workflow
|
||
|
|
- **Dependencies**: P4.10
|
||
|
|
- **Acceptance**: Documentation reflects new system
|
||
|
|
|
||
|
|
### P4.12 - Update CLAUDE.md
|
||
|
|
- **File**: `CLAUDE.md`
|
||
|
|
- **Action**: Add spec tools documentation, update context loading
|
||
|
|
- **Dependencies**: P4.11
|
||
|
|
- **Acceptance**: Claude Code sessions know about spec system
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## File Summary
|
||
|
|
|
||
|
|
### New Files to Create
|
||
|
|
|
||
|
|
| File | Phase | Purpose |
|
||
|
|
|------|-------|---------|
|
||
|
|
| `atomizer-dashboard/frontend/src/types/atomizer-spec.ts` | P1 | TypeScript types |
|
||
|
|
| `optimization_engine/config/spec_models.py` | P1 | Pydantic models |
|
||
|
|
| `optimization_engine/config/spec_validator.py` | P1 | Validation logic |
|
||
|
|
| `atomizer-dashboard/backend/api/services/spec_manager.py` | P1 | Core spec service |
|
||
|
|
| `atomizer-dashboard/backend/api/routes/spec.py` | P1 | REST endpoints |
|
||
|
|
| `optimization_engine/config/migrator.py` | P1 | Config migration |
|
||
|
|
| `tools/migrate_to_spec_v2.py` | P1 | Migration CLI |
|
||
|
|
| `atomizer-dashboard/frontend/src/hooks/useSpecStore.ts` | P2 | Spec state store |
|
||
|
|
| `atomizer-dashboard/frontend/src/hooks/useSpecSync.ts` | P2 | WebSocket sync |
|
||
|
|
| `atomizer-dashboard/frontend/src/lib/spec/converter.ts` | P2 | Spec ↔ ReactFlow |
|
||
|
|
| `atomizer-dashboard/frontend/src/components/canvas/SpecRenderer.tsx` | P2 | New canvas component |
|
||
|
|
| `mcp-server/atomizer-tools/src/tools/spec_tools.ts` | P3 | MCP tools |
|
||
|
|
| `optimization_engine/extractors/custom_loader.py` | P3 | Custom function loader |
|
||
|
|
| `atomizer-dashboard/frontend/src/components/canvas/nodes/CustomExtractorNode.tsx` | P3 | Custom node type |
|
||
|
|
| `atomizer-dashboard/frontend/src/components/canvas/panels/CustomExtractorPanel.tsx` | P3 | Code editor panel |
|
||
|
|
|
||
|
|
### Files to Modify
|
||
|
|
|
||
|
|
| File | Phase | Changes |
|
||
|
|
|------|-------|---------|
|
||
|
|
| `atomizer-dashboard/backend/api/main.py` | P1 | Mount spec router |
|
||
|
|
| `mcp-server/atomizer-tools/src/index.ts` | P3 | Register spec tools |
|
||
|
|
| `atomizer-dashboard/backend/api/services/context_builder.py` | P3 | Update Claude context |
|
||
|
|
| `optimization_engine/core/runner.py` | P3 | Custom extractor support |
|
||
|
|
| `atomizer-dashboard/frontend/src/pages/CanvasView.tsx` | P2 | Use SpecRenderer |
|
||
|
|
| `CLAUDE.md` | P4 | Document spec system |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Success Criteria
|
||
|
|
|
||
|
|
### Phase 1 Complete When:
|
||
|
|
- [ ] SpecManager can load/save/validate specs
|
||
|
|
- [ ] All REST endpoints return correct responses
|
||
|
|
- [ ] Migration tool converts existing configs
|
||
|
|
|
||
|
|
### Phase 2 Complete When:
|
||
|
|
- [ ] Canvas renders from AtomizerSpec
|
||
|
|
- [ ] Edits persist to spec file
|
||
|
|
- [ ] WebSocket sync works between clients
|
||
|
|
|
||
|
|
### Phase 3 Complete When:
|
||
|
|
- [ ] Claude can read and modify specs via MCP
|
||
|
|
- [ ] Custom extractors work in optimization
|
||
|
|
- [ ] Claude can create studies from descriptions
|
||
|
|
|
||
|
|
### Phase 4 Complete When:
|
||
|
|
- [ ] All existing studies migrated
|
||
|
|
- [ ] All tests pass
|
||
|
|
- [ ] Documentation updated
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Risk Mitigation
|
||
|
|
|
||
|
|
| Risk | Mitigation |
|
||
|
|
|------|------------|
|
||
|
|
| Existing studies break | Migration tool with dry-run, keep old configs as backup |
|
||
|
|
| WebSocket complexity | Start with polling, add WebSocket as enhancement |
|
||
|
|
| Custom code security | Sandbox execution, syntax validation, no imports |
|
||
|
|
| Performance with large specs | Lazy loading, incremental updates |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Quick Reference
|
||
|
|
|
||
|
|
**Master Design**: `docs/plans/UNIFIED_CONFIGURATION_ARCHITECTURE.md`
|
||
|
|
**Schema**: `optimization_engine/schemas/atomizer_spec_v2.json`
|
||
|
|
**This Plan**: `docs/plans/UNIFIED_CONFIG_EXECUTION_PLAN.md`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
*Execute tasks in order. Each task has clear acceptance criteria. Reference the master design document for detailed specifications.*
|