mirror of
https://github.com/The-Low-Code-Foundation/OpenNoodl.git
synced 2026-01-11 14:52:55 +01:00
9.0 KiB
9.0 KiB
TASK-002 Checklist: Legacy Project Migration
Prerequisites
- Read README.md completely
- Understand the scope and success criteria
- Ensure TASK-001 (Dependency Updates) is complete or in progress
- Create branch:
git checkout -b task/002-legacy-project-migration - Verify build works:
npm run build:editor
Phase 1: Research & Discovery
Project Format Analysis
- Locate sample Noodl projects (old versions)
- Document the folder structure of a
.noodlproject - Identify all JSON file types within projects
- Document schema for each file type
- Check for existing version metadata in project files
- Update NOTES.md with findings
Node Definition Analysis
- Catalog all node types in
packages/noodl-runtime/src/nodes/ - Document input/output schemas for nodes
- Identify any deprecated node types
- Note any node API changes over versions
- Update NOTES.md with findings
Breaking Changes Audit
- Review TASK-001 dependency update list
- For each updated dependency, identify breaking changes:
- React 17 → 19 impacts
- react-instantsearch changes
- Other dependency changes
- Map breaking changes to project file impact
- Create comprehensive migration requirements list
- Update NOTES.md with findings
Phase 2: Version Detection System
Design
- Define
ProjectVersioninterface - Define version detection strategy
- Document how to infer version from project structure
Implementation
- Create
packages/noodl-editor/src/editor/src/utils/migration/folder - Create
version-detect.tsmodule - Implement explicit version metadata check
- Implement file structure inference
- Implement node usage pattern inference
- Add fallback for "unknown/legacy" projects
Testing
- Write unit tests for version detection
- Test with sample projects from different versions
- Document in CHANGELOG.md
Phase 3: Migration Engine Core
Design
- Define
Migrationinterface - Define
MigrationResultinterface - Design migration path calculation algorithm
- Document migration registration pattern
Implementation
- Create
migration-engine.tsmodule - Implement
MigrationEngineclass - Implement
registerMigration()method - Implement
getMigrationPath()method - Implement
migrateProject()method - Implement rollback capability
- Add progress reporting hooks
Testing
- Write unit tests for migration engine
- Test migration path calculation
- Test rollback functionality
- Document in CHANGELOG.md
Phase 4: Individual Migrations
Migration: React 17 → 19 Patterns
- Identify all React-specific patterns in project files
- Create
v17-to-v19-react.tsmigration - Write migration transform logic
- Write validation logic
- Write unit tests
Migration: Node Format Changes (if needed)
- Identify node format changes between versions
- Create
node-format-update.tsmigration - Write migration transform logic
- Write validation logic
- Write unit tests
Migration: Connection Schema (if needed)
- Identify connection schema changes
- Create
connection-schema.tsmigration - Write migration transform logic
- Write validation logic
- Write unit tests
Additional Migrations (as discovered)
- Document each new migration needed
- Implement migrations as needed
- Write tests for each
Phase 5: Backup System
Implementation
- Create
backup.tsutility module - Implement
backupProject()function - Implement
restoreFromBackup()function - Implement backup verification (checksums)
- Implement backup cleanup/rotation
Testing
- Test backup creates valid copy
- Test restore works correctly
- Test with large projects
- Document in CHANGELOG.md
Phase 6: CLI Tool
Package Setup
- Create
packages/noodl-cli/directory structure - Create
package.jsonwith dependencies - Create
tsconfig.json - Set up build scripts
- Add to root workspace configuration
Commands Implementation
- Implement
validatecommand- Parse project path argument
- Run version detection
- Report findings
- Return exit code
- Implement
upgradecommand- Parse arguments (project path, options)
- Create backup
- Run migrations
- Report results
- Implement
batch-upgradecommand- Parse folder argument
- Discover all projects
- Process each project
- Generate summary report
- Implement
reportcommand- Analyze project
- Generate markdown report
- Output to stdout
CLI UX
- Add help messages for all commands
- Add
--dry-runoption - Add
--verboseoption - Add
--no-backupoption (with warning) - Add progress indicators
- Add colored output
Testing
- Write integration tests for CLI
- Test each command
- Test error handling
- Document in CHANGELOG.md
Documentation
- Create CLI README.md
- Document all commands and options
- Add usage examples
Phase 7: Editor Integration
Migration Dialog UI
- Design migration dialog mockup
- Create
MigrationDialog/component folder - Implement
MigrationDialog.tsx - Implement
MigrationDialog.module.scss - Add progress indicator
- Add backup confirmation
- Add cancel option
Project Loading Integration
- Locate project loading code (likely
projectmodel.js) - Add version detection on project open
- Add migration check logic
- Trigger migration dialog when needed
- Handle user choices (migrate/cancel)
- Show progress during migration
- Handle migration errors gracefully
Testing
- Test opening legacy project triggers dialog
- Test migration completes successfully
- Test cancellation works
- Test error handling
- Manual testing scenarios
- Document in CHANGELOG.md
Phase 8: Validation & Testing
Test Project Corpus
- Collect/create minimal test project
- Collect/create complex test project
- Collect/create project with deprecated nodes
- Collect/create project with custom JavaScript
- Collect/create project from each known version
- Document all test projects
Integration Testing
- Run CLI migration on all test projects
- Verify each migrated project opens correctly
- Verify node graphs render correctly
- Verify connections work correctly
- Verify preview runs correctly
- Document any failures
Edge Cases
- Test with corrupted project files
- Test with missing files
- Test with extremely large projects
- Test with read-only filesystem
- Test interrupted migration (power loss scenario)
- Document findings
Phase 9: Documentation
User Documentation
- Create migration guide for users
- Document what changes during migration
- Document how to manually fix issues
- Add FAQ section
- Add troubleshooting guide
Developer Documentation
- Document migration engine architecture
- Document how to add new migrations
- Document testing procedures
- Update NOTES.md with learnings
Update Existing Docs
- Update main README if needed
- Update dev-docs if needed
- Link to this task from relevant docs
Phase 10: Completion
Final Validation
- All success criteria from README.md met
- All unit tests pass
- All integration tests pass
- Manual testing complete
- No TypeScript errors:
npx tsc --noEmit - No console warnings/errors
Cleanup
- Remove any debug code
- Remove any TODO comments (or convert to issues)
- Clean up NOTES.md
- Finalize CHANGELOG.md
Submission
- Self-review all changes
- Create pull request
- Update task status
- Notify stakeholders
Quick Reference
Key Files
packages/noodl-cli/ # CLI tool package
packages/noodl-editor/src/editor/src/utils/migration/
├── version-detect.ts # Version detection
├── migration-engine.ts # Core engine
├── backup.ts # Backup utilities
└── migrations/ # Individual migrations
├── index.ts
├── v17-to-v19-react.ts
└── ...
packages/noodl-editor/src/editor/src/views/MigrationDialog/
├── MigrationDialog.tsx
└── MigrationDialog.module.scss
Useful Commands
# Build editor
npm run build:editor
# Run tests
npm run test:editor
# Type check
npx tsc --noEmit
# Search for patterns
grep -r "pattern" packages/ --include="*.ts"
# Run CLI locally
node packages/noodl-cli/bin/noodl-migrate.js validate ./test-project
Emergency Rollback
If migration breaks something:
- Restore from backup folder
- Disable migration in project loading code
- Document the issue in NOTES.md