bps-kit 1.2.2 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/.bps-kit.json +4 -4
  2. package/README.md +3 -0
  3. package/implementation_plan.md.resolved +37 -0
  4. package/package.json +2 -2
  5. package/templates/agents-template/ARCHITECTURE.md +21 -9
  6. package/templates/agents-template/agents/automation-specialist.md +157 -0
  7. package/templates/agents-template/rules/GEMINI.md +2 -10
  8. package/templates/agents-template/workflows/automate.md +153 -0
  9. package/templates/skills_normal/n8n-code-javascript/BUILTIN_FUNCTIONS.md +764 -0
  10. package/templates/skills_normal/n8n-code-javascript/COMMON_PATTERNS.md +1110 -0
  11. package/templates/skills_normal/n8n-code-javascript/DATA_ACCESS.md +782 -0
  12. package/templates/skills_normal/n8n-code-javascript/ERROR_PATTERNS.md +763 -0
  13. package/templates/skills_normal/n8n-code-javascript/README.md +350 -0
  14. package/templates/skills_normal/n8n-code-javascript/SKILL.md +699 -0
  15. package/templates/skills_normal/n8n-code-python/COMMON_PATTERNS.md +794 -0
  16. package/templates/skills_normal/n8n-code-python/DATA_ACCESS.md +702 -0
  17. package/templates/skills_normal/n8n-code-python/ERROR_PATTERNS.md +601 -0
  18. package/templates/skills_normal/n8n-code-python/README.md +386 -0
  19. package/templates/skills_normal/n8n-code-python/SKILL.md +748 -0
  20. package/templates/skills_normal/n8n-code-python/STANDARD_LIBRARY.md +974 -0
  21. package/templates/skills_normal/n8n-expression-syntax/COMMON_MISTAKES.md +393 -0
  22. package/templates/skills_normal/n8n-expression-syntax/EXAMPLES.md +483 -0
  23. package/templates/skills_normal/n8n-expression-syntax/README.md +93 -0
  24. package/templates/skills_normal/n8n-expression-syntax/SKILL.md +516 -0
  25. package/templates/skills_normal/n8n-mcp-tools-expert/README.md +99 -0
  26. package/templates/skills_normal/n8n-mcp-tools-expert/SEARCH_GUIDE.md +374 -0
  27. package/templates/skills_normal/n8n-mcp-tools-expert/SKILL.md +642 -0
  28. package/templates/skills_normal/n8n-mcp-tools-expert/VALIDATION_GUIDE.md +442 -0
  29. package/templates/skills_normal/n8n-mcp-tools-expert/WORKFLOW_GUIDE.md +618 -0
  30. package/templates/skills_normal/n8n-node-configuration/DEPENDENCIES.md +789 -0
  31. package/templates/skills_normal/n8n-node-configuration/OPERATION_PATTERNS.md +913 -0
  32. package/templates/skills_normal/n8n-node-configuration/README.md +364 -0
  33. package/templates/skills_normal/n8n-node-configuration/SKILL.md +785 -0
  34. package/templates/skills_normal/n8n-validation-expert/ERROR_CATALOG.md +943 -0
  35. package/templates/skills_normal/n8n-validation-expert/FALSE_POSITIVES.md +720 -0
  36. package/templates/skills_normal/n8n-validation-expert/README.md +290 -0
  37. package/templates/skills_normal/n8n-validation-expert/SKILL.md +689 -0
  38. package/templates/skills_normal/n8n-workflow-patterns/README.md +251 -0
  39. package/templates/skills_normal/n8n-workflow-patterns/SKILL.md +411 -0
  40. package/templates/skills_normal/n8n-workflow-patterns/ai_agent_workflow.md +784 -0
  41. package/templates/skills_normal/n8n-workflow-patterns/database_operations.md +785 -0
  42. package/templates/skills_normal/n8n-workflow-patterns/http_api_integration.md +734 -0
  43. package/templates/skills_normal/n8n-workflow-patterns/scheduled_tasks.md +773 -0
  44. package/templates/skills_normal/n8n-workflow-patterns/webhook_processing.md +545 -0
  45. package/templates/vault/n8n-code-javascript/SKILL.md +10 -10
  46. package/templates/vault/n8n-code-python/SKILL.md +11 -11
  47. package/templates/vault/n8n-expression-syntax/SKILL.md +4 -4
  48. package/templates/vault/n8n-mcp-tools-expert/SKILL.md +9 -9
  49. package/templates/vault/n8n-node-configuration/SKILL.md +2 -2
  50. package/templates/vault/n8n-validation-expert/SKILL.md +3 -3
  51. package/templates/vault/n8n-workflow-patterns/SKILL.md +11 -11
