Files
Umut CANandClaude Opus 5.5 17bf3a39ce release: 1.6.0
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
2026-09-25 00:17:17 +03:00

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())