Phase 5 - BYOB Backend (TASK-007A/B): - LocalSQL Adapter with full CloudStore API compatibility - QueryBuilder translates Parse-style queries to SQL - SchemaManager with PostgreSQL/Supabase export - LocalBackendServer with REST endpoints - BackendManager with IPC handlers for Electron - In-memory fallback when better-sqlite3 unavailable Phase 3 - GitHub Panel (GIT-004): - Issues tab with list/detail views - Pull Requests tab with list/detail views - GitHub API client with OAuth support - Repository info hook integration Phase 3 - Editor UX Bugfixes (TASK-013): - Legacy runtime detection banners - Read-only enforcement for legacy projects - Code editor modal close improvements - Property panel stuck state fix - Blockly node deletion and UI polish Phase 11 - Cloud Functions Planning: - Architecture documentation for workflow automation - Execution history storage schema design - Canvas overlay concept for debugging Docs: Updated LEARNINGS.md and COMMON-ISSUES.md
TASK-001C: Restore Legacy Runtime Detection & Migration in New Launcher
Overview
During the migration to the new React 19 launcher (packages/noodl-core-ui/src/preview/launcher/), we lost all visual indicators and migration controls for legacy React 17 projects. This task restores that critical functionality.
Problem Statement
When we rebuilt the launcher in Phase 3 TASK-001, we inadvertently removed:
- Visual indicators - No warning badges showing which projects are React 17
- Migration controls - No "Migrate Project" or "View Read-Only" buttons
- Read-only mode UX - Projects open as "read-only" but provide no UI explanation or migration path
- Detection flow - No interception when opening legacy projects
Current State Issues
Issue 1: Silent Legacy Projects Legacy projects appear identical to modern projects in the launcher. Users have no way to know which projects need migration until they try to open them and encounter compatibility issues.
Issue 2: Missing Migration Path
Even though the MigrationWizard component exists and works perfectly, users have no way to access it from the new launcher.
Issue 3: Read-Only Mode is Invisible
When a project is opened in read-only mode (NodeGraphEditor.setReadOnly(true)), editing is prevented but there's:
- No banner explaining WHY it's read-only
- No button to migrate the project
- No visual indication that it's in a special mode
Issue 4: Incomplete Integration
The old launcher (projectsview.ts) had full integration with runtime detection, but the new launcher doesn't use any of it despite LocalProjectsModel having all the necessary methods.
What Already Works (Don't Need to Build)
- ✅ Runtime Detection:
LocalProjectsModel.detectProjectRuntime()works perfectly - ✅ Persistent Cache: Runtime info survives restarts via electron-store
- ✅ Migration Wizard:
MigrationWizard.tsxis fully implemented and tested - ✅ Read-Only Mode:
NodeGraphEditor.setReadOnly()prevents editing - ✅ Project Scanner:
detectRuntimeVersion()accurately identifies React 17 projects
Solution Overview
Restore legacy project detection to the new launcher by:
- Adding visual indicators to
LauncherProjectCardfor legacy projects - Exposing migration controls with "Migrate" and "View Read-Only" buttons
- Implementing EditorBanner to show read-only status and offer migration
- Integrating detection into the project opening flow
Architecture
┌─────────────────────────────────────────────────────────────┐
│ Launcher │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ LauncherProjectCard (Modified) │ │
│ │ ┌────────────┐ ┌──────────────┐ │ │
│ │ │ ⚠️ Legacy │ │ React 17 │ Show if legacy │ │
│ │ │ Badge │ │ Warning Bar │ │ │
│ │ └────────────┘ └──────────────┘ │ │
│ │ │ │
│ │ Actions (if legacy): │ │
│ │ [Migrate Project] [View Read-Only] [Learn More] │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
│ Click "Migrate Project"
▼
┌─────────────────────────────────────────────────────────────┐
│ MigrationWizard │
│ (Already exists - just wire it up) │
└─────────────────────────────────────────────────────────────┘
│
│ Click "View Read-Only"
▼
┌─────────────────────────────────────────────────────────────┐
│ Editor (Read-Only Mode) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ EditorBanner (NEW) │ │
│ │ ⚠️ This project uses React 17 and is read-only. │ │
│ │ [Migrate Now] [Dismiss] │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ [Canvas - editing disabled] │
│ [Panels - viewing only] │
└─────────────────────────────────────────────────────────────┘
Subtasks
Subtask A: Add Legacy Indicators to LauncherProjectCard ✅ COMPLETE
Status: ✅ COMPLETED - January 13, 2026
Add visual indicators to project cards showing legacy status with migration options.
What Was Implemented:
- Legacy warning badge on project cards
- Yellow warning bar with migration message
- "Migrate Project" and "Open Read-Only" action buttons
- Runtime version markers for new projects
Documentation: See SUBTASK-A-D-COMPLETE.md
Subtask B: Wire Up Migration Controls
Estimated Time: 4-5 hours
Connect migration buttons to the existing MigrationWizard and implement read-only project opening.
Files to modify:
packages/noodl-editor/src/editor/src/pages/ProjectsPage/ProjectsPage.tsxpackages/noodl-core-ui/src/preview/launcher/Launcher/LauncherContext.tsxpackages/noodl-core-ui/src/preview/launcher/Launcher/Launcher.tsx
Files to create:
packages/noodl-core-ui/src/preview/launcher/Launcher/components/LegacyProjectWarning/LegacyProjectWarning.tsxpackages/noodl-core-ui/src/preview/launcher/Launcher/components/LegacyProjectWarning/LegacyProjectWarning.module.scss
Implementation: See SUBTASK-B-migration-controls.md
Subtask C: Implement EditorBanner for Read-Only Mode
Estimated Time: 3-4 hours
Create a persistent banner in the editor that explains read-only mode and offers migration.
Files to create:
packages/noodl-editor/src/editor/src/views/EditorBanner/EditorBanner.tsxpackages/noodl-editor/src/editor/src/views/EditorBanner/EditorBanner.module.scsspackages/noodl-editor/src/editor/src/views/EditorBanner/index.ts
Files to modify:
packages/noodl-editor/src/editor/src/views/nodegrapheditor.tspackages/noodl-editor/src/editor/src/pages/EditorPage.tsx
Implementation: See SUBTASK-C-editor-banner.md
Subtask D: Add Legacy Detection to Project Opening Flow
Estimated Time: 2-3 hours
Intercept legacy projects when opening and show options before proceeding.
Files to modify:
packages/noodl-editor/src/editor/src/utils/LocalProjectsModel.tspackages/noodl-editor/src/editor/src/views/projectsview.ts(if still used)
Files to create:
packages/noodl-core-ui/src/components/dialogs/LegacyProjectDialog/LegacyProjectDialog.tsxpackages/noodl-core-ui/src/components/dialogs/LegacyProjectDialog/LegacyProjectDialog.module.scss
Implementation: See SUBTASK-D-opening-flow.md
Implementation Order
Complete subtasks sequentially:
- Subtask A - Visual foundation (cards show legacy status)
- Subtask B - Connect migration (buttons work)
- Subtask C - Read-only UX (banner shows in editor)
- Subtask D - Opening flow (intercept before opening)
Each subtask can be tested independently and provides immediate value.
Success Criteria
- Legacy projects show warning badge in launcher
- Legacy projects display "React 17" warning bar
- "Migrate Project" button opens MigrationWizard correctly
- "View Read-Only" button opens project in read-only mode
- Read-only mode shows EditorBanner with migration option
- EditorBanner "Migrate Now" launches migration wizard
- Opening a legacy project shows detection dialog with options
- Runtime detection cache persists across editor restarts
- All existing functionality continues to work
- No regressions in modern (React 19) project opening
Testing Strategy
Unit Tests
- Runtime detection correctly identifies React 17 projects
- Cache loading/saving works correctly
- Legacy badge renders conditionally
Integration Tests
- Clicking "Migrate" opens wizard with correct project path
- Clicking "View Read-Only" opens project with editing disabled
- EditorBanner "Migrate Now" works from within editor
- Migration completion refreshes launcher with updated projects
Manual Testing
- Test with real React 17 project (check
project-examples/version 1.1.0/) - Test migration flow end-to-end
- Test read-only mode restrictions (canvas, properties, etc.)
- Test with projects that don't have explicit version markers
Dependencies
- Phase 2 TASK-004 (Runtime Migration System) - ✅ Complete
- Phase 3 TASK-001 (Dashboard UX Foundation) - ✅ Complete
- Phase 3 TASK-001B (Launcher Fixes) - ✅ Complete
Blocks
None (this is a restoration of lost functionality)
Related Tasks
- TASK-004 (Runtime Migration System) - Provides backend infrastructure
- TASK-001 (Dashboard UX Foundation) - Created new launcher
- TASK-001B (Launcher Fixes) - Improved launcher functionality
Notes
Why This Was Lost
When we rebuilt the launcher as a React component in noodl-core-ui, we focused on modern UI/UX and forgot to port over the legacy project handling from the old jQuery-based launcher.
Why This Is Important
Users opening old Noodl projects will be confused when:
- Projects fail to open without explanation
- Projects open but behave strangely (React 17 vs 19 incompatibilities)
- No migration path is offered
This creates a poor first impression and blocks users from upgrading their projects.
Design Considerations
- Non-Intrusive: Warning badges should be informative but not scary
- Clear Path Forward: Always offer migration as the primary action
- Safe Exploration: Read-only mode lets users inspect projects safely
- Persistent Indicators: Cache runtime detection so it doesn't slow down launcher
Created: January 2026 Status: 📋 Draft - Ready for Implementation