Single Interactions
This document details individual canvas interactions and their effects on the mutation tracking system.
Node Operations
Node Creation
Node creation always originates from the canvas's flow palette. Users can:
- Click a "Create [Node Type]" button - Creates a fresh node with default data
- Select an existing node to add - Uses Copy-On-Use pattern, duplicating entity data
Mutation Impact:
- Creates a
CREATEcommand for the new entity - If edges are auto-created, additional implied mutations are captured
- Node receives a temporary ID until saved
Node Selection
Selected nodes are highlighted with a visual border and can be moved, updated, or deleted.
- User clicks a node to select it
- User Shift+clicks to multi-select
- Selection state is UI-only (no mutation)
Selection is a canvas state, not a tracked interaction. No commands are created for selection changes.
Node Movement
Node movement is triggered when a user drags a selected node to a new position.
Key Behavior:
- Position changes affect
canvas_dataonly - No mutation command is created
- Entity data remains unchanged
// Position stored in canvas_data, not entity
{
canvas_data: {
nodes: [{ id: 'node-1', position: { x: 100, y: 200 } }],
edges: [...],
viewport: { x: 0, y: 0, zoom: 1 }
}
}
Node Update
Nodes are updated when users interact with the node's internal form fields.
Trigger: User edits content via the node's inline form Pattern: Blur-based commit (changes commit when field loses focus)
Mutation Impact:
- Creates an
UPDATEcommand with the changed data - Multiple updates to the same field aggregate to a single mutation on save
Node Deletion
Nodes can be deleted by selecting the node and pressing the Delete key.
Cascade Behavior:
- All connected edges are automatically deleted
- If deleting a Question, its Answer relationships are cleaned up
- If deleting a Category, Answer category references are cleared
Edge Operations
Edge Creation
Edges are created in two ways:
- Automatically - When new nodes are added, edges connect them to logical parents
- Manually - User drags from one node's handle to another
Implied Mutations:
- Creating an edge between Question and Answer sets the Answer's
question_id - Creating an edge between Category and Answer sets the Answer's
category_id
Edge Selection
Edges can be selected by clicking on them. Like node selection, this is UI-only state.
Edge Movement
Edges cannot be moved directly. They are automatically positioned based on their source and target nodes.
Edge Update
Edges cannot be updated directly. Their visual appearance and routing are derived from node positions.
Edges in SERVICE_SELECTION subgraphs are structural - they define parent-child relationships that are persisted as entity references, not as edge entities.
Edge Deletion
Edges can be deleted by selecting and pressing Delete.
Mutation Impact:
- Removes the relationship from connected entities
- If the edge represented a parent reference (e.g., Question→Answer), the child entity's reference is cleared
Summary Table
| Interaction | Creates Command? | Affects Entity Data? | Affects Canvas Data? |
|---|---|---|---|
| Node Creation | ✅ Yes | ✅ Yes | ✅ Yes |
| Node Selection | ❌ No | ❌ No | ❌ No |
| Node Movement | ❌ No | ❌ No | ✅ Yes |
| Node Update | ✅ Yes | ✅ Yes | ❌ No |
| Node Deletion | ✅ Yes | ✅ Yes | ✅ Yes |
| Edge Creation | ✅ Yes (implied) | ✅ Yes | ✅ Yes |
| Edge Selection | ❌ No | ❌ No | ❌ No |
| Edge Deletion | ✅ Yes (implied) | ✅ Yes | ✅ Yes |