docs(bench): dark leaderboard styling for all benchmark charts

Leaderboard restyled to the LLM-benchmark look: dark background, rank-numbered labels, per-rank color palette, 'NN / 100 - grade' annotations. The live-run, task-matrix and performance charts share the same dark theme for a consistent README identity. Charts regenerated deterministically from their data files.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Umutcan Edizsalan
2026-07-23 16:14:04 +03:00
co-authored by Cursor
parent af4813e7b6
commit bae0750d4c
8 changed files with 1112 additions and 863 deletions
+36 -17
View File
@@ -66,24 +66,43 @@ def render_chart(data: dict[str, Any], output: Path) -> None:
matplotlib.rcParams["svg.hashsalt"] = "autocad-mcp-source-review-v1"
projects = sorted(data["projects"], key=lambda item: item["score"])
labels = [item["repository"] for item in projects]
total = len(projects)
# rank 1 = highest score (drawn topmost by barh with ascending sort)
labels = [
f"{total - index}. {item['repository']}" for index, item in enumerate(projects)
]
scores = [item["score"] for item in projects]
grades = [item["evidence_grade"] for item in projects]
colors = ["#0969da" if label == "U-C4N/Autocad-MCP" else "#6e7781" for label in labels]
# leaderboard palette by rank (rank 1 first), canvas/LLM-benchmark style
rank_palette = [
"#3fb950", # 1 green
"#58a6ff", # 2 sky
"#6e7ce0", # 3 indigo
"#d29922", # 4 amber
"#c4622d", # 5 rust
"#e3b341", # 6 yellow
"#bf4b8a", # 7 magenta
"#f0876e", # 8 salmon
"#8957e5", # 9 purple
]
colors = [
rank_palette[(total - 1 - index) % len(rank_palette)]
for index in range(total)
]
fig, ax = plt.subplots(figsize=(12, 6.4), constrained_layout=True)
fig.patch.set_facecolor("#f6f8fa")
ax.set_facecolor("#f6f8fa")
fig, ax = plt.subplots(figsize=(12, 0.62 * total + 2.4), constrained_layout=True)
fig.patch.set_facecolor("#0d1117")
ax.set_facecolor("#0d1117")
bars = ax.barh(labels, scores, color=colors, height=0.62)
ax.set_xlim(0, 100)
ax.set_xlabel("Weighted capability score / 100", color="#24292f", labelpad=10)
ax.set_xlabel("Weighted capability score / 100", color="#e6edf3", labelpad=10)
ax.set_title(
"Source-reviewed capability benchmark",
"Public AutoCAD MCP leaderboard — Source-reviewed capability benchmark",
loc="left",
fontsize=18,
fontsize=17,
fontweight="bold",
color="#24292f",
color="#e6edf3",
pad=28,
)
ax.text(
@@ -91,17 +110,17 @@ def render_chart(data: dict[str, Any], output: Path) -> None:
1.02,
f"Fixed rubric · reviewed {data['reviewed_at']} · evidence grade shown per project",
transform=ax.transAxes,
color="#57606a",
color="#8b949e",
fontsize=10,
)
for bar, score, grade in zip(bars, scores, grades, strict=True):
ax.text(
min(score + 1.2, 96),
min(score + 1.2, 88),
bar.get_y() + bar.get_height() / 2,
f"{score} · {grade}",
f"{score} / 100 · {grade}",
va="center",
color="#24292f",
color="#e6edf3",
fontweight="bold",
)
@@ -110,13 +129,13 @@ def render_chart(data: dict[str, Any], output: Path) -> None:
-0.17,
"Shared live-run results are not implied. Scores reflect public-source and recorded test evidence.",
transform=ax.transAxes,
color="#57606a",
color="#8b949e",
fontsize=9,
)
ax.grid(axis="x", color="#d0d7de", linewidth=0.8, alpha=0.8)
ax.grid(axis="x", color="#30363d", linewidth=0.8, alpha=0.9)
ax.set_axisbelow(True)
ax.tick_params(axis="x", colors="#57606a")
ax.tick_params(axis="y", colors="#24292f", length=0, pad=8)
ax.tick_params(axis="x", colors="#8b949e")
ax.tick_params(axis="y", colors="#e6edf3", length=0, pad=8)
for spine in ax.spines.values():
spine.set_visible(False)
+11 -11
View File
@@ -51,23 +51,23 @@ def render_chart(reports: list[dict[str, Any]], output: Path) -> None:
coverage = [item["summary"]["coverage_percent"] for item in reports]
passed = [item["summary"]["passed"] for item in reports]
attempted = [item["summary"]["attempted"] for item in reports]
colors = ["#0969da" if label == "autocad-mcp-pro" else "#6e7781" for label in labels]
colors = ["#58a6ff" if label == "autocad-mcp-pro" else "#484f58" for label in labels]
fig, ax = plt.subplots(figsize=(12, 4.8), constrained_layout=True)
fig.patch.set_facecolor("#f6f8fa")
ax.set_facecolor("#f6f8fa")
fig.patch.set_facecolor("#0d1117")
ax.set_facecolor("#0d1117")
bars = ax.barh(labels, scores, color=colors, height=0.58)
ax.set_xlim(0, 100)
ax.set_xlabel(
"Weighted live-run score / 100 (fixed 10-task matrix)", color="#24292f", labelpad=10
"Weighted live-run score / 100 (fixed 10-task matrix)", color="#e6edf3", labelpad=10
)
ax.set_title(
"Live-run benchmark - headless ezdxf lane",
loc="left",
fontsize=18,
fontweight="bold",
color="#24292f",
color="#e6edf3",
pad=28,
)
ax.text(
@@ -75,7 +75,7 @@ def render_chart(reports: list[dict[str, Any]], output: Path) -> None:
1.02,
"Same 10 tasks, same harness, pinned competitor commits; artifacts verified by re-opening the DXF",
transform=ax.transAxes,
color="#57606a",
color="#8b949e",
fontsize=10,
)
@@ -85,7 +85,7 @@ def render_chart(reports: list[dict[str, Any]], output: Path) -> None:
bar.get_y() + bar.get_height() / 2,
f"{score:g} ({ok}/{total} pass, {cov:g}% coverage)",
va="center",
color="#24292f",
color="#e6edf3",
fontweight="bold",
)
@@ -94,13 +94,13 @@ def render_chart(reports: list[dict[str, Any]], output: Path) -> None:
-0.22,
"Unsupported tasks score 0 in the fixed matrix; per-task statuses and reasons are in benchmarks/results/published/.",
transform=ax.transAxes,
color="#57606a",
color="#8b949e",
fontsize=9,
)
ax.grid(axis="x", color="#d0d7de", linewidth=0.8, alpha=0.8)
ax.grid(axis="x", color="#30363d", linewidth=0.8, alpha=0.8)
ax.set_axisbelow(True)
ax.tick_params(axis="x", colors="#57606a")
ax.tick_params(axis="y", colors="#24292f", length=0, pad=8)
ax.tick_params(axis="x", colors="#8b949e")
ax.tick_params(axis="y", colors="#e6edf3", length=0, pad=8)
for spine in ax.spines.values():
spine.set_visible(False)
+13 -12
View File
@@ -20,12 +20,12 @@ DEFAULT_INPUT_DIR = ROOT / "benchmarks" / "results" / "published"
DEFAULT_OUTPUT = ROOT / "docs" / "assets" / "autocad-mcp-taskmatrix.svg"
STATUS_COLORS = {
"pass": "#2da44e",
"partial": "#d4a72c",
"fail": "#cf222e",
"pass": "#238636",
"partial": "#d29922",
"fail": "#da3633",
"timeout": "#a40e26",
"unsupported": "#d0d7de",
"not_run": "#f6f8fa",
"unsupported": "#30363d",
"not_run": "#161b22",
}
STATUS_GLYPHS = {
@@ -78,8 +78,8 @@ def render_chart(reports: list[dict[str, Any]], output: Path) -> None:
figsize=(3.4 + 2.4 * len(servers), 1.8 + 0.52 * len(task_ids)),
constrained_layout=True,
)
fig.patch.set_facecolor("#f6f8fa")
ax.set_facecolor("#f6f8fa")
fig.patch.set_facecolor("#0d1117")
ax.set_facecolor("#0d1117")
for row, task_id in enumerate(task_ids):
for col, server in enumerate(servers):
@@ -91,11 +91,11 @@ def render_chart(reports: list[dict[str, Any]], output: Path) -> None:
0.88,
0.84,
facecolor=color,
edgecolor="#d0d7de",
edgecolor="#30363d",
linewidth=0.8,
)
)
glyph_color = "#ffffff" if status in ("pass", "fail", "timeout") else "#24292f"
glyph_color = "#ffffff" if status in ("pass", "fail", "timeout") else "#e6edf3"
ax.text(
col + 0.5,
row + 0.5,
@@ -110,10 +110,10 @@ def render_chart(reports: list[dict[str, Any]], output: Path) -> None:
ax.set_xlim(0, len(servers))
ax.set_ylim(len(task_ids), 0)
ax.set_xticks([index + 0.5 for index in range(len(servers))])
ax.set_xticklabels(servers, color="#24292f", fontsize=10, fontweight="bold")
ax.set_xticklabels(servers, color="#e6edf3", fontsize=10, fontweight="bold")
ax.xaxis.set_ticks_position("top")
ax.set_yticks([index + 0.5 for index in range(len(task_ids))])
ax.set_yticklabels(task_labels, color="#24292f", fontsize=9)
ax.set_yticklabels(task_labels, color="#e6edf3", fontsize=9)
ax.tick_params(length=0)
for spine in ax.spines.values():
spine.set_visible(False)
@@ -123,7 +123,7 @@ def render_chart(reports: list[dict[str, Any]], output: Path) -> None:
loc="left",
fontsize=17,
fontweight="bold",
color="#24292f",
color="#e6edf3",
pad=34,
)
@@ -140,6 +140,7 @@ def render_chart(reports: list[dict[str, Any]], output: Path) -> None:
ncol=4,
frameon=False,
fontsize=9,
labelcolor="#e6edf3",
)
output.parent.mkdir(parents=True, exist_ok=True)
+11 -11
View File
@@ -61,18 +61,18 @@ def render_chart(data: dict[str, Any], output: Path) -> None:
values = [item["wall_ms"] for item in workloads]
fig, ax = plt.subplots(figsize=(12, 4.6), constrained_layout=True)
fig.patch.set_facecolor("#f6f8fa")
ax.set_facecolor("#f6f8fa")
bars = ax.barh(labels, values, color="#0969da", height=0.58)
fig.patch.set_facecolor("#0d1117")
ax.set_facecolor("#0d1117")
bars = ax.barh(labels, values, color="#58a6ff", height=0.58)
ax.set_xscale("log")
ax.set_xlabel("Wall time in ms (log scale) — lower is better", color="#24292f", labelpad=10)
ax.set_xlabel("Wall time in ms (log scale) — lower is better", color="#e6edf3", labelpad=10)
ax.set_title(
"Headless performance — ezdxf engine",
loc="left",
fontsize=18,
fontweight="bold",
color="#24292f",
color="#e6edf3",
pad=28,
)
env = data.get("environment", {})
@@ -82,7 +82,7 @@ def render_chart(data: dict[str, Any], output: Path) -> None:
f"Fixed workloads via the same backend methods the MCP tools call · "
f"Python {env.get('python', '?')} · {env.get('platform', '?')}",
transform=ax.transAxes,
color="#57606a",
color="#8b949e",
fontsize=9,
)
@@ -92,7 +92,7 @@ def render_chart(data: dict[str, Any], output: Path) -> None:
bar.get_y() + bar.get_height() / 2,
_annotation(item),
va="center",
color="#24292f",
color="#e6edf3",
fontweight="bold",
fontsize=9,
)
@@ -104,13 +104,13 @@ def render_chart(data: dict[str, Any], output: Path) -> None:
"Self-measurement only: competitor servers would pay extra stdio serialization cost in-process runs do not. "
"Reproduce: python -m benchmarks.perf_suite",
transform=ax.transAxes,
color="#57606a",
color="#8b949e",
fontsize=9,
)
ax.grid(axis="x", color="#d0d7de", linewidth=0.8, alpha=0.8)
ax.grid(axis="x", color="#30363d", linewidth=0.8, alpha=0.8)
ax.set_axisbelow(True)
ax.tick_params(axis="x", colors="#57606a")
ax.tick_params(axis="y", colors="#24292f", length=0, pad=8)
ax.tick_params(axis="x", colors="#8b949e")
ax.tick_params(axis="y", colors="#e6edf3", length=0, pad=8)
for spine in ax.spines.values():
spine.set_visible(False)
File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 91 KiB

