From canvas-audit
Use when verifying the VueFlow canvas after layout, routing, or merge changes — specifically to check node positions, port handle alignment, edge routing quality, wire overlaps, node overlaps, and wires passing through nodes. Run against the live dev server. Triggers on: "check the canvas", "verify the layout", "did the wires break", "audit the canvas", "test the new merge on the canvas".
How this skill is triggered — by the user, by Claude, or both
Slash command
/canvas-audit:canvas-auditThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Playwright tool that extracts VueFlow canvas state from the live DOM and reports layout
Playwright tool that extracts VueFlow canvas state from the live DOM and reports layout quality problems that are invisible to unit tests.
SignalCanvasFrontend/tools/canvas-audit/index.ts
The dev server must be running (npm run dev or npm run tauri:dev).
# Capture against the default worship-venue example (best for layout testing)
npx tsx tools/canvas-audit/index.ts \
--url "http://localhost:5173/#/canvas/worship-venue" \
--out .canvas-audit
# Capture a specific patch file (load it first via MCP set_patch, then audit)
npx tsx tools/canvas-audit/index.ts \
--url "http://localhost:5173/#/canvas" \
--out .canvas-audit
Output:
.canvas-audit/report.json — structured report (all metrics + findings).canvas-audit/nodes/<id>.png — zoomed screenshot per node.canvas-audit/full-canvas.png — full canvas viewport screenshot.canvas-audit/regions/<label>.png — cropped screenshots of problem areas{
"nodeCount": 3,
"edgeCount": 4,
"routedEdgeCount": 4, // edges that have actual route points
"alignmentErrorCount": 0, // wire endpoints not aligned to port handles
"parallelOverlapCount": 0, // parallel wires too close together
"wireCrossingCount": 2, // wires that cross each other
"nodeOverlapCount": 0, // nodes physically overlapping
"wiresThroughNodeCount": 0, // wires passing through a non-endpoint node
"nodesOffViewportCount": 0 // nodes outside visible canvas area
}
Severity thresholds (alignment errors):
minor — ≤ 2 flow px off (ignore)moderate — 2–6 flow px off (investigate)severe — > 6 flow px off (fix required)worship-venue (has nodes + edges, good baseline)alignmentErrorCount — should be 0 severeparallelOverlapCount — parallel wires need ≥ 10 flow px separationwiresThroughNodeCount — always 0nodeOverlapCount — always 0full-canvas.png to visually confirm layout looks reasonable| Finding | Likely cause | Where to look |
|---|---|---|
alignmentErrors (severe) | Port handle IDs changed, or ELK edge routing off | elk.ts sourceHandle/targetHandle |
parallelOverlaps | Bundling regression — multiple edges on same route | buildVfEdges in useCanvasPipeline.ts |
wiresThroughNodes | ELK not treating nodes as obstacles | ELK layout options |
nodeOverlaps | fcose placement failure or locked position conflict | fcosePlace.ts |
nodesOffViewport | fitView not firing, or seed position out of bounds | relayoutIncremental in useCanvasPipeline.ts |
routedEdgeCount < edgeCount | Some edges have no route points | Check edge bundling in buildVfEdges |
After loading a patch via MCP set_patch, a clean canvas should show:
wireCrossingCount (some crossings are unavoidable in dense graphs)routedEdgeCount == edgeCountnodes array has a screenshotFileCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub signalcanvas/signalcanvas-skills --plugin canvas-audit