mirror of
https://github.com/The-Low-Code-Foundation/OpenNoodl.git
synced 2026-01-12 07:12:54 +01:00
269 lines
9.7 KiB
Markdown
269 lines
9.7 KiB
Markdown
# VIEW-003: Trigger Chain Debugger - CHANGELOG
|
|
|
|
## Status: ⚠️ UNSTABLE - Known Issues (See KNOWN-ISSUES.md)
|
|
|
|
**Started:** January 3, 2026
|
|
**Completed:** January 3, 2026 (initial implementation)
|
|
**Known Issues Identified:** January 4, 2026
|
|
**Scope:** Option B - Phases 1-3 (Core recording + timeline UI)
|
|
|
|
**⚠️ CRITICAL:** This feature has known bugs with event deduplication and filtering. See `KNOWN-ISSUES.md` for details and investigation plan. Feature is marked experimental and may capture inaccurate event data.
|
|
|
|
---
|
|
|
|
## Implementation Plan
|
|
|
|
### Phase 1: Recording Infrastructure (2 days)
|
|
|
|
- [x] 1A: Document existing debug event system ✅
|
|
- [x] 1B: Create TriggerChainRecorder (editor-side) ✅
|
|
- [ ] 1C: Add recording control commands
|
|
|
|
### Phase 2: Chain Builder (1 day)
|
|
|
|
- [x] 2A: Define chain data model types ✅
|
|
- [x] 2B: Implement chain builder utilities ✅
|
|
|
|
### Phase 3: Basic UI (1.5 days)
|
|
|
|
- [x] 3A: Create panel structure and files ✅
|
|
- [x] 3B: Build core UI components ✅
|
|
- [x] 3C: Integrate panel into editor ✅
|
|
|
|
### Deferred (After Phase 3)
|
|
|
|
- ⏸️ Phase 5: Error & Race detection
|
|
- ⏸️ Phase 6: Static analysis mode
|
|
|
|
---
|
|
|
|
## Progress Log
|
|
|
|
### Session 1: January 3, 2026
|
|
|
|
**Completed Phase 1A:** Document existing debug infrastructure ✅
|
|
|
|
Created `dev-docs/reference/DEBUG-INFRASTRUCTURE.md` documenting:
|
|
|
|
- DebugInspector singleton and InspectorsModel
|
|
- Event flow from runtime → ViewerConnection → editor
|
|
- Connection pulse animation system
|
|
- Inspector value tracking
|
|
- What we can leverage vs what we need to build
|
|
|
|
**Key findings:**
|
|
|
|
- Connection pulse events already tell us when nodes fire
|
|
- Inspector values give us data flowing through connections
|
|
- ViewerConnection bridge already exists runtime↔editor
|
|
- Need to add: causal tracking, component boundaries, event persistence
|
|
|
|
**Completed Phase 1B:** Build TriggerChainRecorder ✅
|
|
|
|
Created the complete recorder infrastructure:
|
|
|
|
1. **Types** (`utils/triggerChain/types.ts`)
|
|
|
|
- `TriggerEvent` interface with all event properties
|
|
- `TriggerEventType` union type
|
|
- `RecorderState` and `RecorderOptions` interfaces
|
|
|
|
2. **Recorder** (`utils/triggerChain/TriggerChainRecorder.ts`)
|
|
|
|
- Singleton class with start/stop/reset methods
|
|
- Event capture with max limit (1000 events default)
|
|
- Auto-stop timer support
|
|
- Helper method `captureConnectionPulse()` for bridging
|
|
|
|
3. **Module exports** (`utils/triggerChain/index.ts`)
|
|
|
|
- Clean public API
|
|
|
|
4. **ViewerConnection integration**
|
|
- Hooked into `connectiondebugpulse` command handler
|
|
- Captures events when recorder is active
|
|
- Leverages existing debug infrastructure
|
|
|
|
**Key achievement:** Recorder is now capturing events from the runtime! 🎉
|
|
|
|
**Completed Phase 2A & 2B:** Build Chain Builder ✅
|
|
|
|
Created the complete chain builder system:
|
|
|
|
1. **Chain Types** (`utils/triggerChain/chainTypes.ts`)
|
|
|
|
- `TriggerChain` interface with full chain data model
|
|
- `TriggerChainNode` for tree representation
|
|
- `EventTiming` for temporal analysis
|
|
- `ChainStatistics` for event aggregation
|
|
|
|
2. **Chain Builder** (`utils/triggerChain/chainBuilder.ts`)
|
|
|
|
- `buildChainFromEvents()` - Main chain construction from raw events
|
|
- `groupByComponent()` - Group events by component
|
|
- `buildTree()` - Build hierarchical tree structure
|
|
- `calculateTiming()` - Compute timing data for each event
|
|
- `calculateStatistics()` - Aggregate chain statistics
|
|
- Helper utilities for naming and duration formatting
|
|
|
|
3. **Module exports updated**
|
|
- Exported all chain builder functions
|
|
- Exported all chain type definitions
|
|
|
|
**Key achievement:** Complete data transformation pipeline from raw events → structured chains! 🎉
|
|
|
|
**Completed Phase 3A, 3B & 3C:** Build Complete UI System ✅
|
|
|
|
Created the full panel UI and integrated it into the editor:
|
|
|
|
1. **Panel Structure** (`views/panels/TriggerChainDebuggerPanel/`)
|
|
|
|
- Main panel component with recording controls (Start/Stop/Clear)
|
|
- Recording indicator with animated pulsing dot
|
|
- Empty state, recording state, and timeline container
|
|
- Full SCSS styling using design tokens
|
|
|
|
2. **Core UI Components**
|
|
|
|
- `EventStep.tsx` - Individual event display with timeline connector
|
|
- `ChainTimeline.tsx` - Timeline view with chain header and events
|
|
- `ChainStats.tsx` - Statistics panel with event aggregation
|
|
- Complete SCSS modules for all components using design tokens
|
|
|
|
3. **Editor Integration** (`router.setup.ts`)
|
|
|
|
- Registered panel in sidebar with experimental flag
|
|
- Order 10 (after Project Settings)
|
|
- CloudData icon for consistency
|
|
- Description about recording and visualizing event chains
|
|
|
|
**Key achievement:** Complete, integrated Trigger Chain Debugger panel! 🎉
|
|
|
|
---
|
|
|
|
## Phase 3 Complete! ✨
|
|
|
|
**Option B Scope (Phases 1-3) is now complete:**
|
|
|
|
✅ **Phase 1:** Recording infrastructure with TriggerChainRecorder singleton
|
|
✅ **Phase 2:** Chain builder with full data transformation pipeline
|
|
✅ **Phase 3:** Complete UI with timeline, statistics, and editor integration
|
|
|
|
**What works now:**
|
|
|
|
- Panel appears in sidebar navigation (experimental feature)
|
|
- Start/Stop recording controls with animated indicator
|
|
- Event capture from runtime preview interactions
|
|
- Chain building and analysis
|
|
- Timeline visualization of event sequences
|
|
- Statistics aggregation by type and component
|
|
|
|
**Ready for testing!** Run `npm run dev` and enable experimental features to see the panel.
|
|
|
|
---
|
|
|
|
## Next Steps
|
|
|
|
**Completed:**
|
|
|
|
1. ~~Create documentation for DebugInspector~~ ✅ Done
|
|
2. ~~Design TriggerChainRecorder data structures~~ ✅ Done
|
|
3. ~~Build recorder with start/stop/reset~~ ✅ Done
|
|
4. ~~Hook into ViewerConnection~~ ✅ Done
|
|
5. ~~Create basic UI panel with Record/Stop buttons~~ ✅ Done
|
|
6. ~~Build timeline view to display captured events~~ ✅ Done
|
|
|
|
**Post-Implementation Enhancements (January 3-4, 2026):**
|
|
|
|
### Bug Fixes & Improvements
|
|
|
|
**Issue: Node data showing as "Unknown"**
|
|
|
|
- **Problem:** All events displayed "Unknown" for node type, label, and component name
|
|
- **Root cause:** ConnectionId format was not colon-separated as assumed, but concatenated UUIDs
|
|
- **Solution:** Implemented regex-based UUID extraction from connectionId strings
|
|
- **Files modified:**
|
|
- `packages/noodl-editor/src/editor/src/utils/triggerChain/TriggerChainRecorder.ts`
|
|
- Changed parsing from `split(':')` to regex pattern `/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/gi`
|
|
- Try each extracted UUID with `ProjectModel.instance.findNodeWithId()` until match found
|
|
- **Result:** ✅ Events now show correct node types, labels, and component names
|
|
|
|
**Enhancement: Click Navigation**
|
|
|
|
- **Added:** Click event cards to jump to that component
|
|
- **Added:** Click component chips in stats panel to navigate
|
|
- **Implementation:**
|
|
- `EventStep.tsx`: Added click handler using `NodeGraphContextTmp.switchToComponent()`
|
|
- `ChainStats.tsx`: Added click handler to component chips
|
|
- Navigation disabled while recording (cursor shows pointer only when not recording)
|
|
- **Result:** ✅ Full navigation from timeline to components
|
|
|
|
**Enhancement: Live Timeline Updates**
|
|
|
|
- **Problem:** Timeline only showed after stopping recording
|
|
- **Added:** Real-time event display during recording
|
|
- **Implementation:**
|
|
- Poll `getEvents()` every 100ms during recording
|
|
- Update both event count and timeline display
|
|
- Changed UI condition from `hasEvents && !isRecording` to `hasEvents`
|
|
- **Result:** ✅ Timeline updates live as events are captured
|
|
|
|
**Enhancement: UI Improvements**
|
|
|
|
- Changed panel icon from CloudData to Play (more trigger-appropriate)
|
|
- Made Topology Map (VIEW-001) experimental-only by adding `experimental: true` flag
|
|
- **Files modified:**
|
|
- `packages/noodl-editor/src/editor/src/router.setup.ts`
|
|
|
|
**Code Cleanup**
|
|
|
|
- Removed verbose debug logging from TriggerChainRecorder
|
|
- Kept essential console warnings for errors
|
|
- **Files modified:**
|
|
- `packages/noodl-editor/src/editor/src/utils/triggerChain/TriggerChainRecorder.ts`
|
|
|
|
### Critical Bug Fixes (January 4, 2026)
|
|
|
|
**Bug Fix: Missing Canvas Node Highlighting**
|
|
|
|
- **Problem:** Clicking events navigated to components but didn't highlight the node on canvas (like XRAY mode)
|
|
- **Solution:** Modified `EventStep.tsx` click handler to find and pass node to `switchToComponent()`
|
|
- **Implementation:**
|
|
- Extract `nodeId` from event
|
|
- Use `component.graph.findNodeWithId(nodeId)` to locate node
|
|
- Pass `node` option to `NodeGraphContextTmp.switchToComponent()`
|
|
- Pattern matches ComponentXRayPanel's navigation behavior
|
|
- **Files modified:**
|
|
- `packages/noodl-editor/src/editor/src/views/panels/TriggerChainDebuggerPanel/components/EventStep.tsx`
|
|
- **Result:** ✅ Clicking events now navigates AND highlights the node on canvas
|
|
|
|
**Bug Fix: Event Duplication**
|
|
|
|
- **Problem:** Recording captured ~40 events for simple button→toast action (expected ~5-10)
|
|
- **Root cause:** ViewerConnection's `connectiondebugpulse` handler fires multiple times per frame
|
|
- **Solution:** Added deduplication logic to TriggerChainRecorder
|
|
- **Implementation:**
|
|
- Added `recentEventKeys` Map to track recent event timestamps
|
|
- Use connectionId as unique event key
|
|
- Skip events that occur within 5ms of same connectionId
|
|
- Clear deduplication map on start recording
|
|
- Periodic cleanup to prevent map growth
|
|
- **Files modified:**
|
|
- `packages/noodl-editor/src/editor/src/utils/triggerChain/TriggerChainRecorder.ts`
|
|
- **Result:** ✅ Event counts now accurate (5-10 events for simple actions vs 40 before)
|
|
|
|
---
|
|
|
|
## Future Enhancements
|
|
|
|
**See:** `ENHANCEMENT-step-by-step-debugger.md` for detailed proposal
|
|
|
|
**Phase 4+ (Deferred):**
|
|
|
|
- Error detection and highlighting
|
|
- Race condition detection
|
|
- Performance bottleneck identification
|
|
- Static analysis mode
|
|
- Enhanced filtering and search
|
|
- **Step-by-step debugger** (separate enhancement doc created)
|