Files
motovaultpro/docs/PLATFORM-INTEGRATION-AGENTS.md
2025-11-03 09:21:10 -06:00

1189 lines
32 KiB
Markdown

# Platform Service Integration - Agent Execution Manifest
## Overview
Integration of mvp-platform vehicles service into backend as a feature module. This document defines specialized agents for parallel execution.
**Goal**: Convert 6-container architecture to 5-container by absorbing platform service into backend.
**Strategy**: Single-phase cutover with parallel agent execution.
**Estimated Duration**: 6-8 hours with 7 agents running in parallel.
---
## Execution Waves
### Wave 1: Parallel Foundation (4 agents)
Can execute simultaneously, no dependencies.
- **Agent 1**: Backend Feature Creator
- **Agent 2**: VIN Removal - Backend
- **Agent 3**: VIN Removal - Frontend
- **Agent 4**: Configuration Cleanup
### Wave 2: Integration & Testing (2 agents)
Depends on Wave 1 completion.
- **Agent 5**: Integration & Testing
- **Agent 6**: Documentation Updates
### Wave 3: Final Cleanup (1 agent)
Depends on Wave 2 completion.
- **Agent 7**: Container Removal & Deployment
---
## Agent Definitions
## AGENT 1: Backend Feature Creator
**Role**: Create new vehicle-data feature module in TypeScript
**Subagent Type**: `feature-agent`
**Dependencies**: None (can start immediately)
**Deliverables**:
- Complete feature structure in `backend/src/features/vehicle-data/`
- TypeScript repository with all SQL queries converted from Python
- Caching service using Redis
- API routes and controllers
- Request/response DTOs
- Feature README
**Prompt**:
```
Create a new feature module at backend/src/features/vehicle-data/ that replaces the Python FastAPI platform service.
CONTEXT:
- Source: /Users/egullickson/Documents/Technology/coding/motovaultpro/mvp-platform-services/vehicles/
- Python FastAPI service with vehicle hierarchical data (makes/models/trims/engines)
- Uses vehicles schema in PostgreSQL (vehicles.make, vehicles.model, etc.)
- Redis caching with 6-hour TTL
- Authentication via JWT (extract user_id)
REQUIREMENTS:
1. CREATE FEATURE STRUCTURE:
backend/src/features/vehicle-data/
├── api/
│ ├── vehicle-data.routes.ts # Fastify routes
│ └── vehicle-data.controller.ts # Controllers
├── domain/
│ ├── vehicle-data.service.ts # Business logic
│ └── vehicle-data.cache.ts # Redis caching
├── data/
│ └── vehicle-data.repository.ts # PostgreSQL queries
├── models/
│ ├── requests.ts # DTOs
│ └── responses.ts # DTOs
├── tests/
│ ├── unit/
│ └── integration/
└── README.md
2. CONVERT PYTHON TO TYPESCRIPT:
Source files:
- Python repo: mvp-platform-services/vehicles/api/repositories/vehicles_repository.py
- Python service: mvp-platform-services/vehicles/api/services/vehicles_service.py
- Python cache: mvp-platform-services/vehicles/api/services/cache_service.py
Convert these methods:
- get_years() → SELECT DISTINCT year FROM vehicles.model_year ORDER BY year DESC
- get_makes(year) → Join vehicles.make through model_year
- get_models(year, make_id) → Join vehicles.model through model_year
- get_trims(year, model_id) → Get trims for model/year
- get_engines(year, model_id, trim_id) → Get engines via trim_engine
3. IMPLEMENT CACHING:
- Use Redis from backend core (already connected)
- Cache keys: vehicle-data:makes:{year}, vehicle-data:models:{year}:{makeId}, etc.
- TTL: 6 hours (21600 seconds)
- Graceful fallback if Redis unavailable
4. CREATE API ROUTES:
All routes require JWT authentication:
- GET /api/vehicle-data/years
- GET /api/vehicle-data/makes?year={year}
- GET /api/vehicle-data/models?year={year}&make_id={id}
- GET /api/vehicle-data/trims?year={year}&model_id={id}
- GET /api/vehicle-data/engines?year={year}&trim_id={id}
5. RESPONSE FORMATS (match Python service):
{
"years": [2024, 2023, 2022, ...],
"makes": [{ id: 1, name: "Honda" }, ...],
"models": [{ id: 1, name: "Civic" }, ...],
"trims": [{ id: 1, name: "LX" }, ...],
"engines": [{ id: 1, name: "2.0L I4" }, ...]
}
6. ERROR HANDLING:
- Validate query parameters (year 1950-2100, IDs positive integers)
- Return 400 for invalid input
- Return 404 if no data found
- Log errors but don't expose internal details
7. REGISTER ROUTES:
Update backend/src/app.ts to register feature:
import { vehicleDataRoutes } from './features/vehicle-data/api/vehicle-data.routes';
app.register(vehicleDataRoutes, { prefix: '/api/vehicle-data' });
CONSTRAINTS:
- Use existing PostgreSQL pool from core
- Use existing Redis client from core
- Follow feature capsule pattern (see backend/src/features/vehicles/ as example)
- NO VIN decoding (that's being removed)
- Production-ready code (error handling, logging, validation)
VERIFICATION:
- All TypeScript compiles without errors
- Routes registered in app.ts
- Repository queries match Python SQL logic
- Caching implementation complete
- Feature README documents all endpoints
Return confirmation when complete with file paths created.
```
**Success Criteria**:
- ✅ Feature structure created
- ✅ All Python logic converted to TypeScript
- ✅ Caching implemented
- ✅ Routes registered
- ✅ TypeScript compiles
- ✅ README complete
**Estimated Time**: 3-4 hours
---
## AGENT 2: VIN Removal - Backend
**Role**: Remove all VIN decoding logic from backend
**Subagent Type**: `general-purpose`
**Dependencies**: None (can start immediately)
**Deliverables**:
- Removed VIN decode methods from platform client
- Removed vPIC fallback client
- Updated vehicles service (no auto-populate from VIN)
- Updated vehicle creation to require make/model/year
- Removed VIN cache methods
- Removed circuit breaker for VIN decode
**Prompt**:
```
Remove all VIN decoding functionality from the backend codebase.
CONTEXT:
VIN decoding is being removed as a feature. Users will manually select make/model/year instead of auto-populating from VIN.
TASKS:
1. DELETE ENTIRE DIRECTORY:
backend/src/features/vehicles/external/platform-vehicles/
- This contains the platform client with VIN decode
- The entire external integration is being replaced
2. DELETE FILE:
backend/src/features/vehicles/domain/platform-integration.service.ts
- This service wraps platform calls and vPIC fallback
- No longer needed
3. UPDATE VEHICLES SERVICE:
File: backend/src/features/vehicles/domain/vehicles.service.ts
Remove:
- Import of PlatformIntegrationService
- Constructor dependency on platformIntegration
- Any calls to platformIntegration.decodeVIN()
- Auto-population of make/model/year from VIN
Keep VIN as optional string field (for user reference only).
4. UPDATE VEHICLES REPOSITORY:
File: backend/src/features/vehicles/data/vehicles.repository.ts
Remove:
- cacheVINDecode() method
- Any VIN cache queries
- VIN decode cache table references
5. UPDATE VEHICLE CREATION:
File: backend/src/features/vehicles/api/vehicles.controller.ts
Update createVehicle endpoint:
- Remove VIN decode step
- Require make, model, year in request body (not optional)
- VIN field optional (string for reference only)
6. UPDATE VALIDATION:
File: backend/src/features/vehicles/models/requests.ts
Update CreateVehicleRequest:
- make: REQUIRED string
- model: REQUIRED string
- year: REQUIRED number (1950-2100)
- vin: OPTIONAL string (17 chars if provided)
7. REMOVE CIRCUIT BREAKER:
Check package.json for opossum dependency:
- If ONLY used for platform service, remove from package.json
- If used elsewhere, keep but remove platform-specific circuit breaker config
8. REMOVE VPIC CLIENT:
Search for vPIC/NHTSA API client:
- Remove any vPIC fallback client files
- Remove VPIC_API_URL environment variable references
9. UPDATE TESTS:
backend/src/features/vehicles/tests/
- Delete: unit/platform-vehicles.client.test.ts
- Update: integration/vehicles.integration.test.ts
- Remove VIN decode test scenarios
- Update create vehicle tests (now requires make/model/year)
VERIFICATION:
- No references to "platform-vehicles" in backend code
- No references to "vindecode" or "decodeVIN"
- No references to "vPIC" or "NHTSA"
- Vehicle creation requires make/model/year
- All tests updated and passing
- TypeScript compiles without errors
Return list of files deleted and modified with confirmation.
```
**Success Criteria**:
- ✅ Platform integration deleted
- ✅ VIN decode logic removed
- ✅ Vehicle creation updated
- ✅ Tests updated
- ✅ No VIN references remain
**Estimated Time**: 2-3 hours
---
## AGENT 3: VIN Removal - Frontend
**Role**: Remove VIN decoding from frontend UI
**Subagent Type**: `first-frontend-agent`
**Dependencies**: None (can start immediately)
**Deliverables**:
- Removed VIN decode button/functionality
- Updated vehicle form to require make/model/year dropdowns
- Updated form validation
- Updated user experience (manual selection)
**Prompt**:
```
Remove VIN decoding functionality from the frontend and update vehicle creation form to require manual make/model/year selection.
CONTEXT:
VIN decoding is being removed. Users will now manually select vehicle details from dropdowns instead of auto-populating from VIN.
TASKS:
1. FIND VEHICLE CREATION FORM:
Search for vehicle creation/edit components:
- Likely in: frontend/src/features/vehicles/ or frontend/src/components/vehicles/
- Look for: CreateVehicle, VehicleForm, AddVehicle components
2. REMOVE VIN DECODE UI:
Remove:
- "Decode VIN" button
- VIN input auto-complete/lookup functionality
- Any loading states for VIN decode
- Success/error messages for VIN decode
3. UPDATE FORM FIELDS:
Make these fields REQUIRED with dropdowns:
- Make: Dropdown populated from /api/vehicle-data/makes?year={year}
- Model: Dropdown populated from /api/vehicle-data/models?year={year}&make_id={makeId}
- Year: Dropdown populated from /api/vehicle-data/years
- Trim: Optional dropdown from /api/vehicle-data/trims
- Engine: Optional dropdown from /api/vehicle-data/engines
Make VIN field OPTIONAL (text input for reference only).
4. IMPLEMENT CASCADING DROPDOWNS:
- Year selection → loads Makes
- Make selection → loads Models
- Model selection → loads Trims
- Trim selection → loads Engines
5. UPDATE API CALLS:
Change from:
- /api/vehicles/dropdown/* (old platform proxy)
To:
- /api/vehicle-data/years
- /api/vehicle-data/makes?year={year}
- /api/vehicle-data/models?year={year}&make_id={id}
6. UPDATE FORM VALIDATION:
- Require year, make, model
- VIN optional (17 chars if provided)
- Show clear error messages for required fields
7. UPDATE USER EXPERIENCE:
- Add help text: "Select your vehicle from the dropdowns below"
- Clear dependent dropdowns when parent changes (e.g., clear Models when Make changes)
- Show loading states while fetching dropdown data
8. TEST ON MOBILE + DESKTOP:
- Dropdowns work on mobile
- Touch-friendly dropdown selection
- Responsive layout
- No horizontal scrolling
9. REMOVE VIN DECODE UTILITIES:
Search for and remove:
- VIN validation functions (if only used for decode)
- VIN formatting utilities
- API client methods for VIN decode
VERIFICATION:
- No "Decode VIN" button in UI
- Vehicle form has year/make/model dropdowns (required)
- Cascading dropdowns work correctly
- VIN field is optional
- Form validation updated
- Works on mobile and desktop
- API calls updated to /api/vehicle-data/*
- npm run build succeeds
- npm run lint passes
Return confirmation with screenshots of updated form (mobile + desktop).
```
**Success Criteria**:
- ✅ VIN decode UI removed
- ✅ Dropdowns implemented
- ✅ Cascading logic works
- ✅ Mobile + desktop tested
- ✅ Validation updated
**Estimated Time**: 2-3 hours
---
## AGENT 4: Configuration Cleanup
**Role**: Remove platform service from docker-compose and configuration
**Subagent Type**: `general-purpose`
**Dependencies**: None (can start immediately)
**Deliverables**:
- Updated docker-compose.yml (remove mvp-platform)
- Removed environment variables
- Removed secrets
- Updated Traefik configuration
**Prompt**:
```
Remove the mvp-platform service from docker-compose and clean up all related configuration.
CONTEXT:
The platform service is being absorbed into the backend. The mvp-platform container will be removed, reducing from 6 to 5 containers.
TASKS:
1. UPDATE DOCKER-COMPOSE.YML:
File: /Users/egullickson/Documents/Technology/coding/motovaultpro/docker-compose.yml
Remove lines 184-227 (entire mvp-platform service definition).
This includes:
- Service: mvp-platform
- Build context: ./mvp-platform-services/vehicles
- Container name: mvp-platform
- All environment variables
- All volume mounts
- Network connections
- Health check
- Traefik labels
2. UPDATE BACKEND ENVIRONMENT:
File: docker-compose.yml (mvp-backend service)
Remove environment variable:
- PLATFORM_VEHICLES_API_URL: http://mvp-platform:8000
3. REMOVE FROM ENV FILES:
File: .env.development
Remove:
- PLATFORM_VEHICLES_API_URL=http://mvp-platform:8000
4. UPDATE BACKEND CONFIG:
File: config/app/production.yml
Remove any platform service references:
- platform_vehicles_api_url
- platform_api_key
5. DELETE SECRETS:
File: secrets/app/platform-vehicles-api-key.txt
Delete this file (no longer needed).
Update docker-compose.yml backend volumes:
Remove secret mount:
- ./secrets/app/platform-vehicles-api-key.txt:/run/secrets/platform-vehicles-api-key:ro
6. UPDATE TRAEFIK CONFIG:
File: config/traefik/middleware.yml or traefik.yml
Remove:
- Any router rules for /platform prefix
- Any platform service backends
- Platform health checks
7. UPDATE MAKEFILE:
File: Makefile
Remove or update:
- Any platform-specific commands
- Update logs command if it references mvp-platform
- Update rebuild if it specifically references platform
8. VERIFY NETWORK CONFIGURATION:
Check docker-compose.yml networks section:
- Ensure frontend, backend, database networks still defined
- Remove platform-specific networks if any
9. VERIFY VOLUME CONFIGURATION:
Check docker-compose.yml volumes section:
- Ensure mvp_postgres_data, mvp_redis_data still defined
- Remove platform-specific volumes if any
VERIFICATION:
- docker-compose.yml valid YAML (use yamllint or docker compose config)
- Only 5 services defined: mvp-traefik, mvp-frontend, mvp-backend, mvp-postgres, mvp-redis
- No references to "mvp-platform" in config files
- No references to "platform-vehicles-api"
- Secrets file removed
- docker compose config runs without errors
Return confirmation with list of modified files and line numbers.
```
**Success Criteria**:
- ✅ docker-compose.yml updated (5 services)
- ✅ Environment variables removed
- ✅ Secrets deleted
- ✅ Traefik config updated
- ✅ Valid YAML
**Estimated Time**: 1 hour
---
## AGENT 5: Integration & Testing
**Role**: Integrate new vehicle-data feature with vehicles feature and create comprehensive tests
**Subagent Type**: `general-purpose`
**Dependencies**: Agents 1, 2 complete
**Deliverables**:
- Vehicles feature updated to use vehicle-data feature
- Unit tests for vehicle-data feature
- Integration tests for full workflow
- All tests passing
**Prompt**:
```
Integrate the new vehicle-data feature with the vehicles feature and create comprehensive tests.
CONTEXT:
- Agent 1 created: backend/src/features/vehicle-data/
- Agent 2 removed: VIN decode and platform integration
- Now need to connect vehicles feature to vehicle-data feature
TASKS:
1. UPDATE VEHICLES SERVICE:
File: backend/src/features/vehicles/domain/vehicles.service.ts
Add dependency:
import { VehicleDataService } from '../../vehicle-data/domain/vehicle-data.service';
Constructor:
constructor(
private repository: VehiclesRepository,
private vehicleData: VehicleDataService // NEW
) {}
Update dropdown methods to use vehicleData:
- Replace platformIntegration.getMakes() → vehicleData.getMakes()
- Replace platformIntegration.getModels() → vehicleData.getModels()
- etc.
2. UPDATE VEHICLES CONTROLLER:
File: backend/src/features/vehicles/api/vehicles.controller.ts
Update dropdown route handlers to call vehicleData service.
3. UPDATE VEHICLES ROUTES:
File: backend/src/features/vehicles/api/vehicles.routes.ts
Ensure dropdown routes call updated controller methods.
4. CREATE UNIT TESTS - VEHICLE DATA:
File: backend/src/features/vehicle-data/tests/unit/vehicle-data.service.test.ts
Test:
- getYears() returns descending array
- getMakes(year) returns makes for year
- getModels(year, makeId) returns models
- Cache hits work correctly
- Cache misses query database
- Invalid parameters throw errors
Mock:
- Repository calls
- Redis calls
5. CREATE UNIT TESTS - REPOSITORY:
File: backend/src/features/vehicle-data/tests/unit/vehicle-data.repository.test.ts
Test:
- Each SQL query method
- Parameter binding
- Error handling
- Empty result sets
Mock:
- PostgreSQL pool
6. CREATE INTEGRATION TESTS:
File: backend/src/features/vehicle-data/tests/integration/vehicle-data.integration.test.ts
Test full workflow:
1. GET /api/vehicle-data/years → [2024, 2023, ...]
2. GET /api/vehicle-data/makes?year=2024 → [{id: 1, name: "Honda"}, ...]
3. GET /api/vehicle-data/models?year=2024&make_id=1 → [{id: 1, name: "Civic"}, ...]
4. GET /api/vehicle-data/trims?year=2024&model_id=1 → [{id: 1, name: "LX"}, ...]
5. GET /api/vehicle-data/engines?year=2024&trim_id=1 → [{id: 1, name: "2.0L I4"}, ...]
Test:
- Authentication required (401 without JWT)
- Invalid parameters return 400
- Caching works (second call faster)
- CORS headers present
7. UPDATE VEHICLES INTEGRATION TESTS:
File: backend/src/features/vehicles/tests/integration/vehicles.integration.test.ts
Update:
- Remove VIN decode scenarios
- Update create vehicle to include make/model/year
- Verify validation requires make/model/year
- Test dropdown endpoints still work
8. RUN ALL TESTS:
Execute:
- npm run test (all unit tests)
- npm run test:integration (all integration tests)
Fix any failures.
9. VERIFY TYPE SAFETY:
Execute:
- npm run type-check or npx tsc --noEmit
Fix any TypeScript errors.
10. RUN LINTER:
Execute:
- npm run lint
Fix any linting issues.
VERIFICATION:
- All unit tests passing
- All integration tests passing
- TypeScript compiles without errors
- Linter passes
- Vehicles feature successfully uses vehicle-data feature
- Dropdown APIs work end-to-end
- Test coverage >80% for new feature
Return test results summary and any issues found.
```
**Success Criteria**:
- ✅ Features integrated
- ✅ Unit tests complete
- ✅ Integration tests complete
- ✅ All tests passing
- ✅ Type-check passes
- ✅ Linter passes
**Estimated Time**: 2-3 hours
---
## AGENT 6: Documentation Updates
**Role**: Update all documentation to reflect 5-container architecture
**Subagent Type**: `general-purpose`
**Dependencies**: Agents 1, 2, 3, 4 complete
**Deliverables**:
- Updated architecture documentation
- Updated API documentation
- Updated feature documentation
- Migration notes created
**Prompt**:
```
Update all documentation to reflect the new 5-container architecture and removal of platform service.
CONTEXT:
- Platform service absorbed into backend as vehicle-data feature
- VIN decoding removed
- Architecture now 5 containers (was 6)
TASKS:
1. UPDATE ARCHITECTURE OVERVIEW:
File: docs/ARCHITECTURE-OVERVIEW.md
Changes:
- Update container count: 6 → 5
- Remove mvp-platform container from list
- Add vehicle-data as backend feature module
- Update architecture diagram (remove platform container)
- Add note: "VIN decoding removed - users manually select vehicle details"
2. UPDATE VEHICLES API DOCS:
File: docs/VEHICLES-API.md
Changes:
- Remove all platform service references
- Update API endpoints from /platform/* to /api/vehicle-data/*
- Remove VIN decode endpoint documentation
- Update dropdown endpoint documentation
- Remove platform reset instructions
- Update troubleshooting section
3. UPDATE DATABASE SCHEMA DOCS:
File: docs/DATABASE-SCHEMA.md
Changes:
- Clarify vehicles schema accessed by vehicle-data feature (backend module)
- Remove VIN decode function references (f_decode_vin)
- Add note: "vehicles schema managed by vehicle-data feature"
4. UPDATE ROOT README:
File: README.md
Changes:
- Line 1-3: Change "6 containers" to "5 containers"
- Remove mvp-platform from container list
- Update quick start section (5 containers expected)
5. UPDATE CLAUDE.MD:
File: CLAUDE.md
Changes:
- Line 94-95: Update architecture description to "5 containers: Traefik, Frontend, Backend, PostgreSQL, Redis"
- Update "Integrated Platform service" to "vehicle-data feature module"
- Remove references to separate platform service
6. UPDATE AI-INDEX.MD:
File: AI-INDEX.md
Changes:
- Update container count to 5
- Update service list
- Update any platform service references
7. CREATE VEHICLE-DATA FEATURE README:
File: backend/src/features/vehicle-data/README.md
Content:
```markdown
# Vehicle Data Feature
Provides hierarchical vehicle data (makes, models, trims, engines) for the vehicles feature.
## Purpose
Replaced the separate mvp-platform Python service. Now integrated as a backend feature module.
## Architecture
- Database: vehicles schema (separate from public schema)
- Caching: Redis with 6-hour TTL
- Authentication: JWT required on all endpoints
## API Endpoints
- GET /api/vehicle-data/years
- GET /api/vehicle-data/makes?year={year}
- GET /api/vehicle-data/models?year={year}&make_id={id}
- GET /api/vehicle-data/trims?year={year}&model_id={id}
- GET /api/vehicle-data/engines?year={year}&trim_id={id}
## Database Tables
vehicles.make, vehicles.model, vehicles.model_year, vehicles.trim, vehicles.engine, vehicles.trim_engine
## Caching Strategy
Redis keys: vehicle-data:makes:{year}, etc.
TTL: 6 hours
Graceful fallback if Redis unavailable
## Notes
- VIN decoding was removed (not part of this feature)
- Users manually select vehicle details from dropdowns
```
8. UPDATE VEHICLES FEATURE README:
File: backend/src/features/vehicles/README.md
Changes:
- Remove VIN decode documentation
- Remove platform integration references
- Update vehicle creation workflow: "Users manually select make/model/year from dropdowns provided by vehicle-data feature"
- Update dependencies: Add vehicle-data feature
9. CREATE MIGRATION NOTES:
File: docs/PLATFORM-INTEGRATION-MIGRATION.md
Content:
```markdown
# Platform Service Integration - Migration Notes
## Date
[Insert completion date]
## Summary
Integrated the separate mvp-platform Python service into the backend as a TypeScript feature module.
## Changes
### Architecture
- Before: 6 containers (Traefik, Frontend, Backend, PostgreSQL, Redis, Platform)
- After: 5 containers (Traefik, Frontend, Backend, PostgreSQL, Redis)
### Features Removed
- VIN decoding via NHTSA API
- VIN auto-population of vehicle details
- Separate platform container
### Features Added
- vehicle-data feature module in backend
- Manual vehicle selection workflow (dropdowns)
### Breaking Changes
- VIN decode API endpoint removed
- Vehicle creation now requires make/model/year in request
- Frontend updated to use dropdowns instead of VIN decode
### Technical Details
- Python FastAPI code converted to TypeScript/Fastify
- vehicles schema remains unchanged
- Redis caching maintained (6-hour TTL)
- API endpoints moved from /platform/* to /api/vehicle-data/*
## Rationale
Simplify architecture by reducing container count and unifying on Node.js/TypeScript stack.
## Migration Path
Single-phase cutover completed [date].
```
10. UPDATE DOCS README:
File: docs/README.md
Changes:
- Update feature list to include vehicle-data
- Update architecture summary (5 containers)
VERIFICATION:
- All references to "6 containers" changed to "5 containers"
- No references to mvp-platform container
- No references to VIN decode API
- vehicle-data feature documented
- Migration notes complete
- All markdown files valid (no broken links)
Return list of files updated with line numbers changed.
```
**Success Criteria**:
- ✅ All architecture docs updated
- ✅ API docs updated
- ✅ Feature READMEs updated
- ✅ Migration notes created
- ✅ No references to 6 containers
**Estimated Time**: 1-2 hours
---
## AGENT 7: Container Removal & Deployment
**Role**: Final cleanup, container removal, and deployment verification
**Subagent Type**: `general-purpose`
**Dependencies**: All other agents complete
**Deliverables**:
- Platform service directory archived
- Docker images cleaned
- Deployment verified
- 5 containers running
**Prompt**:
```
Perform final cleanup, remove platform service, and verify deployment.
CONTEXT:
All code changes complete. Ready for final cleanup and deployment.
TASKS:
1. ARCHIVE PLATFORM SERVICE:
Move platform service to archive (don't delete from git history):
mkdir -p /Users/egullickson/Documents/Technology/coding/motovaultpro/archive/platform-services/
mv /Users/egullickson/Documents/Technology/coding/motovaultpro/mvp-platform-services/vehicles/ /Users/egullickson/Documents/Technology/coding/motovaultpro/archive/platform-services/
Create archive README:
File: archive/platform-services/README.md
Content:
```markdown
# Archived Platform Services
## vehicles/
**Archived**: [date]
**Reason**: Integrated into backend as vehicle-data feature module
This Python FastAPI service was replaced by the TypeScript vehicle-data feature in backend/src/features/vehicle-data/.
For migration details, see: docs/PLATFORM-INTEGRATION-MIGRATION.md
```
2. VERIFY DOCKER COMPOSE:
Execute:
docker compose config
Verify:
- Valid YAML (no errors)
- Exactly 5 services defined
- No references to mvp-platform
3. STOP ALL CONTAINERS:
Execute:
docker compose down
Verify all containers stopped:
docker ps -a
4. CLEAN UP DOCKER IMAGES:
Remove old platform image:
docker image rm motovaultpro-mvp-platform 2>/dev/null || true
5. REBUILD BACKEND:
Execute:
docker compose build mvp-backend
Verify build succeeds without errors.
6. START ALL CONTAINERS:
Execute:
docker compose up -d
Verify 5 containers start:
docker ps
Expected:
- mvp-traefik
- mvp-frontend
- mvp-backend
- mvp-postgres
- mvp-redis
7. VERIFY HEALTH CHECKS:
Wait 60 seconds for startup.
Check health:
docker compose ps
All containers should show "healthy" or "running".
8. VERIFY DATABASE MIGRATIONS:
Check vehicles schema exists:
docker compose exec mvp-postgres psql -U postgres -d motovaultpro -c "\dn"
Should see "vehicles" schema.
Check tables exist:
docker compose exec mvp-postgres psql -U postgres -d motovaultpro -c "\dt vehicles.*"
Should see: make, model, model_year, trim, engine, trim_engine
9. TEST VEHICLE-DATA ENDPOINTS:
Execute (requires JWT token):
curl http://localhost/api/vehicle-data/years
Expected: [2024, 2023, ...]
Execute:
curl http://localhost/api/vehicle-data/makes?year=2024
Expected: {"makes": [{id: 1, name: "Honda"}, ...]}
10. TEST FRONTEND:
Open: http://localhost
Navigate to vehicles page.
Verify:
- Dropdowns load (years, makes, models)
- Can create vehicle by selecting from dropdowns
- No VIN decode button visible
- Vehicle creation works
11. MONITOR LOGS:
Execute:
docker compose logs -f mvp-backend
Watch for:
- No errors on startup
- Vehicle-data endpoints responding
- No calls to mvp-platform (should be gone)
12. VERIFY REDIS CACHING:
Execute:
docker compose exec mvp-redis redis-cli
Run:
KEYS vehicle-data:*
After making API calls, should see cached keys.
Run:
GET vehicle-data:makes:2024
Should see JSON data.
13. PERFORMANCE CHECK:
Test response times:
time curl http://localhost/api/vehicle-data/years
Should be <500ms after cache warm-up.
14. FINAL VERIFICATION CHECKLIST:
- [ ] 5 containers running (not 6)
- [ ] All health checks passing
- [ ] Vehicle-data API endpoints responding
- [ ] Redis caching working
- [ ] Frontend loads without errors
- [ ] Vehicle creation works
- [ ] No platform service references in logs
- [ ] No errors in docker logs
VERIFICATION:
Return:
- Output of: docker ps (should show 5 containers)
- Output of: curl http://localhost/api/vehicle-data/years
- Confirmation that frontend works
- Any errors encountered
- Performance metrics (response times)
If any issues found, provide rollback instructions.
```
**Success Criteria**:
- ✅ Platform service archived
- ✅ 5 containers running
- ✅ Health checks passing
- ✅ APIs responding
- ✅ Frontend working
- ✅ No errors in logs
**Estimated Time**: 1-2 hours
---
## Dependency Graph
```
Wave 1 (Parallel):
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Agent 1 │ │ Agent 2 │ │ Agent 3 │ │ Agent 4 │
│ Backend │ │ VIN Rem │ │ VIN Rem │ │Configuration │
│ Feature │ │ Backend │ │ Frontend │ │ Cleanup │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ │ │ │
└─────────┬───────┴─────────────────┴─────────────────┘
Wave 2 (Parallel): │
┌────────▼────────┐ ┌─────────────────┐
│ Agent 5 │ │ Agent 6 │
│ Integration │ │ Documentation │
│ & Testing │ │ Updates │
└────────┬────────┘ └────────┬────────┘
│ │
Wave 3: └──────────┬─────────┘
┌──────────▼────────┐
│ Agent 7 │
│ Container │
│ Removal & │
│ Deployment │
└───────────────────┘
```
---
## Execution Instructions
### Start Wave 1 (4 agents in parallel):
```bash
# Spawn all 4 agents simultaneously
/task agent1_prompt
/task agent2_prompt
/task agent3_prompt
/task agent4_prompt
```
### Wait for Wave 1 Completion
Monitor all 4 agents. When all report completion:
- Review deliverables
- Verify no conflicts
- Commit changes from Wave 1
### Start Wave 2 (2 agents in parallel):
```bash
# Spawn 2 agents simultaneously
/task agent5_prompt
/task agent6_prompt
```
### Wait for Wave 2 Completion
When both agents complete:
- Run all tests
- Review documentation
- Commit changes from Wave 2
### Start Wave 3 (1 agent):
```bash
# Spawn final agent
/task agent7_prompt
```
### Final Verification
When Agent 7 completes:
- Verify 5 containers running
- Test all functionality
- Create git tag: `v1.0-platform-integrated`
---
## Rollback Plan
If critical issues during deployment:
1. **Restore docker-compose.yml**:
```bash
git restore docker-compose.yml
```
2. **Restore platform service**:
```bash
mv archive/platform-services/vehicles/ mvp-platform-services/
```
3. **Rebuild containers**:
```bash
docker compose down
docker compose up -d
```
4. **Revert backend changes**:
```bash
git revert HEAD~[n] # Revert last n commits
```
5. **Rebuild backend**:
```bash
docker compose build mvp-backend
docker compose restart mvp-backend
```
---
## Success Metrics
- ✅ 5 containers running (down from 6)
- ✅ All automated tests passing
- ✅ Vehicle dropdown APIs <500ms response time
- ✅ Redis cache hit rate >80% after warm-up
- ✅ Zero errors in logs after 1 hour
- ✅ Frontend vehicle creation works on mobile + desktop
- ✅ All documentation updated
- ✅ TypeScript compiles without warnings
- ✅ Linter passes
---
## Estimated Timeline
**Total**: 6-8 hours with parallel execution
| Wave | Duration | Agents |
|------|----------|--------|
| Wave 1 | 3-4 hours | 4 parallel |
| Wave 2 | 2-3 hours | 2 parallel |
| Wave 3 | 1-2 hours | 1 sequential |
**Sequential Execution**: 12-16 hours
**Parallel Execution**: 6-8 hours
**Time Saved**: 50%
---
## Notes
- Each agent is independent in Wave 1 (no conflicts expected)
- Wave 2 depends on Wave 1 code changes
- Wave 3 is deployment only (must be last)
- Use feature branches for each wave if needed
- Test after each wave before proceeding
- Commit after each wave for easy rollback
---
## Agent Communication Protocol
Agents should report:
1. **Start**: "Agent [N] starting [task]"
2. **Progress**: Regular updates every 30 minutes
3. **Blockers**: Immediate report if stuck
4. **Completion**: "Agent [N] complete - [deliverables]"
5. **Handoff**: Files created/modified for next wave
Coordinator (you) should:
- Monitor all agents in parallel
- Resolve conflicts between agents
- Gate Wave 2 until Wave 1 100% complete
- Gate Wave 3 until Wave 2 100% complete
- Make final deployment decision