corrad-bp/docs/node-validation-system-plan.md
Md Afiq Iskandar ed00664882 Implement Node Validation System for Process Flow
- Introduced a comprehensive node validation system in the process flow builder, enhancing the user experience by providing real-time feedback on node configurations and process integrity.
- Added `useNodeValidation` composable to manage validation logic, including checks for required nodes, configuration completeness, and flow logic.
- Integrated validation indicators in node components (ApiNode, FormNode, GatewayNode, ScriptNode) to visually represent validation issues.
- Created `ValidationIndicator` and `ValidationTooltip` components for displaying validation statuses and detailed messages.
- Updated `ProcessFlowCanvas.vue` to trigger validation on node and edge changes, ensuring immediate feedback during process design.
- Enhanced `processBuilder` store to manage validation results and summary statistics, allowing for a centralized validation state.
- Documented the validation system implementation plan to guide future enhancements and user training.
2025-07-28 11:35:38 +08:00

13 KiB

Node Validation System Implementation Plan

Overview

This document outlines the implementation plan for a comprehensive node validation system in the Vue Flow process builder. The system will provide visual feedback, quality-of-life improvements, and help users create robust business processes by validating process integrity and configuration completeness.

Problem Statement

Users need guidance when building business processes to ensure:

  • Process flows are logically complete (have start/end nodes)
  • Nodes are properly configured (forms selected, APIs configured, etc.)
  • Variables are used correctly (no unused/undefined variables)
  • Gateway decision paths are complete
  • Process flows are reachable and don't have dead ends

System Architecture

Core Components

  1. Node Validation Composable (composables/useNodeValidation.js)
  2. Validation Visual Indicators (warning icons, tooltips)
  3. Validation Store Integration (with processBuilder store)
  4. Real-time Validation Updates (reactive validation on changes)

Integration Points

  • ProcessFlowCanvas.vue: Add validation visual layer
  • Node Components: Add validation state display
  • Process Builder Store: Integrate validation state
  • Variable Store: Hook variable usage validation

Implementation Phases

Phase 1: Foundation & Easy Wins 🟢 START HERE

1.1 Core Validation Infrastructure

Files to Create:

  • composables/useNodeValidation.js
  • types/validation.js (TypeScript definitions if needed)

Key Features:

// Basic validation composable structure
export function useNodeValidation() {
  const validationResults = ref(new Map())
  const isValidating = ref(false)
  
  // Core validation functions
  const validateNode = (node) => { /* ... */ }
  const validateProcess = (nodes, edges) => { /* ... */ }
  const getValidationIcon = (nodeId) => { /* ... */ }
  const getValidationTooltip = (nodeId) => { /* ... */ }
  
  return {
    validationResults,
    validateNode,
    validateProcess,
    // ... other methods
  }
}

1.2 Basic Validation Rules (Quick Implementations)

1.2.1 Process Structure Validation

  • Missing Start Node: Process must have exactly one start node
  • Missing End Node: Process must have at least one end node
  • Multiple Start Nodes: Warn if more than one start node exists

1.2.2 Node Configuration Validation

  • Form Node - No Form Selected: data.formId is missing
  • API Node - No URL: data.apiUrl is empty/missing
  • Gateway Node - Insufficient Paths: Less than 2 outgoing edges
  • Script Node - No Code: data.code is empty
  • Notification Node - No Content: data.content is missing

1.3 Visual Indicator System

1.3.1 Node Warning Overlay

<!-- Add to each node component -->
<div v-if="hasValidationIssues" class="validation-warning">
  <Icon name="material-symbols:warning" class="warning-icon" />
</div>

1.3.2 Hover Tooltips

<!-- Tooltip component for validation messages -->
<Tooltip v-if="validationMessage" :content="validationMessage">
  <Icon name="material-symbols:info" />
</Tooltip>

1.3.3 Canvas Integration

  • Add validation overlay to ProcessFlowCanvas.vue
  • Show process-level validation summary
  • Add validation toggle in canvas controls

Phase 2: Advanced Validations 🟡 MEDIUM PRIORITY

2.1 Variable Usage Analysis

2.1.1 Unused Variables Detection

// Check variables defined but never referenced
const findUnusedVariables = (processVariables, nodes) => {
  const usedVariables = new Set()
  
  // Scan all nodes for variable references
  nodes.forEach(node => {
    scanNodeForVariableUsage(node, usedVariables)
  })
  
  // Find variables not in usedVariables set
  return Object.keys(processVariables).filter(
    varName => !usedVariables.has(varName)
  )
}

