docs: incompatibility warnings for canvas connections
CI / Vet, test, build (push) Successful in 5m9s
CI / Build and push image (push) Successful in 2m39s

This commit is contained in:
Admin Bot
2026-09-05 01:01:24 -07:00
parent f1030aae82
commit c44a9b174f
+118 -4
View File
@@ -1028,17 +1028,131 @@ User drops 3 new nodes on canvas
Workflow calls CanvasReasonerActivity Workflow calls CanvasReasonerActivity
LLM analyzes: Clone → Analyze → Report LLM analyzes schemas: Clone (out: path,commit) → Analyze (in: path) → Report (in: metrics)
Returns edges + reasoning Compatibility checker validates edges
Frontend updates canvas with suggested connections Returns:
- Suggested edges (Clone → Analyze → Report)
- Incompatible edges (Report → Approve [terminal sink])
- Disconnected nodes (if any isolated nodes)
- User alerts explaining issues
User approves/rejects suggestions Frontend shows:
✅ Green edges (compatible)
❌ Red warnings (incompatible)
🔌 Yellow badges (disconnected)
User approves compatible edges, fixes/removes incompatible ones
``` ```
--- ---
### Handling Incompatible Connections
When two activities **cannot** be connected, the response includes detailed incompatibility data:
**Example: Terminal Activity Blocking Connection**
```json
{
"suggested_edges": [
{"source": "clone-1", "target": "analyze-1"}
],
"incompatible_edges": [
{
"source": "security-scan-1",
"target": "approve-1",
"reason": "ApproveWorkflowActivity accepts no inputs (terminal sink activity)",
"source_needs": "to output: issues, metrics, severity",
"target_needs": "none (approval only blocks workflow)",
"suggestion": "ApproveWorkflowActivity must be the final step. Place it after Report generates summary."
}
],
"user_alerts": [
"⚠️ security-scan-1 → approve-1: ApproveWorkflowActivity is terminal (no inputs). Place it at the end of the workflow."
]
}
```
**Example: Type Mismatch**
```json
{
"incompatible_edges": [
{
"source": "llm-inference-1",
"target": "deployment-check-1",
"reason": "Output type mismatch: string ≠ object",
"source_needs": "outputs: response (string)",
"target_needs": "inputs: deployment_plan (object)",
"suggestion": "Insert LLM transformer node to convert string response → deployment_plan object"
}
],
"user_alerts": [
"⚠️ llm-inference-1 → deployment-check-1: Type mismatch (string ≠ object). Use LLM transformation node to map outputs."
]
}
```
**Example: Disconnected Nodes**
```json
{
"disconnected_nodes": ["security-scan-1", "notify-1"],
"user_alerts": [
"🔌 Node 'SecurityScan' has no connections. Connect it or remove from canvas.",
"🔌 Node 'Notify' has no incoming edges. Check if it should receive data."
]
}
```
### Incompatibility Warning Schema
```json
{
"source": "string - source node ID",
"target": "string - target node ID",
"reason": "string - why connection fails",
"source_needs": "string - what source outputs",
"target_needs": "string - what target requires",
"suggestion": "string - how to fix it"
}
```
### Common Incompatibility Reasons
| Reason | Example | Solution |
|--------|---------|----------|
| **Terminal Activity** | Notify → CloneRepo | Can't output from sink (terminal) |
| **Type Mismatch** | string → object | Use LLM transformer node |
| **No Outputs** | Notification has no outputs | Terminal activities can't be sources |
| **No Inputs** | Approval has no inputs | Terminal activities can't accept data |
| **Semantic Mismatch** | Approval → Analysis | Doesn't make logical sense |
### Frontend Alert Display
**Sidebar UI:**
```
🚨 Connection Issues (3)
⚠️ CloneRepo-1 → Approve-1
Terminal sink can't receive inputs
[Fix] [Ignore] [Remove Node]
⚠️ LLMInference-1 → DeploymentCheck-1
Type mismatch: string → object
[Add Transformer] [Manual Map]
🔌 SecurityScan-1 (isolated)
No connections detected
[Connect] [Remove]
```
**Canvas Visual Feedback:**
- ❌ Incompatible suggested edges appear as **red dashed lines** (don't auto-add)
- ⚠️ Disconnected nodes show **yellow border** with icon
- ✅ Compatible edges appear as **green solid lines** (safe to accept)
---
### Error Handling ### Error Handling
If LLM inference fails: If LLM inference fails: