excalidash-visual-lint-repair-loop

Iteratively repairs messy Excalidraw drawings via a lint-score-repair loop until they score 95 or higher.

2|Updated Jun 17, 2026
One-click install
npx skills add https://github.com/gabedsam01/excalidash-v2 --skill excalidash-visual-lint-repair-loop-gabedsam01
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: excalidash-visual-lint-repair-loop
Source: https://github.com/gabedsam01/excalidash-v2/tree/main/skills/excalidash/excalidash-visual-lint-repair-loop
Command: npx skills add https://github.com/gabedsam01/excalidash-v2 --skill excalidash-visual-lint-repair-loop-gabedsam01

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes scripts (resource) and references (resource) components.

What problem does it solve? Excalidraw diagrams often end up visually messy — arrows crossing text labels, overlapping headers, cramped spacing, or content clipped outside the viewport. A single polish pass frequently is not enough, and uncontrolled fixes can make things worse. This Skill runs a bounded, auditable iteration loop that fixes one defect class per pass, re-scores after every pass, and rolls back any change that lowers the score. ## Core Features & Use Cases - Iterative lint-score-repair loop: Repeatedly calls lint_drawing, score_drawing, and repair_drawing — one defect class per pass — until the drawing scores >= 95 with zero hard blockers, or maxPasses is reached. - Mandatory rollback on regression: Snapshots elements before every pass and reverts any pass (including auto_polish convergence assists) whose measured score drops below the pass-start score. - Geometry-only, semantics-preserving repair: Reroutes arrows through 32px gutters, pushes content below title bands, and redistributes spacing without adding, deleting, or relabeling nodes or edges; locked elements never move. - Secret redaction before save: Scans all text elements for JWTs, API keys, database URLs, and tokens, replacing them with [REDACTED_*] placeholders before the final save and SVG export. - Use Case: A 10-node service map scores 78 with four arrows crossing labels and an overlapping legend header. The loop clears ARROW_TEXT_INTERSECTION in pass 1, FRAME_TITLE_OVERLAP in pass 2, and spacing/viewport issues in pass 3, ending at 96 with a saved version note "lint-repair: 78 -> 96 (3 passes)" and an SVG export. ## Quick Start Ask the AI to run the lint-score-repair loop on your messy Excalidraw drawing, fixing overlapping arrows and headers one defect class at a time until it scores at least 95, then save a version and export an SVG.

Frequently Asked Questions about excalidash-visual-lint-repair-loop

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I fix overlapping arrows and text in an Excalidraw diagram?

Run the lint-score-repair loop: it calls lint_drawing to enumerate defects, then repair_drawing to rebind arrow endpoints to card sides and route them through 32px gutters, never over text. Each pass is re-scored, and the loop repeats until the drawing scores 95 or higher with zero arrow-over-text intersections.

What is the difference between auto_polish_drawing and the lint-repair loop?

auto_polish_drawing is a single-pass cleanup, while this loop is the iterative variant for stubborn drawings where one pass stalls below 95. It repairs one defect class per pass with per-pass snapshots and rollback, using auto_polish only as an optional convergence assist when manual passes stall.

Does the repair loop change the nodes or labels in my diagram?

No. Every repair runs with preserveSemantics set to true, so node count, edge count, endpoints, and labels stay identical to the baseline. The only permitted text change is redacting secrets like API keys or tokens into [REDACTED_*] placeholders before saving.

What happens if a repair pass makes the drawing score worse?

The pass is rolled back. The skill snapshots elements and records the pass-start score before every repair; if the measured pass-end score is lower, it restores the snapshot and either narrows the repair to a single element or moves to the next defect class.

When should I not use the Excalidraw lint-repair loop?

Do not use it to create new diagrams, to make semantic changes like adding or removing nodes, or on drawings already scoring 95 or higher with empty hardBlockers. It is also skipped when the user explicitly waives the threshold with a draft flag.

Why does the loop stop before reaching a score of 95?

The loop terminates at maxPasses (default 4) or after two consecutive passes with no net gain, to avoid endless oscillation. If stalled just below 95, it tries one conservative auto_polish_drawing assist; otherwise it reports the residual hardBlockers instead of churning.