Files
Tara West a104a3a8d0 fix(editor): resolve project creation bug - missing graph structure
TASK-010: Fixed critical P0 bug preventing new project creation

Problem:
- Programmatic project.json generation had incorrect structure
- Missing 'graph' object wrapper
- Missing 'comments' and 'connections' arrays
- Error: Cannot read properties of undefined (reading 'comments')

Solution:
- Corrected project.json structure with proper graph object
- Added component id field
- Included all required arrays (roots, connections, comments)
- Added debug logging for better error tracking

Impact:
- New users can now create projects successfully
- Unblocks user onboarding
- No more cryptic error messages

Documentation:
- Added comprehensive entry to LEARNINGS.md
- Created detailed CHANGELOG.md
- Updated README.md with completion status
2026-01-09 10:22:48 +01:00

5.4 KiB

TASK-010: Project Creation Bug Fix - CHANGELOG

Status: COMPLETED
Date: January 9, 2026
Priority: P0 - Critical Blocker


Summary

Fixed critical bug preventing new project creation. The issue was an incorrect project.json structure in programmatic project generation - missing the required graph object wrapper and the comments array, causing TypeError: Cannot read properties of undefined (reading 'comments').


Changes Made

1. Fixed Project Structure in LocalProjectsModel.ts

File: packages/noodl-editor/src/editor/src/utils/LocalProjectsModel.ts

Problem: The programmatically generated project.json had an incorrect structure:

  • Used nodes array directly in component (should be graph.roots)
  • Missing graph object wrapper
  • Missing comments array (causing the error)
  • Missing connections array
  • Missing component id field

Solution: Corrected the structure to match the schema:

// BEFORE (INCORRECT)
{
  name: 'App',
  ports: [],
  visual: true,
  visualStateTransitions: [],
  nodes: [...]  // ❌ Wrong location
}

// AFTER (CORRECT)
{
  name: 'App',
  id: guid(),      // ✅ Added
  graph: {         // ✅ Added wrapper
    roots: [...],  // ✅ Renamed from 'nodes'
    connections: [], // ✅ Added
    comments: []   // ✅ Added (was causing error)
  },
  metadata: {}     // ✅ Added
}

Lines Modified: 288-321

2. Added Debug Logging

Added console logging for better debugging:

  • Success message: "Project created successfully: {name}"
  • Error messages for failure cases

Root Cause Analysis

The Error Chain

ProjectModel.fromJSON(json)
  → ComponentModel.fromJSON(json.components[i])
    → NodeGraphModel.fromJSON(json.graph)  // ← json.graph was undefined!
      → accesses json.comments             // ← BOOM: Cannot read properties of undefined

Why Previous Attempts Failed

  1. Attempt 1 (Path resolution with __dirname): Webpack bundling issue
  2. Attempt 2 (Path resolution with process.cwd()): Wrong directory
  3. Attempt 3 (Programmatic creation): Incomplete structure (this attempt)

The Final Solution

Understanding that the schema requires:

  • Component needs id field
  • Component needs graph object (not nodes array)
  • graph must contain roots, connections, and comments arrays

Testing

Manual Testing Performed

  1. Created new project from dashboard
  2. Project opened without errors
  3. Console showed: "Project created successfully: alloha"
  4. Component "App" visible in editor
  5. Text node with "Hello World!" present
  6. Project can be saved and reopened

Success Criteria Met

  • New users can create projects successfully
  • No console errors during project creation
  • Projects load correctly after creation
  • All components are visible in the editor
  • Error message resolved: "Cannot read properties of undefined (reading 'comments')"

Files Modified

  1. packages/noodl-editor/src/editor/src/utils/LocalProjectsModel.ts
    • Lines 288-321: Fixed project.json structure
    • Lines 324-345: Added better error logging

Documentation Updates

  1. dev-docs/reference/LEARNINGS.md
    • Added comprehensive entry documenting the project.json structure
    • Included prevention checklist for future programmatic project creation
    • Documented the error chain and debugging journey

Impact

Before: P0 blocker - New users could not create projects at all
After: Project creation works correctly

User Experience:

  • No more cryptic error messages
  • Smooth onboarding for new users
  • Reliable project creation

  • Unblocks user onboarding
  • Prerequisite for TASK-009 (template system refactoring)
  • Fixes recurring issue that had three previous failed attempts

Notes for Future Developers

Project.json Schema Requirements

When creating projects programmatically, always include:

{
  name: string,
  components: [{
    name: string,
    id: string,              // Required
    graph: {                 // Required wrapper
      roots: [...],          // Not "nodes"
      connections: [],       // Required (can be empty)
      comments: []          // Required (can be empty)
    },
    metadata: {}            // Required (can be empty)
  }],
  settings: {},             // Required
  metadata: {               // Project metadata
    title: string,
    description: string
  }
}

Prevention Checklist

Before creating a project programmatically:

  • Component has id field
  • Component has graph object (not nodes)
  • graph.roots array exists
  • graph.connections array exists
  • graph.comments array exists
  • Component has metadata object
  • Project has settings object
  • Project has metadata with title/description

Lessons Learned

  1. Schema documentation is critical: The lack of formal project.json schema documentation made this harder to debug
  2. Error messages can be misleading: "reading 'comments'" suggested comments were the problem, not the missing graph object
  3. Test end-to-end: Don't just test file writing - test loading the created project
  4. Use real templates as reference: The truncated template file wasn't helpful; needed to examine actual working projects

Completed by: Cline (AI Assistant)
Reviewed by: Richard (User)
Date Completed: January 9, 2026