2.1.2 Undefined Variables Detection

// Check nodes referencing non-existent variables
const findUndefinedVariables = (processVariables, nodes) => {
  const undefinedRefs = []
  
  nodes.forEach(node => {
    const referencedVars = extractVariableReferences(node)
    referencedVars.forEach(varName => {
      if (!processVariables[varName]) {
        undefinedRefs.push({ nodeId: node.id, variable: varName })
      }
    })
  })
  
  return undefinedRefs
}

2.2 Flow Logic Validation

2.2.1 Reachability Analysis

// Find nodes unreachable from start
const findUnreachableNodes = (nodes, edges) => {
  const startNodes = nodes.filter(n => n.type === 'start')
  if (startNodes.length === 0) return nodes.map(n => n.id)
  
  const reachable = new Set()
  const queue = [...startNodes.map(n => n.id)]
  
  while (queue.length > 0) {
    const nodeId = queue.shift()
    if (reachable.has(nodeId)) continue
    
    reachable.add(nodeId)
    const outgoingEdges = edges.filter(e => e.source === nodeId)
    queue.push(...outgoingEdges.map(e => e.target))
  }
  
  return nodes.filter(n => !reachable.has(n.id)).map(n => n.id)
}

2.2.2 Dead End Detection

// Find nodes with no path to end (except end nodes)
const findDeadEnds = (nodes, edges) => {
  const endNodes = nodes.filter(n => n.type === 'end')
  if (endNodes.length === 0) return []
  
  // Work backwards from end nodes
  const reachable = new Set()
  const queue = [...endNodes.map(n => n.id)]
  
  while (queue.length > 0) {
    const nodeId = queue.shift()
    if (reachable.has(nodeId)) continue
    
    reachable.add(nodeId)
    const incomingEdges = edges.filter(e => e.target === nodeId)
    queue.push(...incomingEdges.map(e => e.source))
  }
  
  return nodes
    .filter(n => n.type !== 'end' && !reachable.has(n.id))
    .map(n => n.id)
}

2.3 Gateway Completeness Validation

2.3.1 Condition Coverage

// Validate gateway has conditions for all paths
const validateGatewayConditions = (gatewayNode, edges) => {
  const outgoingEdges = edges.filter(e => e.source === gatewayNode.id)
  const conditions = gatewayNode.data?.conditions || []
  
  const issues = []
  
  // Check if each outgoing edge has a corresponding condition
  outgoingEdges.forEach(edge => {
    const hasCondition = conditions.some(cond => 
      cond.output === edge.label || edge.label === gatewayNode.data?.defaultPath
    )
    
    if (!hasCondition) {
      issues.push(`Edge to ${edge.target} has no condition defined`)
    }
  })
  
  return issues
}

Phase 3: Real-time Integration 🔵 ADVANCED

3.1 Reactive Validation System

3.1.1 Process Store Integration

// In processBuilder store
watch(
  () => [currentProcess.value?.nodes, currentProcess.value?.edges],
  ([nodes, edges]) => {
    if (nodes && edges) {
      validateProcess(nodes, edges)
    }
  },
  { deep: true }
)

3.1.2 Variable Store Integration

// In variableStore
watch(
  () => processVariables.value,
  (variables) => {
    validateVariableUsage(variables)
  },
  { deep: true }
)

3.2 Canvas UI Integration

3.2.1 Validation Summary Panel

<Panel position="top-left" class="validation-panel">
  <div class="validation-summary">
    <h4>Process Validation</h4>
    <div class="validation-status" :class="overallStatus">
      <Icon :name="statusIcon" />
      <span>{{ statusText }}</span>
    </div>
    
    <div v-if="issues.length > 0" class="validation-issues">
      <h5>Issues Found ({{ issues.length }})</h5>
      <ul>
        <li v-for="issue in issues" :key="issue.id" @click="focusIssue(issue)">
          <Icon name="material-symbols:warning" />
          {{ issue.message }}
        </li>
      </ul>
    </div>
  </div>
</Panel>

3.2.2 Node Validation Indicators

