The triage over the 43 unaddressed verdicts returned 4 code and 35 doc items. The code ones shipped in e24b46d; these are the documents. Twenty-one applied mechanically after a validation pass confirmed each locator still matched exactly once and each replacement was supported by the tree. Ten were held back because a re-verify pass found them mutually exclusive -- three patches rewriting the same benchmarks/README block, three rewriting the same OCS paragraph -- and applying them in sequence would have corrupted the files. Those were resolved by hand into one coherent edit each. One was rejected. The corrections worth naming: - **The A/B table contradicted itself in three files.** benchmarks/README.md and CLAUDE.md said 24 checks / 21-24 / 87.5% / "fixed 3" while the suite has 26 and the published JSON says 21/26, 80.8%, five fixed. All three now agree, and the five are split into the three new-capability `miss -> pass` and the two repaired-defect `fail -> pass`, which is the distinction the lane exists to make. - **"Every number below is produced by a script"** was false twice over: section 5's nine scores are literals a human assigned, and section 4 now quotes hand-collected timings. The claim is narrowed to the charts, which really are all rendered from committed data, and both exceptions are named. - **The OCS paragraph over-quantified.** TEXT rotation was given as the single exception; z components and HATCH boundaries are also entity-frame, and the live backend records `2d_polyline_coordinates_not_verified_against_live_autocad` in the same reason string. It now points at `ocs_normalized` as the live list. - **Transactions were shown as bare parity.** The server itself grades them differently -- `FeatureCapability(True, "undo_mark")` on COM against `(True, "snapshot")` headless -- and COM rollback sends `_UNDO B` without confirming it landed. The row says so. - **"Raw commands: Opt-in"** named a switch that does not exist. Both tools are registered unconditionally; `DANGEROUS_COMMANDS_ENABLED` only disables the sanitizer. - **"Wave A shipped 13 of a planned 39"** hardened an approximation: the only source writes `~39`. - **CAD_PROGID** said nothing beyond the connection was tested against BricsCAD/ZWCAD/GstarCAD, implying the connection was. It was not. Perf lane reworked against a fresh paired measurement. The old text claimed "28% slower than v1.4.0, median of three runs" and that `EZDXF_CALL_TIMEOUT=0` restored v1.4.0's numbers "exactly". Three problems: `perf_suite` runs each workload once per invocation and cannot produce a median, "exactly" was refuted by the figures in its own sentence, and the number moved when the timeout wrapper was rebuilt. It now reports the guard's cost -- +20.8% and +19.9%, three paired runs, median taken by hand -- says the figures have no published artifact, and says the wrapper rework recovered about a third of the v1.5.0 overhead rather than closing it. perf-ezdxf.json and the perf chart regenerated against the shipped code, and the README table rebuilt from that artifact so the two cannot drift. 1267 passed, 1 xfailed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
57 lines
1.4 KiB
JSON
57 lines
1.4 KiB
JSON
{
|
|
"backend": "ezdxf",
|
|
"environment": {
|
|
"implementation": "CPython",
|
|
"machine": "AMD64",
|
|
"platform": "Windows-10-10.0.26200-SP0",
|
|
"python": "3.11.15"
|
|
},
|
|
"schema_version": "perf/1.0",
|
|
"workloads": [
|
|
{
|
|
"description": "Create 2,000 lines through individual backend calls",
|
|
"detail": {
|
|
"entity_count": 2000
|
|
},
|
|
"metric": "entities_per_second",
|
|
"metric_value": 5715.8,
|
|
"wall_ms": 349.9,
|
|
"workload_id": "create_lines_2k"
|
|
},
|
|
{
|
|
"description": "Create 10,000 lines, export DXF, reopen and verify",
|
|
"detail": {
|
|
"build_ms": 1633.1,
|
|
"entity_count": 10000,
|
|
"export_ms": 273.0,
|
|
"file_bytes": 1369663,
|
|
"reopen_ms": 272.1
|
|
},
|
|
"metric": "entities_per_second",
|
|
"metric_value": 4590.8,
|
|
"wall_ms": 2178.3,
|
|
"workload_id": "roundtrip_10k"
|
|
},
|
|
{
|
|
"description": "Crossing-selection region query over 10,000 entities",
|
|
"detail": {
|
|
"entity_count": 10000
|
|
},
|
|
"metric": "entities_matched",
|
|
"metric_value": 2500.0,
|
|
"wall_ms": 2466.9,
|
|
"workload_id": "region_query_10k"
|
|
},
|
|
{
|
|
"description": "Plate with hole: ISO layers, geometry, dimensions and full critique",
|
|
"detail": {
|
|
"entities": 7
|
|
},
|
|
"metric": "critique_issues",
|
|
"metric_value": 0.0,
|
|
"wall_ms": 255.7,
|
|
"workload_id": "premium_pass"
|
|
}
|
|
]
|
|
}
|