@@ -0,0 +1,689 @@
1
+ ---
2
+ name: n8n-validation-expert
3
+ description: Interpret validation errors and guide fixing them. Use when encountering validation errors, validation warnings, false positives, operator structure issues, or need help understanding validation results. Also use when asking about validation profiles, error types, or the validation loop process.
4
+ ---
5
+
6
+ # n8n Validation Expert
7
+
8
+ Expert guide for interpreting and fixing n8n validation errors.
9
+
10
+ ---
11
+
12
+ ## Validation Philosophy
13
+
14
+ **Validate early, validate often**
15
+
16
+ Validation is typically iterative:
17
+ - Expect validation feedback loops
18
+ - Usually 2-3 validate → fix cycles
19
+ - Average: 23s thinking about errors, 58s fixing them
20
+
21
+ **Key insight**: Validation is an iterative process, not one-shot!
22
+
23
+ ---
24
+
25
+ ## Error Severity Levels
26
+
27
+ ### 1. Errors (Must Fix)
28
+ **Blocks workflow execution** - Must be resolved before activation
29
+
30
+ **Types**:
31
+ - `missing_required` - Required field not provided
32
+ - `invalid_value` - Value doesn't match allowed options
33
+ - `type_mismatch` - Wrong data type (string instead of number)
34
+ - `invalid_reference` - Referenced node doesn't exist
35
+ - `invalid_expression` - Expression syntax error
36
+
37
+ **Example**:
38
+ ```json
39
+ {
40
+ "type": "missing_required",
41
+ "property": "channel",
42
+ "message": "Channel name is required",
43
+ "fix": "Provide a channel name (lowercase, no spaces, 1-80 characters)"
44
+ }
45
+ ```
46
+
47
+ ### 2. Warnings (Should Fix)
48
+ **Doesn't block execution** - Workflow can be activated but may have issues
49
+
50
+ **Types**:
51
+ - `best_practice` - Recommended but not required
52
+ - `deprecated` - Using old API/feature
53
+ - `performance` - Potential performance issue
54
+
55
+ **Example**:
56
+ ```json
57
+ {
58
+ "type": "best_practice",
59
+ "property": "errorHandling",
60
+ "message": "Slack API can have rate limits",
61
+ "suggestion": "Add onError: 'continueRegularOutput' with retryOnFail"
62
+ }
63
+ ```
64
+
65
+ ### 3. Suggestions (Optional)
66
+ **Nice to have** - Improvements that could enhance workflow
67
+
68
+ **Types**:
69
+ - `optimization` - Could be more efficient
70
+ - `alternative` - Better way to achieve same result
71
+
72
+ ---
73
+
74
+ ## The Validation Loop
75
+
76
+ ### Pattern from Telemetry
77
+ **7,841 occurrences** of this pattern:
78
+
79
+ ```
80
+ 1. Configure node
81
+
82
+ 2. validate_node (23 seconds thinking about errors)
83
+
84
+ 3. Read error messages carefully
85
+
86
+ 4. Fix errors
87
+
88
+ 5. validate_node again (58 seconds fixing)
89
+
90
+ 6. Repeat until valid (usually 2-3 iterations)
91
+ ```
92
+
93
+ ### Example
94
+ ```javascript
95
+ // Iteration 1
96
+ let config = {
97
+ resource: "channel",
98
+ operation: "create"
99
+ };
100
+
101
+ const result1 = validate_node({
102
+ nodeType: "nodes-base.slack",
103
+ config,
104
+ profile: "runtime"
105
+ });
106
+ // → Error: Missing "name"
107
+
108
+ // ⏱️ 23 seconds thinking...
109
+
110
+ // Iteration 2
111
+ config.name = "general";
112
+
113
+ const result2 = validate_node({
114
+ nodeType: "nodes-base.slack",
115
+ config,
116
+ profile: "runtime"
117
+ });
118
+ // → Error: Missing "text"
119
+
120
+ // ⏱️ 58 seconds fixing...
121
+
122
+ // Iteration 3
123
+ config.text = "Hello!";
124
+
125
+ const result3 = validate_node({
126
+ nodeType: "nodes-base.slack",
127
+ config,
128
+ profile: "runtime"
129
+ });
130
+ // → Valid! ✅
131
+ ```
132
+
133
+ **This is normal!** Don't be discouraged by multiple iterations.
134
+
135
+ ---
136
+
137
+ ## Validation Profiles
138
+
139
+ Choose the right profile for your stage:
140
+
141
+ ### minimal
142
+ **Use when**: Quick checks during editing
143
+
144
+ **Validates**:
145
+ - Only required fields
146
+ - Basic structure
147
+
148
+ **Pros**: Fastest, most permissive
149
+ **Cons**: May miss issues
150
+
151
+ ### runtime (RECOMMENDED)
152
+ **Use when**: Pre-deployment validation
153
+
154
+ **Validates**:
155
+ - Required fields
156
+ - Value types
157
+ - Allowed values
158
+ - Basic dependencies
159
+
160
+ **Pros**: Balanced, catches real errors
161
+ **Cons**: Some edge cases missed
162
+
163
+ **This is the recommended profile for most use cases**
164
+
165
+ ### ai-friendly
166
+ **Use when**: AI-generated configurations
167
+
168
+ **Validates**:
169
+ - Same as runtime
170
+ - Reduces false positives
171
+ - More tolerant of minor issues
172
+
173
+ **Pros**: Less noisy for AI workflows
174
+ **Cons**: May allow some questionable configs
175
+
176
+ ### strict
177
+ **Use when**: Production deployment, critical workflows
178
+
179
+ **Validates**:
180
+ - Everything
181
+ - Best practices
182
+ - Performance concerns
183
+ - Security issues
184
+
185
+ **Pros**: Maximum safety
186
+ **Cons**: Many warnings, some false positives
187
+
188
+ ---
189
+
190
+ ## Common Error Types
191
+
192
+ ### 1. missing_required
193
+ **What it means**: A required field is not provided
194
+
195
+ **How to fix**:
196
+ 1. Use `get_node` to see required fields
197
+ 2. Add the missing field to your configuration
198
+ 3. Provide an appropriate value
199
+
200
+ **Example**:
201
+ ```javascript
202
+ // Error
203
+ {
204
+ "type": "missing_required",
205
+ "property": "channel",
206
+ "message": "Channel name is required"
207
+ }
208
+
209
+ // Fix
210
+ config.channel = "#general";
211
+ ```
212
+
213
+ ### 2. invalid_value
214
+ **What it means**: Value doesn't match allowed options
215
+
216
+ **How to fix**:
217
+ 1. Check error message for allowed values
218
+ 2. Use `get_node` to see options
219
+ 3. Update to a valid value
220
+
221
+ **Example**:
222
+ ```javascript
223
+ // Error
224
+ {
225
+ "type": "invalid_value",
226
+ "property": "operation",
227
+ "message": "Operation must be one of: post, update, delete",
228
+ "current": "send"
229
+ }
230
+
231
+ // Fix
232
+ config.operation = "post"; // Use valid operation
233
+ ```
234
+
235
+ ### 3. type_mismatch
236
+ **What it means**: Wrong data type for field
237
+
238
+ **How to fix**:
239
+ 1. Check expected type in error message
240
+ 2. Convert value to correct type
241
+
242
+ **Example**:
243
+ ```javascript
244
+ // Error
245
+ {
246
+ "type": "type_mismatch",
247
+ "property": "limit",
248
+ "message": "Expected number, got string",
249
+ "current": "100"
250
+ }
251
+
252
+ // Fix
253
+ config.limit = 100; // Number, not string
254
+ ```
255
+
256
+ ### 4. invalid_expression
257
+ **What it means**: Expression syntax error
258
+
259
+ **How to fix**:
260
+ 1. Use n8n Expression Syntax skill
261
+ 2. Check for missing `{{}}` or typos
262
+ 3. Verify node/field references
263
+
264
+ **Example**:
265
+ ```javascript
266
+ // Error
267
+ {
268
+ "type": "invalid_expression",
269
+ "property": "text",
270
+ "message": "Invalid expression: $json.name",
271
+ "current": "$json.name"
272
+ }
273
+
274
+ // Fix
275
+ config.text = "={{$json.name}}"; // Add {{}}
276
+ ```
277
+
278
+ ### 5. invalid_reference
279
+ **What it means**: Referenced node doesn't exist
280
+
281
+ **How to fix**:
282
+ 1. Check node name spelling
283
+ 2. Verify node exists in workflow
284
+ 3. Update reference to correct name
285
+
286
+ **Example**:
287
+ ```javascript
288
+ // Error
289
+ {
290
+ "type": "invalid_reference",
291
+ "property": "expression",
292
+ "message": "Node 'HTTP Requets' does not exist",
293
+ "current": "={{$node['HTTP Requets'].json.data}}"
294
+ }
295
+
296
+ // Fix - correct typo
297
+ config.expression = "={{$node['HTTP Request'].json.data}}";
298
+ ```
299
+
300
+ ---
301
+
302
+ ## Auto-Sanitization System
303
+
304
+ ### What It Does
305
+ **Automatically fixes common operator structure issues** on ANY workflow update
306
+
307
+ **Runs when**:
308
+ - `n8n_create_workflow`
309
+ - `n8n_update_partial_workflow`
310
+ - Any workflow save operation
311
+
312
+ ### What It Fixes
313
+
314
+ #### 1. Binary Operators (Two Values)
315
+ **Operators**: equals, notEquals, contains, notContains, greaterThan, lessThan, startsWith, endsWith
316
+
317
+ **Fix**: Removes `singleValue` property (binary operators compare two values)
318
+
319
+ **Before**:
320
+ ```javascript
321
+ {
322
+ "type": "boolean",
323
+ "operation": "equals",
324
+ "singleValue": true // ❌ Wrong!
325
+ }
326
+ ```
327
+
328
+ **After** (automatic):
329
+ ```javascript
330
+ {
331
+ "type": "boolean",
332
+ "operation": "equals"
333
+ // singleValue removed ✅
334
+ }
335
+ ```
336
+
337
+ #### 2. Unary Operators (One Value)
338
+ **Operators**: isEmpty, isNotEmpty, true, false
339
+
340
+ **Fix**: Adds `singleValue: true` (unary operators check single value)
341
+
342
+ **Before**:
343
+ ```javascript
344
+ {
345
+ "type": "boolean",
346
+ "operation": "isEmpty"
347
+ // Missing singleValue ❌
348
+ }
349
+ ```
350
+
351
+ **After** (automatic):
352
+ ```javascript
353
+ {
354
+ "type": "boolean",
355
+ "operation": "isEmpty",
356
+ "singleValue": true // ✅ Added
357
+ }
358
+ ```
359
+
360
+ #### 3. IF/Switch Metadata
361
+ **Fix**: Adds complete `conditions.options` metadata for IF v2.2+ and Switch v3.2+
362
+
363
+ ### What It CANNOT Fix
364
+
365
+ #### 1. Broken Connections
366
+ References to non-existent nodes
367
+
368
+ **Solution**: Use `cleanStaleConnections` operation in `n8n_update_partial_workflow`
369
+
370
+ #### 2. Branch Count Mismatches
371
+ 3 Switch rules but only 2 output connections
372
+
373
+ **Solution**: Add missing connections or remove extra rules
374
+
375
+ #### 3. Paradoxical Corrupt States
376
+ API returns corrupt data but rejects updates
377
+
378
+ **Solution**: May require manual database intervention
379
+
380
+ ---
381
+
382
+ ## False Positives
383
+
384
+ ### What Are They?
385
+ Validation warnings that are technically "wrong" but acceptable in your use case
386
+
387
+ ### Common False Positives
388
+
389
+ #### 1. "Missing error handling"
390
+ **Warning**: No error handling configured
391
+
392
+ **When acceptable**:
393
+ - Simple workflows where failures are obvious
394
+ - Testing/development workflows
395
+ - Non-critical notifications
396
+
397
+ **When to fix**: Production workflows handling important data
398
+
399
+ #### 2. "No retry logic"
400
+ **Warning**: Node doesn't retry on failure
401
+
402
+ **When acceptable**:
403
+ - APIs with their own retry logic
404
+ - Idempotent operations
405
+ - Manual trigger workflows
406
+
407
+ **When to fix**: Flaky external services, production automation
408
+
409
+ #### 3. "Missing rate limiting"
410
+ **Warning**: No rate limiting for API calls
411
+
412
+ **When acceptable**:
413
+ - Internal APIs with no limits
414
+ - Low-volume workflows
415
+ - APIs with server-side rate limiting
416
+
417
+ **When to fix**: Public APIs, high-volume workflows
418
+
419
+ #### 4. "Unbounded query"
420
+ **Warning**: SELECT without LIMIT
421
+
422
+ **When acceptable**:
423
+ - Small known datasets
424
+ - Aggregation queries
425
+ - Development/testing
426
+
427
+ **When to fix**: Production queries on large tables
428
+
429
+ ### Reducing False Positives
430
+
431
+ **Use `ai-friendly` profile**:
432
+ ```javascript
433
+ validate_node({
434
+ nodeType: "nodes-base.slack",
435
+ config: {...},
436
+ profile: "ai-friendly" // Fewer false positives
437
+ })
438
+ ```
439
+
440
+ ---
441
+
442
+ ## Validation Result Structure
443
+
444
+ ### Complete Response
445
+ ```javascript
446
+ {
447
+ "valid": false,
448
+ "errors": [
449
+ {
450
+ "type": "missing_required",
451
+ "property": "channel",
452
+ "message": "Channel name is required",
453
+ "fix": "Provide a channel name (lowercase, no spaces)"
454
+ }
455
+ ],
456
+ "warnings": [
457
+ {
458
+ "type": "best_practice",
459
+ "property": "errorHandling",
460
+ "message": "Slack API can have rate limits",
461
+ "suggestion": "Add onError: 'continueRegularOutput'"
462
+ }
463
+ ],
464
+ "suggestions": [
465
+ {
466
+ "type": "optimization",
467
+ "message": "Consider using batch operations for multiple messages"
468
+ }
469
+ ],
470
+ "summary": {
471
+ "hasErrors": true,
472
+ "errorCount": 1,
473
+ "warningCount": 1,
474
+ "suggestionCount": 1
475
+ }
476
+ }
477
+ ```
478
+
479
+ ### How to Read It
480
+
481
+ #### 1. Check `valid` field
482
+ ```javascript
483
+ if (result.valid) {
484
+ // ✅ Configuration is valid
485
+ } else {
486
+ // ❌ Has errors - must fix before deployment
487
+ }
488
+ ```
489
+
490
+ #### 2. Fix errors first
491
+ ```javascript
492
+ result.errors.forEach(error => {
493
+ console.log(`Error in ${error.property}: ${error.message}`);
494
+ console.log(`Fix: ${error.fix}`);
495
+ });
496
+ ```
497
+
498
+ #### 3. Review warnings
499
+ ```javascript
500
+ result.warnings.forEach(warning => {
501
+ console.log(`Warning: ${warning.message}`);
502
+ console.log(`Suggestion: ${warning.suggestion}`);
503
+ // Decide if you need to address this
504
+ });
505
+ ```
506
+
507
+ #### 4. Consider suggestions
508
+ ```javascript
509
+ // Optional improvements
510
+ // Not required but may enhance workflow
511
+ ```
512
+
513
+ ---
514
+
515
+ ## Workflow Validation
516
+
517
+ ### validate_workflow (Structure)
518
+ **Validates entire workflow**, not just individual nodes
519
+
520
+ **Checks**:
521
+ 1. **Node configurations** - Each node valid
522
+ 2. **Connections** - No broken references
523
+ 3. **Expressions** - Syntax and references valid
524
+ 4. **Flow** - Logical workflow structure
525
+
526
+ **Example**:
527
+ ```javascript
528
+ validate_workflow({
529
+ workflow: {
530
+ nodes: [...],
531
+ connections: {...}
532
+ },
533
+ options: {
534
+ validateNodes: true,
535
+ validateConnections: true,
536
+ validateExpressions: true,
537
+ profile: "runtime"
538
+ }
539
+ })
540
+ ```
541
+
542
+ ### Common Workflow Errors
543
+
544
+ #### 1. Broken Connections
545
+ ```json
546
+ {
547
+ "error": "Connection from 'Transform' to 'NonExistent' - target node not found"
548
+ }
549
+ ```
550
+
551
+ **Fix**: Remove stale connection or create missing node
552
+
553
+ #### 2. Circular Dependencies
554
+ ```json
555
+ {
556
+ "error": "Circular dependency detected: Node A → Node B → Node A"
557
+ }
558
+ ```
559
+
560
+ **Fix**: Restructure workflow to remove loop
561
+
562
+ #### 3. Multiple Start Nodes
563
+ ```json
564
+ {
565
+ "warning": "Multiple trigger nodes found - only one will execute"
566
+ }
567
+ ```
568
+
569
+ **Fix**: Remove extra triggers or split into separate workflows
570
+
571
+ #### 4. Disconnected Nodes
572
+ ```json
573
+ {
574
+ "warning": "Node 'Transform' is not connected to workflow flow"
575
+ }
576
+ ```
577
+
578
+ **Fix**: Connect node or remove if unused
579
+
580
+ ---
581
+
582
+ ## Recovery Strategies
583
+
584
+ ### Strategy 1: Start Fresh
585
+ **When**: Configuration is severely broken
586
+
587
+ **Steps**:
588
+ 1. Note required fields from `get_node`
589
+ 2. Create minimal valid configuration
590
+ 3. Add features incrementally
591
+ 4. Validate after each addition
592
+
593
+ ### Strategy 2: Binary Search
594
+ **When**: Workflow validates but executes incorrectly
595
+
596
+ **Steps**:
597
+ 1. Remove half the nodes
598
+ 2. Validate and test
599
+ 3. If works: problem is in removed nodes
600
+ 4. If fails: problem is in remaining nodes
601
+ 5. Repeat until problem isolated
602
+
603
+ ### Strategy 3: Clean Stale Connections
604
+ **When**: "Node not found" errors
605
+
606
+ **Steps**:
607
+ ```javascript
608
+ n8n_update_partial_workflow({
609
+ id: "workflow-id",
610
+ operations: [{
611
+ type: "cleanStaleConnections"
612
+ }]
613
+ })
614
+ ```
615
+
616
+ ### Strategy 4: Use Auto-fix
617
+ **When**: Operator structure errors
618
+
619
+ **Steps**:
620
+ ```javascript
621
+ n8n_autofix_workflow({
622
+ id: "workflow-id",
623
+ applyFixes: false // Preview first
624
+ })
625
+
626
+ // Review fixes, then apply
627
+ n8n_autofix_workflow({
628
+ id: "workflow-id",
629
+ applyFixes: true
630
+ })
631
+ ```
632
+
633
+ ---
634
+
635
+ ## Best Practices
636
+
637
+ ### ✅ Do
638
+
639
+ - Validate after every significant change
640
+ - Read error messages completely
641
+ - Fix errors iteratively (one at a time)
642
+ - Use `runtime` profile for pre-deployment
643
+ - Check `valid` field before assuming success
644
+ - Trust auto-sanitization for operator issues
645
+ - Use `get_node` when unclear about requirements
646
+ - Document false positives you accept
647
+
648
+ ### ❌ Don't
649
+
650
+ - Skip validation before activation
651
+ - Try to fix all errors at once
652
+ - Ignore error messages
653
+ - Use `strict` profile during development (too noisy)
654
+ - Assume validation passed (always check result)
655
+ - Manually fix auto-sanitization issues
656
+ - Deploy with unresolved errors
657
+ - Ignore all warnings (some are important!)
658
+
659
+ ---
660
+
661
+ ## Detailed Guides
662
+
663
+ For comprehensive error catalogs and false positive examples:
664
+
665
+ - **[ERROR_CATALOG.md](ERROR_CATALOG.md)** - Complete list of error types with examples
666
+ - **[FALSE_POSITIVES.md](FALSE_POSITIVES.md)** - When warnings are acceptable
667
+
668
+ ---
669
+
670
+ ## Summary
671
+
672
+ **Key Points**:
673
+ 1. **Validation is iterative** (avg 2-3 cycles, 23s + 58s)
674
+ 2. **Errors must be fixed**, warnings are optional
675
+ 3. **Auto-sanitization** fixes operator structures automatically
676
+ 4. **Use runtime profile** for balanced validation
677
+ 5. **False positives exist** - learn to recognize them
678
+ 6. **Read error messages** - they contain fix guidance
679
+
680
+ **Validation Process**:
681
+ 1. Validate → Read errors → Fix → Validate again
682
+ 2. Repeat until valid (usually 2-3 iterations)
683
+ 3. Review warnings and decide if acceptable
684
+ 4. Deploy with confidence
685
+
686
+ **Related Skills**:
687
+ - n8n MCP Tools Expert - Use validation tools correctly
688
+ - n8n Expression Syntax - Fix expression errors
689
+ - n8n Node Configuration - Understand required fields