<!-- In each node component -->
<template>
  <div class="custom-node" :class="nodeClasses">
    <!-- Existing node content -->
    
    <!-- Validation overlay -->
    <div v-if="validationIssues.length > 0" class="validation-overlay">
      <Tooltip :content="validationTooltip">
        <Icon 
          name="material-symbols:warning" 
          class="validation-warning-icon"
          :class="validationSeverity"
        />
      </Tooltip>
    </div>
  </div>
</template>

Phase 4: User Experience Enhancements 🟣 POLISH

4.1 Validation Settings & Configuration

4.1.1 Validation Rules Configuration

// User configurable validation rules
const validationConfig = ref({
  processStructure: {
    requireStartNode: true,
    requireEndNode: true,
    allowMultipleStarts: false
  },
  nodeConfiguration: {
    validateFormSelection: true,
    validateApiUrls: true,
    validateGatewayPaths: true
  },
  variableUsage: {
    warnUnusedVariables: true,
    errorUndefinedVariables: true
  },
  flowLogic: {
    checkReachability: true,
    checkDeadEnds: true
  }
})

4.2 Validation Reporting & Export

4.2.1 Validation Report Generation

const generateValidationReport = () => {
  return {
    processId: currentProcess.value.id,
    processName: currentProcess.value.name,
    timestamp: new Date().toISOString(),
    overallStatus: getOverallValidationStatus(),
    summary: {
      totalNodes: nodes.length,
      validNodes: validNodes.length,
      invalidNodes: invalidNodes.length,
      warnings: warnings.length,
      errors: errors.length
    },
    issues: validationResults.value,
    recommendations: generateRecommendations()
  }
}

Validation Rule Categories

1. Critical Errors (🔴 Red - Blocks Process Execution)

  • No start node
  • Unreachable nodes
  • Undefined variable references
  • Invalid API configurations

2. Warnings (🟡 Yellow - Should Fix)

  • No end node
  • Unused variables
  • Missing form selections
  • Incomplete gateway conditions

3. Suggestions (🔵 Blue - Best Practices)

  • Process naming conventions
  • Variable naming standards
  • Node organization recommendations
  • Performance optimizations

Implementation Checklist

Phase 1 Tasks

  • Create useNodeValidation composable
  • Implement basic process structure validation
  • Add node configuration validation
  • Create validation visual indicators
  • Add warning icons to nodes
  • Implement hover tooltips
  • Integrate with ProcessFlowCanvas

Phase 2 Tasks

  • Variable usage analysis
  • Flow reachability validation
  • Dead end detection
  • Gateway condition validation
  • Advanced validation algorithms

Phase 3 Tasks

  • Real-time validation updates
  • Process store integration
  • Variable store integration
  • Canvas UI enhancements

Phase 4 Tasks

  • Validation settings configuration
  • Validation reporting system
  • Export functionality
  • Performance optimization

Technical Considerations

Performance

  • Use debounced validation to avoid excessive re-computation
  • Implement validation caching for unchanged nodes
  • Consider web workers for complex validation algorithms

User Experience

  • Non-blocking validation (warnings, not errors)
  • Progressive disclosure of validation details
  • Quick-fix suggestions where possible
  • Keyboard shortcuts for validation navigation

Extensibility

  • Plugin-based validation rule system
  • Custom validation rules API
  • Integration with external validation services

Testing Strategy

Unit Tests

  • Individual validation rule functions
  • Validation composable methods
  • Edge case handling

Integration Tests

  • Canvas integration validation
  • Store integration testing
  • Real-time update validation

User Testing

  • Validation feedback effectiveness
  • Performance impact assessment
  • User workflow integration

Success Metrics

Quantitative

  • Reduction in invalid process deployments
  • Decrease in process runtime errors
  • User validation engagement rate
  • Performance impact measurement

Qualitative

  • User feedback on validation helpfulness
  • Process builder confidence improvement
  • Reduced support requests for process issues

Future Enhancements

Advanced Features

  • AI-powered process optimization suggestions
  • Best practice recommendations
  • Validation rule learning from user patterns
  • Integration with process analytics

Enterprise Features

  • Organization-wide validation policies
  • Compliance validation rules
  • Audit trail for validation fixes
  • Team validation collaboration tools

Getting Started

  1. Start with Phase 1 - Basic validation infrastructure
  2. Test thoroughly - Ensure foundation is solid
  3. Iterate quickly - Get user feedback early
  4. Build incrementally - Add complexity gradually

This document serves as the master plan for implementing a comprehensive node validation system that will significantly improve the user experience and process quality in the Vue Flow process builder.