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
8.1 KiB
TASK-010: Critical Bug - Project Creation Fails Due to Incomplete JSON Structure
Status: ✅ COMPLETED
Priority: URGENT (P0 - Blocker)
Complexity: Medium
Estimated Effort: 1 day
Actual Effort: ~1 hour
Completed: January 9, 2026
Problem Statement
Users cannot create new projects - a critical blocker that has occurred repeatedly despite multiple fix attempts. The issue manifests with the error:
TypeError: Cannot read properties of undefined (reading 'comments')
at NodeGraphModel.fromJSON (NodeGraphModel.ts:57:1)
at ComponentModel.fromJSON (componentmodel.ts:44:1)
at ProjectModel.fromJSON (projectmodel.ts:165:1)
Impact
- Severity: P0 - Blocks all new users
- Affected Users: Anyone trying to create a new project
- Workaround: None available
- User Frustration: HIGH ("ça commence à être vraiment agaçant!")
History of Failed Attempts
Attempt 1: LocalTemplateProvider with relative paths (January 8, 2026)
Issue: Path resolution failed with __dirname in webpack bundles
Error: Hello World template not found at: ./project-examples/version 1.1.0/template-project
Attempt 2: LocalTemplateProvider with process.cwd() (January 8, 2026)
Issue: process.cwd() pointed to wrong directory
Error: Hello World template not found at: /Users/tw/dev/OpenNoodl/OpenNoodl/packages/noodl-editor/project-examples/...
Attempt 3: Programmatic project creation (January 8, 2026)
Issue: Incomplete JSON structure missing required fields
const minimalProject = {
name: name,
components: [
{
name: 'App',
ports: [],
visual: true,
visualStateTransitions: [],
nodes: [
/* ... */
]
}
],
settings: {},
metadata: {
/* ... */
}
};
Error: Cannot read properties of undefined (reading 'comments')
This indicates the structure is missing critical fields expected by NodeGraphModel.fromJSON().
Root Causes
-
Incomplete understanding of project.json schema
- No formal schema documentation
- Required fields not documented
- Nested structure requirements unclear
-
Missing graph/node metadata
commentsfield expected but not provided- Possibly other required fields:
connections,roots,graph, etc.
-
No validation before project creation
- Projects created without structure validation
- Errors only caught during loading
- No helpful error messages about missing fields
Required Investigation
1. Analyze Complete Project Structure
- Find and analyze a working project.json
- Document ALL required fields at each level
- Identify which fields are truly required vs optional
- Document field types and default values
2. Analyze NodeGraphModel.fromJSON
- Find the actual fromJSON implementation
- Document what fields it expects
- Understand the
commentsfield requirement - Check for other hidden dependencies
3. Analyze ComponentModel.fromJSON
- Document the component structure requirements
- Understand visual vs non-visual components
- Document the graph/nodes relationship
Proposed Solution
Option A: Use Existing Template (RECOMMENDED)
Instead of creating from scratch, use the actual template project:
// 1. Bundle template-project as a static asset
// 2. Copy it properly during build
// 3. Reference it correctly at runtime
const templateAsset = require('../../../assets/templates/hello-world/project.json');
const project = JSON.parse(JSON.stringify(templateAsset)); // Deep clone
project.name = projectName;
// Write to disk
Pros:
- Uses validated structure
- Guaranteed to work
- Easy to maintain
- Can add more templates later
Cons:
- Requires webpack configuration
- Larger bundle size
Option B: Complete Programmatic Structure
Document and implement the full structure:
const completeProject = {
name: name,
components: [
{
name: 'App',
ports: [],
visual: true,
visualStateTransitions: [],
graph: {
roots: [
/* root node ID */
],
comments: [], // REQUIRED!
connections: []
},
nodes: [
{
id: guid(),
type: 'Group',
x: 0,
y: 0,
parameters: {},
ports: [],
children: [
/* ... */
]
}
]
}
],
settings: {},
metadata: {
title: name,
description: 'A new Noodl project'
},
// Other potentially required fields
version: '1.1.0',
variants: []
// ... etc
};
Pros:
- No external dependencies
- Smaller bundle
- Full control
Cons:
- Complex to maintain
- Easy to miss required fields
- Will break with schema changes
Implementation Plan
Phase 1: Investigation (2-3 hours)
- Find a working project.json file
- Document its complete structure
- Find NodeGraphModel/ComponentModel fromJSON implementations
- Document all required fields
- Create schema documentation
Phase 2: Quick Fix (1 hour)
- Implement Option A (use template as asset)
- Configure webpack to bundle template
- Update LocalProjectsModel to use bundled template
- Test project creation
- Verify project opens correctly
Phase 3: Validation (1 hour)
- Add project JSON schema validation
- Validate before writing to disk
- Provide helpful error messages
- Add unit tests for project creation
Phase 4: Documentation (1 hour)
- Document project.json schema
- Add examples of minimal valid projects
- Document how to create custom templates
- Update LEARNINGS.md with findings
Files to Modify
Investigation
- Find:
NodeGraphModel(likely inpackages/noodl-editor/src/editor/src/models/) - Find:
ComponentModel(same location) - Find: Valid project.json (check existing projects or tests)
Implementation
packages/noodl-editor/src/editor/src/utils/LocalProjectsModel.ts- Fix project creation logic
packages/noodl-editor/webpackconfigs/webpack.renderer.dev.js- Add template asset bundling if needed
packages/noodl-editor/src/editor/src/models/projectmodel.ts- Add validation logic
Documentation
dev-docs/reference/PROJECT-JSON-SCHEMA.md(NEW)dev-docs/reference/LEARNINGS.mddev-docs/reference/COMMON-ISSUES.md
Testing Strategy
Manual Tests
- Create new project from dashboard
- Verify project opens without errors
- Verify "App" component is visible
- Verify nodes are editable
- Verify project saves correctly
- Close and reopen project
Regression Tests
- Test with existing projects
- Test with template-based projects
- Test empty project creation
- Test project import
Unit Tests
- Test project JSON generation
- Test JSON validation
- Test error handling
Success Criteria
- New users can create projects successfully
- No console errors during project creation
- Projects load correctly after creation
- All components are visible in the editor
- Projects can be saved and reopened
- Solution works in both dev and production
- Comprehensive documentation exists
- Tests prevent regression
Related Issues
- Original bug report: Console error "Cannot read properties of undefined (reading 'comments')"
- Related to TASK-009-template-system-refactoring (future enhancement)
- Impacts user onboarding and first-time experience
Post-Fix Actions
- Update TASK-009: Reference this fix as prerequisite
- Add to LEARNINGS.md: Document the project.json schema learnings
- Add to COMMON-ISSUES.md: Document this problem and solution
- Create schema documentation: Formal PROJECT-JSON-SCHEMA.md
- Add validation: Prevent future similar issues
Notes
- This is the THIRD attempt to fix this issue
- Problem is recurring due to lack of understanding of required schema
- Proper investigation and documentation needed this time
- Must validate before considering complete
Created: January 9, 2026
Last Updated: January 9, 2026
Assignee: TBD
Blocked By: None
Blocks: User onboarding, TASK-009