+35 -35
View File
@@ -25,7 +25,7 @@ L 864 345.6
L 864 0
L 0 0
z
" style="fill: #f6f8fa"/>
" style="fill: #0d1117"/>
</g>
<g id="axes_1">
<g id="patch_2">
@@ -34,28 +34,28 @@ L 786.764245 288.476727
L 786.764245 44.677428
L 141.00649 44.677428
z
" style="fill: #f6f8fa"/>
" style="fill: #0d1117"/>
</g>
<g id="matplotlib.axis_1">
<g id="xtick_1">
<g id="line2d_1">
<path d="M 141.00649 288.476727
L 141.00649 44.677428
" clip-path="url(#p304dee3b76)" style="fill: none; stroke: #d0d7de; stroke-opacity: 0.8; stroke-width: 0.8; stroke-linecap: square"/>
" clip-path="url(#p304dee3b76)" style="fill: none; stroke: #30363d; stroke-opacity: 0.8; stroke-width: 0.8; stroke-linecap: square"/>
</g>
<g id="line2d_2">
<defs>
<path id="m394179495f" d="M 0 0
<path id="m23c3ac318b" d="M 0 0
L 0 3.5
" style="stroke: #57606a; stroke-width: 0.8"/>
" style="stroke: #8b949e; stroke-width: 0.8"/>
</defs>
<g>
<use xlink:href="#m394179495f" x="141.00649" y="288.476727" style="fill: #57606a; stroke: #57606a; stroke-width: 0.8"/>
<use xlink:href="#m23c3ac318b" x="141.00649" y="288.476727" style="fill: #8b949e; stroke: #8b949e; stroke-width: 0.8"/>
</g>
</g>
<g id="text_1">
<!-- 0 -->
<g style="fill: #57606a" transform="translate(137.82524 303.075165) scale(0.1 -0.1)">
<g style="fill: #8b949e" transform="translate(137.82524 303.075165) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-30" d="M 2034 4250
Q 1547 4250 1301 3770
@@ -87,16 +87,16 @@ z
<g id="line2d_3">
<path d="M 270.158041 288.476727
L 270.158041 44.677428
" clip-path="url(#p304dee3b76)" style="fill: none; stroke: #d0d7de; stroke-opacity: 0.8; stroke-width: 0.8; stroke-linecap: square"/>
" clip-path="url(#p304dee3b76)" style="fill: none; stroke: #30363d; stroke-opacity: 0.8; stroke-width: 0.8; stroke-linecap: square"/>
</g>
<g id="line2d_4">
<g>
<use xlink:href="#m394179495f" x="270.158041" y="288.476727" style="fill: #57606a; stroke: #57606a; stroke-width: 0.8"/>
<use xlink:href="#m23c3ac318b" x="270.158041" y="288.476727" style="fill: #8b949e; stroke: #8b949e; stroke-width: 0.8"/>
</g>
</g>
<g id="text_2">
<!-- 20 -->
<g style="fill: #57606a" transform="translate(263.795541 303.075165) scale(0.1 -0.1)">
<g style="fill: #8b949e" transform="translate(263.795541 303.075165) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-32" d="M 1228 531
L 3431 531
@@ -132,16 +132,16 @@ z
<g id="line2d_5">
<path d="M 399.309592 288.476727
L 399.309592 44.677428
" clip-path="url(#p304dee3b76)" style="fill: none; stroke: #d0d7de; stroke-opacity: 0.8; stroke-width: 0.8; stroke-linecap: square"/>
" clip-path="url(#p304dee3b76)" style="fill: none; stroke: #30363d; stroke-opacity: 0.8; stroke-width: 0.8; stroke-linecap: square"/>
</g>
<g id="line2d_6">
<g>
<use xlink:href="#m394179495f" x="399.309592" y="288.476727" style="fill: #57606a; stroke: #57606a; stroke-width: 0.8"/>
<use xlink:href="#m23c3ac318b" x="399.309592" y="288.476727" style="fill: #8b949e; stroke: #8b949e; stroke-width: 0.8"/>
</g>
</g>
<g id="text_3">
<!-- 40 -->
<g style="fill: #57606a" transform="translate(392.947092 303.075165) scale(0.1 -0.1)">
<g style="fill: #8b949e" transform="translate(392.947092 303.075165) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-34" d="M 2419 4116
L 825 1625
@@ -172,16 +172,16 @@ z
<g id="line2d_7">
<path d="M 528.461143 288.476727
L 528.461143 44.677428
" clip-path="url(#p304dee3b76)" style="fill: none; stroke: #d0d7de; stroke-opacity: 0.8; stroke-width: 0.8; stroke-linecap: square"/>
" clip-path="url(#p304dee3b76)" style="fill: none; stroke: #30363d; stroke-opacity: 0.8; stroke-width: 0.8; stroke-linecap: square"/>
</g>
<g id="line2d_8">
<g>
<use xlink:href="#m394179495f" x="528.461143" y="288.476727" style="fill: #57606a; stroke: #57606a; stroke-width: 0.8"/>
<use xlink:href="#m23c3ac318b" x="528.461143" y="288.476727" style="fill: #8b949e; stroke: #8b949e; stroke-width: 0.8"/>
</g>
</g>
<g id="text_4">
<!-- 60 -->
<g style="fill: #57606a" transform="translate(522.098643 303.075165) scale(0.1 -0.1)">
<g style="fill: #8b949e" transform="translate(522.098643 303.075165) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-36" d="M 2113 2584
Q 1688 2584 1439 2293
@@ -223,16 +223,16 @@ z
<g id="line2d_9">
<path d="M 657.612694 288.476727
L 657.612694 44.677428
" clip-path="url(#p304dee3b76)" style="fill: none; stroke: #d0d7de; stroke-opacity: 0.8; stroke-width: 0.8; stroke-linecap: square"/>
" clip-path="url(#p304dee3b76)" style="fill: none; stroke: #30363d; stroke-opacity: 0.8; stroke-width: 0.8; stroke-linecap: square"/>
</g>
<g id="line2d_10">
<g>
<use xlink:href="#m394179495f" x="657.612694" y="288.476727" style="fill: #57606a; stroke: #57606a; stroke-width: 0.8"/>
<use xlink:href="#m23c3ac318b" x="657.612694" y="288.476727" style="fill: #8b949e; stroke: #8b949e; stroke-width: 0.8"/>
</g>
</g>
<g id="text_5">
<!-- 80 -->
<g style="fill: #57606a" transform="translate(651.250194 303.075165) scale(0.1 -0.1)">
<g style="fill: #8b949e" transform="translate(651.250194 303.075165) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-38" d="M 2034 2216
Q 1584 2216 1326 1975
@@ -283,16 +283,16 @@ z
<g id="line2d_11">
<path d="M 786.764245 288.476727
L 786.764245 44.677428
" clip-path="url(#p304dee3b76)" style="fill: none; stroke: #d0d7de; stroke-opacity: 0.8; stroke-width: 0.8; stroke-linecap: square"/>
" clip-path="url(#p304dee3b76)" style="fill: none; stroke: #30363d; stroke-opacity: 0.8; stroke-width: 0.8; stroke-linecap: square"/>
</g>
<g id="line2d_12">
<g>
<use xlink:href="#m394179495f" x="786.764245" y="288.476727" style="fill: #57606a; stroke: #57606a; stroke-width: 0.8"/>
<use xlink:href="#m23c3ac318b" x="786.764245" y="288.476727" style="fill: #8b949e; stroke: #8b949e; stroke-width: 0.8"/>
</g>
</g>
<g id="text_6">
<!-- 100 -->
<g style="fill: #57606a" transform="translate(777.220495 303.075165) scale(0.1 -0.1)">
<g style="fill: #8b949e" transform="translate(777.220495 303.075165) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-31" d="M 794 531
L 1825 531
@@ -317,7 +317,7 @@ z
</g>
<g id="text_7">
<!-- Weighted live-run score / 100 (fixed 10-task matrix) -->
<g style="fill: #24292f" transform="translate(334.326774 322.75329) scale(0.1 -0.1)">
<g style="fill: #e6edf3" transform="translate(334.326774 322.75329) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-57" d="M 213 4666
L 850 4666
@@ -836,7 +836,7 @@ z
<g id="line2d_13"/>
<g id="text_8">
<!-- puran-water-autocad-mcp -->
<g style="fill: #24292f" transform="translate(3.00024 256.281616) scale(0.1 -0.1)">
<g style="fill: #e6edf3" transform="translate(3.00024 256.281616) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-70" d="M 1159 525
L 1159 -1331
@@ -911,7 +911,7 @@ z
<g id="line2d_14"/>
<g id="text_9">
<!-- beiming183-autocad-mcp -->
<g style="fill: #24292f" transform="translate(4.151802 170.376296) scale(0.1 -0.1)">
<g style="fill: #e6edf3" transform="translate(4.151802 170.376296) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-62" d="M 3116 1747
Q 3116 2381 2855 2742
@@ -1001,7 +1001,7 @@ z
<g id="line2d_15"/>
<g id="text_10">
<!-- autocad-mcp-pro -->
<g style="fill: #24292f" transform="translate(47.370552 84.470976) scale(0.1 -0.1)">
<g style="fill: #e6edf3" transform="translate(47.370552 84.470976) scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-61"/>
<use xlink:href="#DejaVuSans-75" transform="translate(61.279297 0)"/>
<use xlink:href="#DejaVuSans-74" transform="translate(124.658203 0)"/>
@@ -1027,7 +1027,7 @@ L 431.59748 277.394941
L 431.59748 227.569855
L 141.00649 227.569855
z
" clip-path="url(#p304dee3b76)" style="fill: #6e7781"/>
" clip-path="url(#p304dee3b76)" style="fill: #484f58"/>
</g>
<g id="patch_4">
<path d="M 141.00649 191.48962
@@ -1035,7 +1035,7 @@ L 463.885367 191.48962
L 463.885367 141.664534
L 141.00649 141.664534
z
" clip-path="url(#p304dee3b76)" style="fill: #6e7781"/>
" clip-path="url(#p304dee3b76)" style="fill: #484f58"/>
</g>
<g id="patch_5">
<path d="M 141.00649 105.5843
@@ -1043,11 +1043,11 @@ L 786.764245 105.5843
L 786.764245 55.759214
L 141.00649 55.759214
z
" clip-path="url(#p304dee3b76)" style="fill: #0969da"/>
" clip-path="url(#p304dee3b76)" style="fill: #58a6ff"/>
</g>
<g id="text_11">
<!-- Same 10 tasks, same harness, pinned competitor commits; artifacts verified by re-opening the DXF -->
<g style="fill: #57606a" transform="translate(141.00649 39.801442) scale(0.1 -0.1)">
<g style="fill: #8b949e" transform="translate(141.00649 39.801442) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-53" d="M 3425 4513
L 3425 3897
@@ -1269,7 +1269,7 @@ z
</g>
<g id="text_12">
<!-- 45 (4/10 pass, 50% coverage) -->
<g style="fill: #24292f" transform="translate(439.346573 255.197241) scale(0.1 -0.1)">
<g style="fill: #e6edf3" transform="translate(439.346573 255.197241) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-Bold-34" d="M 2356 3675
L 1038 1722
@@ -1692,7 +1692,7 @@ z
</g>
<g id="text_13">
<!-- 50 (5/10 pass, 50% coverage) -->
<g style="fill: #24292f" transform="translate(471.63446 169.291921) scale(0.1 -0.1)">
<g style="fill: #e6edf3" transform="translate(471.63446 169.291921) scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-Bold-35"/>
<use xlink:href="#DejaVuSans-Bold-30" transform="translate(69.580078 0)"/>
<use xlink:href="#DejaVuSans-Bold-20" transform="translate(139.160156 0)"/>
@@ -1726,7 +1726,7 @@ z
</g>
<g id="text_14">
<!-- 100 (10/10 pass, 100% coverage) -->
<g style="fill: #24292f" transform="translate(670.527849 83.386601) scale(0.1 -0.1)">
<g style="fill: #e6edf3" transform="translate(670.527849 83.386601) scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-Bold-31"/>
<use xlink:href="#DejaVuSans-Bold-30" transform="translate(69.580078 0)"/>
<use xlink:href="#DejaVuSans-Bold-30" transform="translate(139.160156 0)"/>
@@ -1763,7 +1763,7 @@ z
</g>
<g id="text_15">
<!-- Unsupported tasks score 0 in the fixed matrix; per-task statuses and reasons are in benchmarks/results/published/. -->
<g style="fill: #57606a" transform="translate(141.00649 342.112573) scale(0.09 -0.09)">
<g style="fill: #8b949e" transform="translate(141.00649 342.112573) scale(0.09 -0.09)">
<defs>
<path id="DejaVuSans-55" d="M 556 4666
L 1191 4666
@@ -1908,7 +1908,7 @@ z
</g>
<g id="text_16">
<!-- Live-run benchmark - headless ezdxf lane -->
<g style="fill: #24292f" transform="translate(141.00649 16.677428) scale(0.18 -0.18)">
<g style="fill: #e6edf3" transform="translate(141.00649 16.677428) scale(0.18 -0.18)">
<defs>
<path id="DejaVuSans-Bold-4c" d="M 588 4666
L 1791 4666

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 69 KiB

+29 -29
View File
@@ -25,7 +25,7 @@ L 864 331.2
L 864 0
L 0 0
z
" style="fill: #f6f8fa"/>
" style="fill: #0d1117"/>
</g>
<g id="axes_1">
<g id="patch_2">
@@ -34,28 +34,28 @@ L 750.185843 273.231039
L 750.185843 44.677427
L 263.71899 44.677427
z
" style="fill: #f6f8fa"/>
" style="fill: #0d1117"/>
</g>
<g id="matplotlib.axis_1">
<g id="xtick_1">
<g id="line2d_1">
<path d="M 371.504738 273.231039
L 371.504738 44.677427
" clip-path="url(#p241cb65ad2)" style="fill: none; stroke: #d0d7de; stroke-opacity: 0.8; stroke-width: 0.8; stroke-linecap: square"/>
" clip-path="url(#p241cb65ad2)" style="fill: none; stroke: #30363d; stroke-opacity: 0.8; stroke-width: 0.8; stroke-linecap: square"/>
</g>
<g id="line2d_2">
<defs>
<path id="m1ed7e12a5f" d="M 0 0
<path id="m24a80d22c9" d="M 0 0
L 0 3.5
" style="stroke: #57606a; stroke-width: 0.8"/>
" style="stroke: #8b949e; stroke-width: 0.8"/>
</defs>
<g>
<use xlink:href="#m1ed7e12a5f" x="371.504738" y="273.231039" style="fill: #57606a; stroke: #57606a; stroke-width: 0.8"/>
<use xlink:href="#m24a80d22c9" x="371.504738" y="273.231039" style="fill: #8b949e; stroke: #8b949e; stroke-width: 0.8"/>
</g>
</g>
<g id="text_1">
<!-- $\mathdefault{10^{3}}$ -->
<g style="fill: #57606a" transform="translate(362.704738 287.829476) scale(0.1 -0.1)">
<g style="fill: #8b949e" transform="translate(362.704738 287.829476) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-31" d="M 794 531
L 1825 531
@@ -135,16 +135,16 @@ z
<g id="line2d_3">
<path d="M 556.489728 273.231039
L 556.489728 44.677427
" clip-path="url(#p241cb65ad2)" style="fill: none; stroke: #d0d7de; stroke-opacity: 0.8; stroke-width: 0.8; stroke-linecap: square"/>
" clip-path="url(#p241cb65ad2)" style="fill: none; stroke: #30363d; stroke-opacity: 0.8; stroke-width: 0.8; stroke-linecap: square"/>
</g>
<g id="line2d_4">
<g>
<use xlink:href="#m1ed7e12a5f" x="556.489728" y="273.231039" style="fill: #57606a; stroke: #57606a; stroke-width: 0.8"/>
<use xlink:href="#m24a80d22c9" x="556.489728" y="273.231039" style="fill: #8b949e; stroke: #8b949e; stroke-width: 0.8"/>
</g>
</g>
<g id="text_2">
<!-- $\mathdefault{10^{4}}$ -->
<g style="fill: #57606a" transform="translate(547.689728 287.829476) scale(0.1 -0.1)">
<g style="fill: #8b949e" transform="translate(547.689728 287.829476) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-34" d="M 2419 4116
L 825 1625
@@ -176,16 +176,16 @@ z
<g id="line2d_5">
<path d="M 741.474717 273.231039
L 741.474717 44.677427
" clip-path="url(#p241cb65ad2)" style="fill: none; stroke: #d0d7de; stroke-opacity: 0.8; stroke-width: 0.8; stroke-linecap: square"/>
" clip-path="url(#p241cb65ad2)" style="fill: none; stroke: #30363d; stroke-opacity: 0.8; stroke-width: 0.8; stroke-linecap: square"/>
</g>
<g id="line2d_6">
<g>
<use xlink:href="#m1ed7e12a5f" x="741.474717" y="273.231039" style="fill: #57606a; stroke: #57606a; stroke-width: 0.8"/>
<use xlink:href="#m24a80d22c9" x="741.474717" y="273.231039" style="fill: #8b949e; stroke: #8b949e; stroke-width: 0.8"/>
</g>
</g>
<g id="text_3">
<!-- $\mathdefault{10^{5}}$ -->
<g style="fill: #57606a" transform="translate(732.674717 287.829476) scale(0.1 -0.1)">
<g style="fill: #8b949e" transform="translate(732.674717 287.829476) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-35" d="M 691 4666
L 3169 4666
@@ -387,7 +387,7 @@ L 0 2
</g>
<g id="text_4">
<!-- Wall time in ms (log scale) — lower is better -->
<g style="fill: #24292f" transform="translate(396.480541 307.507601) scale(0.1 -0.1)">
<g style="fill: #e6edf3" transform="translate(396.480541 307.507601) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-57" d="M 213 4666
L 850 4666
@@ -807,7 +807,7 @@ z
<g id="line2d_30"/>
<g id="text_5">
<!-- Premium pass: layers + part + dims + full critique -->
<g style="fill: #24292f" transform="translate(3.00024 249.810439) scale(0.1 -0.1)">
<g style="fill: #e6edf3" transform="translate(3.00024 249.810439) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-50" d="M 1259 4147
L 1259 2394
@@ -1054,7 +1054,7 @@ z
<g id="line2d_31"/>
<g id="text_6">
<!-- Create 2,000 lines (individual calls) -->
<g style="fill: #24292f" transform="translate(79.172115 191.772448) scale(0.1 -0.1)">
<g style="fill: #e6edf3" transform="translate(79.172115 191.772448) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-43" d="M 4122 4306
L 4122 3641
@@ -1165,7 +1165,7 @@ z
<g id="line2d_32"/>
<g id="text_7">
<!-- Region query over 10,000 entities -->
<g style="fill: #24292f" transform="translate(85.361177 133.734456) scale(0.1 -0.1)">
<g style="fill: #e6edf3" transform="translate(85.361177 133.734456) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-52" d="M 2841 2188
Q 3044 2119 3236 1894
@@ -1236,7 +1236,7 @@ z
<g id="line2d_33"/>
<g id="text_8">
<!-- 10,000 lines: build + DXF export + reopen -->
<g style="fill: #24292f" transform="translate(42.81274 75.696464) scale(0.1 -0.1)">
<g style="fill: #e6edf3" transform="translate(42.81274 75.696464) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-44" d="M 1259 4147
L 1259 519
@@ -1352,7 +1352,7 @@ L 278.928931 262.842238
L 278.928931 229.180203
L -185168.439812 229.180203
z
" clip-path="url(#p241cb65ad2)" style="fill: #0969da"/>
" clip-path="url(#p241cb65ad2)" style="fill: #58a6ff"/>
</g>
<g id="patch_4">
<path d="M -185168.439812 204.804247
@@ -1360,7 +1360,7 @@ L 335.058784 204.804247
L 335.058784 171.142211
L -185168.439812 171.142211
z
" clip-path="url(#p241cb65ad2)" style="fill: #0969da"/>
" clip-path="url(#p241cb65ad2)" style="fill: #58a6ff"/>
</g>
<g id="patch_5">
<path d="M -185168.439812 146.766255
@@ -1368,7 +1368,7 @@ L 470.624428 146.766255
L 470.624428 113.10422
L -185168.439812 113.10422
z
" clip-path="url(#p241cb65ad2)" style="fill: #0969da"/>
" clip-path="url(#p241cb65ad2)" style="fill: #58a6ff"/>
</g>
<g id="patch_6">
<path d="M -185168.439812 88.728263
@@ -1376,11 +1376,11 @@ L 583.127751 88.728263
L 583.127751 55.066228
L -185168.439812 55.066228
z
" clip-path="url(#p241cb65ad2)" style="fill: #0969da"/>
" clip-path="url(#p241cb65ad2)" style="fill: #58a6ff"/>
</g>
<g id="text_9">
<!-- Fixed workloads via the same backend methods the MCP tools call · Python 3.14.0 · Windows-11-10.0.26200-SP0 -->
<g style="fill: #57606a" transform="translate(263.71899 40.106355) scale(0.09 -0.09)">
<g style="fill: #8b949e" transform="translate(263.71899 40.106355) scale(0.09 -0.09)">
<defs>
<path id="DejaVuSans-6b" d="M 581 4863
L 1159 4863
@@ -1625,7 +1625,7 @@ z
</g>
<g id="text_10">
<!-- 0.32 s · 0 issues -->
<g style="fill: #24292f" transform="translate(288.033526 248.494658) scale(0.09 -0.09)">
<g style="fill: #e6edf3" transform="translate(288.033526 248.494658) scale(0.09 -0.09)">
<defs>
<path id="DejaVuSans-Bold-30" d="M 2944 2338
Q 2944 3213 2780 3570
@@ -1833,7 +1833,7 @@ z
</g>
<g id="text_11">
<!-- 0.64 s · 3,148 entities/s -->
<g style="fill: #24292f" transform="translate(344.163379 190.456667) scale(0.09 -0.09)">
<g style="fill: #e6edf3" transform="translate(344.163379 190.456667) scale(0.09 -0.09)">
<defs>
<path id="DejaVuSans-Bold-36" d="M 2316 2303
Q 2000 2303 1842 2098
@@ -2028,7 +2028,7 @@ z
</g>
<g id="text_12">
<!-- 3.43 s · 2,500 matched -->
<g style="fill: #24292f" transform="translate(479.729024 132.418675) scale(0.09 -0.09)">
<g style="fill: #e6edf3" transform="translate(479.729024 132.418675) scale(0.09 -0.09)">
<defs>
<path id="DejaVuSans-Bold-35" d="M 678 4666
L 3669 4666
@@ -2218,7 +2218,7 @@ z
</g>
<g id="text_13">
<!-- 13.93 s · 718 entities/s -->
<g style="fill: #24292f" transform="translate(592.232346 74.380683) scale(0.09 -0.09)">
<g style="fill: #e6edf3" transform="translate(592.232346 74.380683) scale(0.09 -0.09)">
<defs>
<path id="DejaVuSans-Bold-39" d="M 641 103
L 641 966
@@ -2291,7 +2291,7 @@ z
</g>
<g id="text_14">
<!-- Self-measurement only: competitor servers would pay extra stdio serialization cost in-process runs do not. Reproduce: python -m benchmarks.perf_suite -->
<g style="fill: #57606a" transform="translate(263.71899 328.083906) scale(0.09 -0.09)">
<g style="fill: #8b949e" transform="translate(263.71899 328.083906) scale(0.09 -0.09)">
<defs>
<path id="DejaVuSans-7a" d="M 353 3500
L 3084 3500
@@ -2467,7 +2467,7 @@ z
</g>
<g id="text_15">
<!-- Headless performance — ezdxf engine -->
<g style="fill: #24292f" transform="translate(263.71899 16.677427) scale(0.18 -0.18)">
<g style="fill: #e6edf3" transform="translate(263.71899 16.677427) scale(0.18 -0.18)">
<defs>
<path id="DejaVuSans-Bold-48" d="M 588 4666
L 1791 4666

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 87 KiB

+65 -65
View File
@@ -25,7 +25,7 @@ L 763.2 504
L 763.2 0
L 0 0
z
" style="fill: #f6f8fa"/>
" style="fill: #0d1117"/>
</g>
<g id="axes_1">
<g id="patch_2">
@@ -34,7 +34,7 @@ L 760.19976 472.131242
L 760.19976 49.917584
L 148.330396 49.917584
z
" style="fill: #f6f8fa"/>
" style="fill: #0d1117"/>
</g>
<g id="patch_3">
<path d="M 160.567784 53.295293
@@ -42,7 +42,7 @@ L 340.049464 53.295293
L 340.049464 88.76124
L 160.567784 88.76124
z
" clip-path="url(#p1540b2959a)" style="fill: #2da44e; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #238636; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_4">
<path d="M 364.524238 53.295293
@@ -50,7 +50,7 @@ L 544.005918 53.295293
L 544.005918 88.76124
L 364.524238 88.76124
z
" clip-path="url(#p1540b2959a)" style="fill: #2da44e; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #238636; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_5">
<path d="M 568.480693 53.295293
@@ -58,7 +58,7 @@ L 747.962373 53.295293
L 747.962373 88.76124
L 568.480693 88.76124
z
" clip-path="url(#p1540b2959a)" style="fill: #2da44e; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #238636; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_6">
<path d="M 160.567784 95.516659
@@ -66,7 +66,7 @@ L 340.049464 95.516659
L 340.049464 130.982606
L 160.567784 130.982606
z
" clip-path="url(#p1540b2959a)" style="fill: #2da44e; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #238636; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_7">
<path d="M 364.524238 95.516659
@@ -74,7 +74,7 @@ L 544.005918 95.516659
L 544.005918 130.982606
L 364.524238 130.982606
z
" clip-path="url(#p1540b2959a)" style="fill: #2da44e; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #238636; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_8">
<path d="M 568.480693 95.516659
@@ -82,7 +82,7 @@ L 747.962373 95.516659
L 747.962373 130.982606
L 568.480693 130.982606
z
" clip-path="url(#p1540b2959a)" style="fill: #2da44e; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #238636; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_9">
<path d="M 160.567784 137.738025
@@ -90,7 +90,7 @@ L 340.049464 137.738025
L 340.049464 173.203972
L 160.567784 173.203972
z
" clip-path="url(#p1540b2959a)" style="fill: #2da44e; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #238636; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_10">
<path d="M 364.524238 137.738025
@@ -98,7 +98,7 @@ L 544.005918 137.738025
L 544.005918 173.203972
L 364.524238 173.203972
z
" clip-path="url(#p1540b2959a)" style="fill: #2da44e; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #238636; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_11">
<path d="M 568.480693 137.738025
@@ -106,7 +106,7 @@ L 747.962373 137.738025
L 747.962373 173.203972
L 568.480693 173.203972
z
" clip-path="url(#p1540b2959a)" style="fill: #d4a72c; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #d29922; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_12">
<path d="M 160.567784 179.959391
@@ -114,7 +114,7 @@ L 340.049464 179.959391
L 340.049464 215.425338
L 160.567784 215.425338
z
" clip-path="url(#p1540b2959a)" style="fill: #2da44e; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #238636; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_13">
<path d="M 364.524238 179.959391
@@ -122,7 +122,7 @@ L 544.005918 179.959391
L 544.005918 215.425338
L 364.524238 215.425338
z
" clip-path="url(#p1540b2959a)" style="fill: #2da44e; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #238636; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_14">
<path d="M 568.480693 179.959391
@@ -130,7 +130,7 @@ L 747.962373 179.959391
L 747.962373 215.425338
L 568.480693 215.425338
z
" clip-path="url(#p1540b2959a)" style="fill: #2da44e; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #238636; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_15">
<path d="M 160.567784 222.180756
@@ -138,7 +138,7 @@ L 340.049464 222.180756
L 340.049464 257.646704
L 160.567784 257.646704
z
" clip-path="url(#p1540b2959a)" style="fill: #2da44e; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #238636; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_16">
<path d="M 364.524238 222.180756
@@ -146,7 +146,7 @@ L 544.005918 222.180756
L 544.005918 257.646704
L 364.524238 257.646704
z
" clip-path="url(#p1540b2959a)" style="fill: #d0d7de; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #30363d; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_17">
<path d="M 568.480693 222.180756
@@ -154,7 +154,7 @@ L 747.962373 222.180756
L 747.962373 257.646704
L 568.480693 257.646704
z
" clip-path="url(#p1540b2959a)" style="fill: #d0d7de; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #30363d; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_18">
<path d="M 160.567784 264.402122
@@ -162,7 +162,7 @@ L 340.049464 264.402122
L 340.049464 299.86807
L 160.567784 299.86807
z
" clip-path="url(#p1540b2959a)" style="fill: #2da44e; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #238636; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_19">
<path d="M 364.524238 264.402122
@@ -170,7 +170,7 @@ L 544.005918 264.402122
L 544.005918 299.86807
L 364.524238 299.86807
z
" clip-path="url(#p1540b2959a)" style="fill: #d0d7de; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #30363d; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_20">
<path d="M 568.480693 264.402122
@@ -178,7 +178,7 @@ L 747.962373 264.402122
L 747.962373 299.86807
L 568.480693 299.86807
z
" clip-path="url(#p1540b2959a)" style="fill: #d0d7de; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #30363d; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_21">
<path d="M 160.567784 306.623488
@@ -186,7 +186,7 @@ L 340.049464 306.623488
L 340.049464 342.089435
L 160.567784 342.089435
z
" clip-path="url(#p1540b2959a)" style="fill: #2da44e; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #238636; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_22">
<path d="M 364.524238 306.623488
@@ -194,7 +194,7 @@ L 544.005918 306.623488
L 544.005918 342.089435
L 364.524238 342.089435
z
" clip-path="url(#p1540b2959a)" style="fill: #d0d7de; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #30363d; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_23">
<path d="M 568.480693 306.623488
@@ -202,7 +202,7 @@ L 747.962373 306.623488
L 747.962373 342.089435
L 568.480693 342.089435
z
" clip-path="url(#p1540b2959a)" style="fill: #d0d7de; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #30363d; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_24">
<path d="M 160.567784 348.844854
@@ -210,7 +210,7 @@ L 340.049464 348.844854
L 340.049464 384.310801
L 160.567784 384.310801
z
" clip-path="url(#p1540b2959a)" style="fill: #2da44e; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #238636; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_25">
<path d="M 364.524238 348.844854
@@ -218,7 +218,7 @@ L 544.005918 348.844854
L 544.005918 384.310801
L 364.524238 384.310801
z
" clip-path="url(#p1540b2959a)" style="fill: #d0d7de; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #30363d; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_26">
<path d="M 568.480693 348.844854
@@ -226,7 +226,7 @@ L 747.962373 348.844854
L 747.962373 384.310801
L 568.480693 384.310801
z
" clip-path="url(#p1540b2959a)" style="fill: #d0d7de; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #30363d; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_27">
<path d="M 160.567784 391.06622
@@ -234,7 +234,7 @@ L 340.049464 391.06622
L 340.049464 426.532167
L 160.567784 426.532167
z
" clip-path="url(#p1540b2959a)" style="fill: #2da44e; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #238636; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_28">
<path d="M 364.524238 391.06622
@@ -242,7 +242,7 @@ L 544.005918 391.06622
L 544.005918 426.532167
L 364.524238 426.532167
z
" clip-path="url(#p1540b2959a)" style="fill: #2da44e; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #238636; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_29">
<path d="M 568.480693 391.06622
@@ -250,7 +250,7 @@ L 747.962373 391.06622
L 747.962373 426.532167
L 568.480693 426.532167
z
" clip-path="url(#p1540b2959a)" style="fill: #2da44e; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #238636; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_30">
<path d="M 160.567784 433.287586
@@ -258,7 +258,7 @@ L 340.049464 433.287586
L 340.049464 468.753533
L 160.567784 468.753533
z
" clip-path="url(#p1540b2959a)" style="fill: #2da44e; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #238636; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_31">
<path d="M 364.524238 433.287586
@@ -266,7 +266,7 @@ L 544.005918 433.287586
L 544.005918 468.753533
L 364.524238 468.753533
z
" clip-path="url(#p1540b2959a)" style="fill: #d0d7de; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #30363d; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="patch_32">
<path d="M 568.480693 433.287586
@@ -274,14 +274,14 @@ L 747.962373 433.287586
L 747.962373 468.753533
L 568.480693 468.753533
z
" clip-path="url(#p1540b2959a)" style="fill: #d0d7de; stroke: #d0d7de; stroke-width: 0.8; stroke-linejoin: miter"/>
" clip-path="url(#p1540b2959a)" style="fill: #30363d; stroke: #30363d; stroke-width: 0.8; stroke-linejoin: miter"/>
</g>
<g id="matplotlib.axis_1">
<g id="xtick_1">
<g id="line2d_1"/>
<g id="text_1">
<!-- autocad-mcp-pro -->
<g style="fill: #24292f" transform="translate(202.25003 44.337896) scale(0.1 -0.1)">
<g style="fill: #e6edf3" transform="translate(202.25003 44.337896) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-Bold-61" d="M 2106 1575
Q 1756 1575 1579 1456
@@ -533,7 +533,7 @@ z
<g id="line2d_2"/>
<g id="text_2">
<!-- beiming183-autocad-mcp -->
<g style="fill: #24292f" transform="translate(382.502578 44.259771) scale(0.1 -0.1)">
<g style="fill: #e6edf3" transform="translate(382.502578 44.259771) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-Bold-62" d="M 2400 722
Q 2759 722 2948 984
@@ -770,7 +770,7 @@ z
<g id="line2d_3"/>
<g id="text_3">
<!-- puran-water-autocad-mcp -->
<g style="fill: #24292f" transform="translate(584.789501 44.337896) scale(0.1 -0.1)">
<g style="fill: #e6edf3" transform="translate(584.789501 44.337896) scale(0.1 -0.1)">
<defs>
<path id="DejaVuSans-Bold-77" d="M 225 3500
L 1313 3500
@@ -821,7 +821,7 @@ z
<g id="line2d_4"/>
<g id="text_4">
<!-- core_geometry (creation) -->
<g style="fill: #24292f" transform="translate(27.740396 74.447564) scale(0.09 -0.09)">
<g style="fill: #e6edf3" transform="translate(27.740396 74.447564) scale(0.09 -0.09)">
<defs>
<path id="DejaVuSans-63" d="M 3122 3366
L 3122 2828
@@ -1141,7 +1141,7 @@ z
<g id="line2d_5"/>
<g id="text_5">
<!-- modify_query (editing) -->
<g style="fill: #24292f" transform="translate(39.582427 116.668929) scale(0.09 -0.09)">
<g style="fill: #e6edf3" transform="translate(39.582427 116.668929) scale(0.09 -0.09)">
<defs>
<path id="DejaVuSans-64" d="M 2906 2969
L 2906 4863
@@ -1269,7 +1269,7 @@ z
<g id="line2d_6"/>
<g id="text_6">
<!-- layers_linetypes (standards) -->
<g style="fill: #24292f" transform="translate(14.672115 158.890295) scale(0.09 -0.09)">
<g style="fill: #e6edf3" transform="translate(14.672115 158.890295) scale(0.09 -0.09)">
<defs>
<path id="DejaVuSans-6c" d="M 603 4863
L 1178 4863
@@ -1372,7 +1372,7 @@ z
<g id="line2d_7"/>
<g id="text_7">
<!-- dimensions (annotation) -->
<g style="fill: #24292f" transform="translate(32.064615 201.111661) scale(0.09 -0.09)">
<g style="fill: #e6edf3" transform="translate(32.064615 201.111661) scale(0.09 -0.09)">
<use xlink:href="#DejaVuSans-64"/>
<use xlink:href="#DejaVuSans-69" transform="translate(63.476562 0)"/>
<use xlink:href="#DejaVuSans-6d" transform="translate(91.259766 0)"/>
@@ -1404,7 +1404,7 @@ z
<g id="line2d_8"/>
<g id="text_8">
<!-- table_mleader (annotation) -->
<g style="fill: #24292f" transform="translate(18.807896 243.333027) scale(0.09 -0.09)">
<g style="fill: #e6edf3" transform="translate(18.807896 243.333027) scale(0.09 -0.09)">
<defs>
<path id="DejaVuSans-62" d="M 3116 1747
Q 3116 2381 2855 2742
@@ -1467,7 +1467,7 @@ z
<g id="line2d_9"/>
<g id="text_9">
<!-- transactions (reliability) -->
<g style="fill: #24292f" transform="translate(34.93899 285.554393) scale(0.09 -0.09)">
<g style="fill: #e6edf3" transform="translate(34.93899 285.554393) scale(0.09 -0.09)">
<use xlink:href="#DejaVuSans-74"/>
<use xlink:href="#DejaVuSans-72" transform="translate(39.208984 0)"/>
<use xlink:href="#DejaVuSans-61" transform="translate(80.322266 0)"/>
@@ -1502,7 +1502,7 @@ z
<g id="line2d_10"/>
<g id="text_10">
<!-- preflight (planning) -->
<g style="fill: #24292f" transform="translate(55.169302 327.775759) scale(0.09 -0.09)">
<g style="fill: #e6edf3" transform="translate(55.169302 327.775759) scale(0.09 -0.09)">
<defs>
<path id="DejaVuSans-68" d="M 3513 2113
L 3513 0
@@ -1552,7 +1552,7 @@ z
<g id="line2d_11"/>
<g id="text_11">
<!-- quality_refiner (quality) -->
<g style="fill: #24292f" transform="translate(36.364927 369.997124) scale(0.09 -0.09)">
<g style="fill: #e6edf3" transform="translate(36.364927 369.997124) scale(0.09 -0.09)">
<use xlink:href="#DejaVuSans-71"/>
<use xlink:href="#DejaVuSans-75" transform="translate(63.476562 0)"/>
<use xlink:href="#DejaVuSans-61" transform="translate(126.855469 0)"/>
@@ -1586,7 +1586,7 @@ z
<g id="line2d_12"/>
<g id="text_12">
<!-- dxf_roundtrip (interoperability) -->
<g style="fill: #24292f" transform="translate(3.00024 412.21849) scale(0.09 -0.09)">
<g style="fill: #e6edf3" transform="translate(3.00024 412.21849) scale(0.09 -0.09)">
<defs>
<path id="DejaVuSans-78" d="M 3513 3500
L 2247 1797
@@ -1644,7 +1644,7 @@ z
<g id="line2d_13"/>
<g id="text_13">
<!-- auditable_delivery (delivery) -->
<g style="fill: #24292f" transform="translate(13.071802 454.439856) scale(0.09 -0.09)">
<g style="fill: #e6edf3" transform="translate(13.071802 454.439856) scale(0.09 -0.09)">
<defs>
<path id="DejaVuSans-76" d="M 191 3500
L 800 3500
@@ -1764,7 +1764,7 @@ z
</g>
<g id="text_22">
<!-- ~ -->
<g style="fill: #24292f" transform="translate(653.612705 158.506311) scale(0.11 -0.11)">
<g style="fill: #e6edf3" transform="translate(653.612705 158.506311) scale(0.11 -0.11)">
<defs>
<path id="DejaVuSans-Bold-7e" d="M 4684 2656
L 4684 1894
@@ -1817,13 +1817,13 @@ z
</g>
<g id="text_27">
<!-- - -->
<g style="fill: #24292f" transform="translate(451.982578 242.949043) scale(0.11 -0.11)">
<g style="fill: #e6edf3" transform="translate(451.982578 242.949043) scale(0.11 -0.11)">
<use xlink:href="#DejaVuSans-Bold-2d"/>
</g>
</g>
<g id="text_28">
<!-- - -->
<g style="fill: #24292f" transform="translate(655.939033 242.949043) scale(0.11 -0.11)">
<g style="fill: #e6edf3" transform="translate(655.939033 242.949043) scale(0.11 -0.11)">
<use xlink:href="#DejaVuSans-Bold-2d"/>
</g>
</g>
@@ -1835,13 +1835,13 @@ z
</g>
<g id="text_30">
<!-- - -->
<g style="fill: #24292f" transform="translate(451.982578 285.170408) scale(0.11 -0.11)">
<g style="fill: #e6edf3" transform="translate(451.982578 285.170408) scale(0.11 -0.11)">
<use xlink:href="#DejaVuSans-Bold-2d"/>
</g>
</g>
<g id="text_31">
<!-- - -->
<g style="fill: #24292f" transform="translate(655.939033 285.170408) scale(0.11 -0.11)">
<g style="fill: #e6edf3" transform="translate(655.939033 285.170408) scale(0.11 -0.11)">
<use xlink:href="#DejaVuSans-Bold-2d"/>
</g>
</g>
@@ -1853,13 +1853,13 @@ z
</g>
<g id="text_33">
<!-- - -->
<g style="fill: #24292f" transform="translate(451.982578 327.391774) scale(0.11 -0.11)">
<g style="fill: #e6edf3" transform="translate(451.982578 327.391774) scale(0.11 -0.11)">
<use xlink:href="#DejaVuSans-Bold-2d"/>
</g>
</g>
<g id="text_34">
<!-- - -->
<g style="fill: #24292f" transform="translate(655.939033 327.391774) scale(0.11 -0.11)">
<g style="fill: #e6edf3" transform="translate(655.939033 327.391774) scale(0.11 -0.11)">
<use xlink:href="#DejaVuSans-Bold-2d"/>
</g>
</g>
@@ -1871,13 +1871,13 @@ z
</g>
<g id="text_36">
<!-- - -->
<g style="fill: #24292f" transform="translate(451.982578 369.61314) scale(0.11 -0.11)">
<g style="fill: #e6edf3" transform="translate(451.982578 369.61314) scale(0.11 -0.11)">
<use xlink:href="#DejaVuSans-Bold-2d"/>
</g>
</g>
<g id="text_37">
<!-- - -->
<g style="fill: #24292f" transform="translate(655.939033 369.61314) scale(0.11 -0.11)">
<g style="fill: #e6edf3" transform="translate(655.939033 369.61314) scale(0.11 -0.11)">
<use xlink:href="#DejaVuSans-Bold-2d"/>
</g>
</g>
@@ -1907,19 +1907,19 @@ z
</g>
<g id="text_42">
<!-- - -->
<g style="fill: #24292f" transform="translate(451.982578 454.055872) scale(0.11 -0.11)">
<g style="fill: #e6edf3" transform="translate(451.982578 454.055872) scale(0.11 -0.11)">
<use xlink:href="#DejaVuSans-Bold-2d"/>
</g>
</g>
<g id="text_43">
<!-- - -->
<g style="fill: #24292f" transform="translate(655.939033 454.055872) scale(0.11 -0.11)">
<g style="fill: #e6edf3" transform="translate(655.939033 454.055872) scale(0.11 -0.11)">
<use xlink:href="#DejaVuSans-Bold-2d"/>
</g>
</g>
<g id="text_44">
<!-- Task matrix — live headless lane -->
<g style="fill: #24292f" transform="translate(148.330396 15.917584) scale(0.17 -0.17)">
<g style="fill: #e6edf3" transform="translate(148.330396 15.917584) scale(0.17 -0.17)">
<defs>
<path id="DejaVuSans-Bold-54" d="M 31 4666
L 4331 4666
@@ -2081,11 +2081,11 @@ L 174.430396 495.514109
L 174.430396 489.214109
L 156.430396 489.214109
z
" style="fill: #2da44e"/>
" style="fill: #238636"/>
</g>
<g id="text_45">
<!-- pass -->
<g transform="translate(181.630396 495.514109) scale(0.09 -0.09)">
<g style="fill: #e6edf3" transform="translate(181.630396 495.514109) scale(0.09 -0.09)">
<use xlink:href="#DejaVuSans-70"/>
<use xlink:href="#DejaVuSans-61" transform="translate(63.476562 0)"/>
<use xlink:href="#DejaVuSans-73" transform="translate(124.755859 0)"/>
@@ -2098,11 +2098,11 @@ L 238.236177 495.514109
L 238.236177 489.214109
L 220.236177 489.214109
z
" style="fill: #d4a72c"/>
" style="fill: #d29922"/>
</g>
<g id="text_46">
<!-- partial -->
<g transform="translate(245.436177 495.514109) scale(0.09 -0.09)">
<g style="fill: #e6edf3" transform="translate(245.436177 495.514109) scale(0.09 -0.09)">
<use xlink:href="#DejaVuSans-70"/>
<use xlink:href="#DejaVuSans-61" transform="translate(63.476562 0)"/>
<use xlink:href="#DejaVuSans-72" transform="translate(124.755859 0)"/>
@@ -2118,11 +2118,11 @@ L 310.409146 495.514109
L 310.409146 489.214109
L 292.409146 489.214109
z
" style="fill: #cf222e"/>
" style="fill: #da3633"/>
</g>
<g id="text_47">
<!-- fail -->
<g transform="translate(317.609146 495.514109) scale(0.09 -0.09)">
<g style="fill: #e6edf3" transform="translate(317.609146 495.514109) scale(0.09 -0.09)">
<use xlink:href="#DejaVuSans-66"/>
<use xlink:href="#DejaVuSans-61" transform="translate(35.205078 0)"/>
<use xlink:href="#DejaVuSans-69" transform="translate(96.484375 0)"/>
@@ -2135,11 +2135,11 @@ L 367.293365 495.514109
L 367.293365 489.214109
L 349.293365 489.214109
z
" style="fill: #d0d7de"/>
" style="fill: #30363d"/>
</g>
<g id="text_48">
<!-- unsupported (no equivalent) -->
<g transform="translate(374.493365 495.514109) scale(0.09 -0.09)">
<g style="fill: #e6edf3" transform="translate(374.493365 495.514109) scale(0.09 -0.09)">
<use xlink:href="#DejaVuSans-75"/>
<use xlink:href="#DejaVuSans-6e" transform="translate(63.378906 0)"/>
<use xlink:href="#DejaVuSans-73" transform="translate(126.757812 0)"/>

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 70 KiB