The v1.6 roadmap in five tracks: 154 -> 247 registered tools in 28 groups. Evidence re-measured for the release: - correctness A/B against v1.5.1: 26/48 -> 48/48, 22 fixed, 0 regressed (ab-v1.5.1-vs-v1.6.0.json, replacing the -dev report); - the reference adapter on matrix v7: 21/21 (autocad-mcp-pro.json, which was the v3 run of 1.5); the published-report test follows it to v7; - the 100-point rubric re-scored per category, every withheld point named: 93 (the competitor rows are their July snapshots, not re-reviewed); - the perf lane as medians of five alternating runs, beside a v1.4.0 comparison on one interpreter (perf-v1.4.0-vs-v1.6.0.json). Two roadmap criteria are not green, and the changelog, the README and the roadmap say so: criterion 5 is withdrawn (track D, Plant 3D, dropped) and criterion 7 is not met (creation 1.25x / 1.38x v1.4.0's time, still 1.17x / 1.20x with the timeout off). Carried to 1.7. README rewritten for 1.6: what is new, the mechanical and architectural sheets, the rubric and task-matrix charts, the measured limits (including the four feature tables that ship empty), and the 1.7 roadmap. server.json describes the 1.6 surface and declares TOOL_PACKS. CLAUDE.md corrects the ISO 286 letter set and the empty feature tables. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FKFStjEFzpGyLq5bMpWxTd
64 lines
2.0 KiB
Python
64 lines
2.0 KiB
Python
"""Render the floor plan the README shows, using only the server's own tools.
|
|
|
|
The plan is ``EXAMPLE_SPEC`` from ``engineering/arch/spec.py`` - the document
|
|
``arch_plan_from_spec`` draws in one call: a 9 x 6 m brick ring split by an AAC
|
|
wall, an entrance door, an interior door, two windows, a straight stair, two
|
|
rooms whose areas are measured from the faces the walls enclose, the exterior
|
|
dimension chains and the door / window / room schedules. The ``arch_roundtrip``
|
|
benchmark task gates on the same spec, so a regression changes both.
|
|
|
|
Reproduce:
|
|
|
|
AUTOCAD_MCP_BACKEND=ezdxf uv run --frozen python scripts/render_readme_arch.py
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import asyncio
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
sys.path.insert(0, str(ROOT))
|
|
|
|
DEFAULT_OUTPUT = ROOT / "docs" / "assets" / "arch-showcase.png"
|
|
|
|
|
|
async def render(output: Path) -> dict:
|
|
from backends.ezdxf_backend import EzdxfBackend
|
|
from engineering.arch.spec import EXAMPLE_SPEC, draw_plan_from_spec
|
|
from engineering.critique import run_critique
|
|
|
|
backend = EzdxfBackend()
|
|
await backend.connect()
|
|
try:
|
|
await backend.drawing_new()
|
|
result = await draw_plan_from_spec(backend, EXAMPLE_SPEC)
|
|
issues = await run_critique(backend, None)
|
|
png = await backend.view_screenshot()
|
|
if not png:
|
|
raise RuntimeError("view_screenshot returned no PNG (is matplotlib installed?)")
|
|
output.parent.mkdir(parents=True, exist_ok=True)
|
|
output.write_bytes(png)
|
|
return {
|
|
"output": str(output),
|
|
"bytes": len(png),
|
|
"omitted": len(result.get("omitted", [])),
|
|
"critique": len(issues),
|
|
}
|
|
finally:
|
|
await backend.disconnect()
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument("--output", type=Path, default=DEFAULT_OUTPUT)
|
|
args = parser.parse_args()
|
|
print(asyncio.run(render(args.output)))
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|