SOLIDWORKS Bridge
Public Made by Adomby adom
Launch, model and quit SOLIDWORKS from any Adom container. Nothing is ever lost.
Live results: the modelling ops on real SOLIDWORKS
Measured 2026-10-14 with bridge 0.10.3 on SOLIDWORKS 2026 (major version 34, 3DEXPERIENCE edition, Windows 11). These are the features requested in wiki issue #1 and the bugs reported in #2.
Summary
tools/dsl-live-check.py: 30 of 30 checks pass. Each builds a part on SOLIDWORKS throughswx_run_script, reads it back withswx_inspect_bodies/swx_mass_properties, and compares it with geometry computed independently in the script (closed-form volumes, bounding boxes from the documented conventions). Tolerances: volume 0.2 %, bounding box 0.01 mm.swx_selftest {"level":"write"}: 43 passed, 0 failed, 1 skipped (the active-document reads, skipped because the test leaves no document open). 538 s.- Selections after a geometric pick used the first rung of the ladder,
MultiSelect2with a typed object array, every time (11 of 11). - Every scratch part was closed afterwards: SOLIDWORKS was left with no open documents.
The LEGO 2x4 brick (examples/lego-2x4.json)
Built in 4 features, measured live:
| Measured | Value | Issue #1/#2 reference (SOLIDWORKS 2021, 22-feature build) |
|---|---|---|
| Volume | 2073.362 mm^3 | 2073.362 mm^3 |
| Bounding box | [-15.9, 0.0, -7.9] to [15.9, 11.3, 7.9] mm | 31.8 x 11.3 x 15.8 mm |
| Faces | 39 | 39 |
| Colour | [200, 0, 0] (set before the material, kept after it) | red requested |
| Density / mass | 1020.0 kg/m^3 / 0.0021148 kg | ABS 1020 / 0.0021148 |
CSWA benchmark, measured 2026-10-15 (bridge 0.11.2, SW 2026)
The first live run of the CSWA benchmark: tools/cswa-check.py on Drew's laptop (target adom_drew2),
2026-10-15 23:04:22Z, bridge 0.11.2, SOLIDWORKS 2026 (34.3.0, 3DEXPERIENCE "Connected"). The eight
runnable parts were built in ONE bridge-made part (reuseDocument, clear_part between them), weighed with
swx_mass_properties, and compared with their published keys. 8 of 8 within tolerance, every one within
0.0015 % of its key; Step 4 was skipped (it needed offsetEntities, added in 0.11.4). Each part took 7-23 s.
SOLIDWORKS held 2.2 GB afterwards and quit cleanly. The full evidence (every reply) is
tools/cswa/reports/cswa-2026-10-15-sw2026-0.11.2.json.
| Spec | Key (published) | Measured live | Off | Time |
|---|---|---|---|---|
cswa-00-lego-2x4 (spec 0, ABS) |
2073.3615208 mm³ | 2073.3615208 mm³ (2.1148288 g) | 1e-9 % | 14.7 s |
cswa-01-3dengr-q5-block (6061) |
324.00 g, CoM (50, 10, 30) | 324.000 g, CoM (50.000, 10.000, 30.000) | 0.000 % | 9.4 s |
cswa-02-3dengr-q6-hole (6061) |
307.04 g, CoM (51.38, 10.00, 30.00) | 307.035 g, CoM (51.381, 10.000, 30.000) | 0.0015 % | 12.0 s |
cswa-03-3dengr-q8-hole30 (6061) |
285.83 g | 285.830 g | 0.0001 % | 11.8 s |
cswa-04-3dengr-q9-l-bracket (AISI 1020) |
410.80 g, CoM (26.54, 16.54, 20.00) | 410.800 g, CoM (26.538, 16.538, 20.000) | 0.000 % | 7.3 s |
cswa-05-tool-block-step1 (official Q3) |
939.54 g | 939.540 g | 0.00005 % | 7.7 s |
cswa-06-tool-block-step2 (official Q4) |
1032.32 g | 1032.321 g | 0.00007 % | 7.5 s |
cswa-07-tool-block-step3 (official Q5) |
628.18 g | 628.183 g | 0.0005 % | 23.0 s |
cswa-08-tool-block-step4 (official Q6) |
432.58 g | SKIPPED: needed offsetEntities |
The densities read back were the ones asked for (1020, 2700 and 7900 kg/m³), and each part carried its library material (ABS, 6061 Alloy, AISI 1020).
What this measured. Every variant those eight scripts used is now measured live on SOLIDWORKS 2026
(compat::OP_FACTS, measurement LIVE_2026_10_15_CSWA). That includes six variants no earlier run had built:
sketch.lineandsketch.arc: the Tool Block profile's lines, its tangent R19 and its three-point R29 and R5;sketch.faceOffset: the R41 slot's plane, 12 mm inside the back face;hole.simple: Ø20 and Ø30 through all, and the Tool Block's Ø11;set_material.density;sketch.face.front.positive: sketches on a +Z face.
It also re-measured clear_part, cut.one, cut.one.reversed, extrude.one, select.multiSelectTyped,
set_material, sketch.circle, sketch.multiProfile, sketch.offset.top.positive, sketch.plane.front,
sketch.plane.top and sketch.rect on a newer bridge.
Still unmeasured (no spec in this run used them): revolve and revolve_cut, mirror, slot, polygon,
the counterbored and countersunk hole, the upToNext / upToSurface / offsetFromSurface end conditions,
draft, and construction geometry. 0.11.4 adds community specs that build each of them
(cswa-09 to cswa-12), and the Step 4 pocket (offsetEntities, sketch regions), so the next live run measures them.
HideFileExt, measured 2026-10-15 (bridge 0.11.2, SOLIDWORKS 2026)
On Drew's laptop, with Windows' "Hide extensions for known file types" turned ON (HideFileExt=1, SOLIDWORKS restarted). This is Michael's 2021 condition, reproduced on our machine to prove the 0.10.10 fix:
| Check | Result |
|---|---|
swx_new_document title read back |
Part1-1792103965000, with no extension. swx_docs lists it the same way |
swx_run_script by path |
ok, bridgeCreatedDocument:true |
swx_design_info, swx_get_parameters |
PASS by the reported title, by the stem, and by the stem + .SLDPRT |
swx_set_parameter, swx_export_step (15,944 B), swx_save, swx_close_doc |
PASS by the stem |
| Left open | nothing |
compat::OP_FACTS carries it as titles.hiddenExtensions.
The restart that followed (the 0.11.3 finding)
The second phase restarted SOLIDWORKS with extensions shown. From the ledger:
| Time (Z) | Event |
|---|---|
| 22:40:01 | quit (processGone) |
| 22:40:02 | launch |
| 22:40:07 | sldworksUp |
| 22:40:39 | attached |
| 22:40:43 | solidworks.ready TRUE, 4 s after attach (the first phase's start took 22 s to ready) |
| 22:40:50 | swx_new_document OK, title Part1-1792104049001.SLDPRT, ledger document_created |
| 22:40:51 | swx_docs: []; SOLIDWORKS pid 26316 had DIED |
| 22:40:58 | swx_stop: host_app_not_running |
This was the 2026-10-01 crash again: a document command sent while an add-in was still initialising.
0.11.3 makes these changes:
- A performance-log marker counts only if it lies beyond the state the file was in when no SOLIDWORKS was writing it (launch, quit, or a first sight of a stale log), unless the file has been rewritten since.
- A fresh attach is ready only with StartupProcessCompleted TRUE, this session's own marker, and 20 s after attach.
swx_new_document,swx_openandswx_importverify the effect on the live session: same process, still running, the document in the list. If the effect is missing they returnhost_app_died/document_not_created, never ok.- A start within 60 s of a quit waits for that session's process tree to be gone.
SOLIDWORKS 2021 (community)
Run 2026-10-15 by Michael (issue #1) with bridge 0.10.9 on SOLIDWORKS 2021
(COM RevisionNumber 29.5.1, classic desktop, Windows 11, ab 2.1.168). His reply,
not our machine: it counts as a measurement by:"community" in compat::OP_FACTS.
swx_selftest {"level":"write"}: 44 passed, 6 failed (380 s). Every modelling check passed: T01-T22 and T24-T32 (T23, the ownership check, was an unnumbered row until 0.10.10).- The 6 failures were ONE bug:
swx_design_info,swx_get_parameters,swx_set_parameter,swx_export_step,swx_saveandswx_close_docaimed at the scratch part asPart14-1792088642002.SLDPRTwhile SOLIDWORKS titled itPart14-1792088642002— Windows' "Hide extensions for known file types" (HideFileExt=1, the Windows default) is on there and off on our laptop. The close missed too, so the part was left open; closing it by path worked. Fixed in 0.10.10: title matching ignores.sldprt/.sldasm/.slddrw, the self-test addresses its own documents by path, andswx_new_documentreports the title SOLIDWORKS shows. - Issue #2's fixes confirmed:
densitySource:"bodyMassProperty",bridgeCreatedDocument:true.
The LEGO 2x4 brick on 2021, identical to 2026:
| Measured | SOLIDWORKS 2021 (0.10.9) | SOLIDWORKS 2026 (0.10.3) |
|---|---|---|
| Features | 4 | 4 |
| Volume | 2073.362 mm^3 | 2073.362 mm^3 |
| Bounding box | [-15.9, 0.0, -7.9] to [15.9, 11.3, 7.9] mm | the same |
| Faces | 39 | 39 |
| Colour | [200, 0, 0] | [200, 0, 0] |
| Density / mass | 1020 kg/m^3 / 0.0021148 kg | 1020 kg/m^3 / 0.0021148 kg |
Every check
| Id | Check | Issue | Expected volume (mm^3) | Measured (mm^3) | Result |
|---|---|---|---|---|---|
| T01 | rectangle anchor: xMm/yMm is the CORNER by default | #1.5 | 1000.0 | 1000.0 | PASS |
| T02 | Top Plane: sketch +Y is model -Z | #1.5 | 1000.0 | 1000.0 | PASS |
| T03 | anchor center | #1.5 | 1000.0 | 1000.0 | PASS |
| T04 | sketch on a plane offset +10 mm from Top Plane | #1.1 | 4392.699 | 4392.699 | PASS |
| T05 | sketch on a NEGATIVE offset plane (-5 mm) | #1.1 | 6000.0 | 6000.0 | PASS |
| T06 | sketch on a FACE picked by a point (the block's top face) | #1.1 | 4113.097 | 4113.097 | PASS |
| T07 | Michael's case: a default cut from Top Plane with the body on +Y must FAIL LOUDLY, never succeed silently | #1.2 | PASS | ||
| T08 | cut reverse:true removes material on +Y | #1.2 | 3500.0 | 3500.0 | PASS |
| T09 | cut throughAll + reverse | #1.2 | 3000.0 | 3000.0 | PASS |
| T10 | extrude direction both (5 mm one way, 3 mm the other) | #1.2 | 800.0 | 800.0 | PASS |
| T11 | extrude midPlane | #1.2 | 1000.0 | 1000.0 | PASS |
| T12 | cut midPlane through the block | #1.2 | 3904.0 | 3904.0 | PASS |
| T13 | two concentric circles in ONE sketch extrude as a RING | #1.3 | 502.655 | 502.655 | PASS |
| T14 | two disjoint rectangles in ONE sketch: one feature, two bodies | #1.3 | 250.0 | 250.0 | PASS |
| T15 | set_appearance on the part | #1.4 | 4000.0 | 4000.0 | PASS |
| T16 | set_appearance on one face picked by a point | #1.4 | 4000.0 | 4000.0 | PASS |
| T17 | fillet every edge of the block, r = 1 | #1.6 | 3958.419 | 3958.419 | PASS |
| T18 | chamfer ONE edge picked by a point, 1 mm | #1.6 | 3990.0 | 3990.0 | PASS |
| T19 | shell 1 mm, top face removed | #1.6 | 1084 | 1084.0 | PASS |
| T20 | linear pattern: one boss -> 3 along X, 6 mm apart | #1.6 | 4188.496 | 4188.496 | PASS |
| T21 | circular pattern: one boss -> 6 around Y | #1.6 | 4169.646 | 4169.646 | PASS |
| T22 | issue #2: body mass uses the material's density (ABS 1020 kg/m^3) | #2.a | 4000.0 | 4000.0 | PASS |
| T25 | audit #1/#5: sketch on the BOTTOM face (hidden in an iso view, normal -Y) extrudes OUTWARD | #1.1 | 4084.823 | 4084.823 | PASS |
| T26 | audit unverified #1: a NEGATIVE offset plane keeps the base plane's axes (asymmetric sketch, separate body) | #1.1 | 4048.0 | 4048.0 | PASS |
| T27 | audit #6: an ASYMMETRIC two-way cut: depthMm goes along the cut's own direction (-normal), depth2Mm the other way | #1.2 | 968 | 968.0 | PASS |
| T28 | audit unverified #2: linear pattern with NEGATIVE spacing goes -X (instances stay on the block) | #1.6 | 4188.496 | 4188.496 | PASS |
| T29 | audit #1: shell removing the BOTTOM face (hidden in an iso view) removes that face, not a side | #1.6 | 1084 | 1084.0 | PASS |
| T30 | audit #3: fillet ONE feature's edges by allOfFeature on a cylinder (2 circular edges) | #1.6 | 772.517 | 772.517 | PASS |
| T24 | the LEGO 2x4 acceptance brick (examples/lego-2x4.json) | #1 acceptance | 2073.362 | 2073.362 | PASS |
| T23 | issue #2: run_script on the bridge's own new part (addressed by path) says bridgeCreatedDocument:true | #2.b | PASS |
Added 2026-10-14 (bridge 0.10.4)
Eight more checks were added to tools/dsl-live-check.py and run on the same
install (SOLIDWORKS 2026, major 34, 3DEXPERIENCE "Connected") with bridge
0.10.4. All eight pass. T36 and T37 first failed on the checks' own
expectations, not on the bridge. A face sketch keeps the default plane's axes
and projects the origin onto the face, so their circles were moved to sketch
(0, 5) and both checks re-run. Since 0.10.5 these variants report
proven.live: true with this measurement in measuredOn.
| Id | Check | Issue | Expected volume (mm^3) | Measured (mm^3) | Measured bounding box (mm) | Result |
|---|---|---|---|---|---|---|
| T33 | a REVERSED boss: reverse:true from Top Plane goes -Y | #1.2 | 4000.0 | 4000.0 | [-10, -10, -10] to [10, 0, 10] | PASS |
| T34 | a boss through all (one way) from a plane below the block | #1.2 | 4062.832 | 4062.832 | [-10, -5, -10] to [10, 10, 10] | PASS |
| T35 | Right Plane axes: sketch +X is model -Z, +Y is model +Y, a boss goes +X | #1.5 | 1000.0 | 1000.0 | [0, 0, -10] to [5, 20, 0] | PASS |
| T36 | a sketch on the +X side face extrudes outward along +X (Right Plane's axes, origin projected) | #1.1 | 4037.699 | 4037.699 | [-10, 0, -10] to [13, 10, 10] | PASS |
| T37 | a sketch on the -Z face extrudes outward along -Z (Front Plane's axes, origin projected) | #1.1 | 4037.699 | 4037.699 | [-10, 0, -13] to [10, 10, 10] | PASS |
| T38 | a plane offset +12 mm from Front Plane (a separate body at z 12..14) | #1.1 | 4032.0 | 4032.0 | two bodies, the second [-2, -2, 12] to [2, 2, 14] | PASS |
| T39 | a linear pattern in two directions (X +12, Z -12): 4 bosses on the block | #1.6 | 4084.823 | 4084.823 | [-10, 0, -10] to [10, 13, 10] | PASS |
| T42 | a shell outward 1 mm with the top face removed: the block becomes the cavity | #1.6 | 1324.0 | 1324.0 | [-11, -1, -11] to [11, 10, 11] | PASS |
Memory, measured 2026-10-14 (bridges 0.10.5 and 0.10.6)
| What | Measured |
|---|---|
| A new part per build (12 builds, each closed) | SOLIDWORKS private bytes +83 to +85 MB per part (520 to 2035 MB; again 538 to 1697 MB over 8); handles +~125 per part; GetDocumentCount 0 after every close |
ONE reused part (reuseDocument, 12 builds) |
3260 to 3246 MB, handles 4373 to 4398: flat |
A part created hidden (visible:false), then modelled |
refused by SOLIDWORKS: a hidden document cannot be activated, and modelling selects |
swx_com_respawn |
about 210 MB freed (1697 to 1487 MB), handles unchanged (4022 to 4056): the bridge does not pin documents |
| Creating the reuse part (once) | +1.95 GB while open (1487 to 3437 MB), +285 MB after its close — observed, unexplained |
swx_selftest {"level":"write"}, bridge 0.10.7 (one reused part) |
complete, 475 s: 40 passed, 3 failed, 1 skipped; 15 documents created (more than 32 before); SOLIDWORKS 507 to 2361 MB (peak 3922 MB with parts open), handles 2809 to 5122; commit stayed "ok" (61.7 % to 70.0 %); no throttling, nothing recycled; launch attributed by ancestry |
The self-test's closing swx_com_respawn |
freed 0 MB (2361 to 2361 MB) — with the 210 MB above: not a saving to rely on |
| The 3 failures of that run | one bug: a single DeleteSelection2 in clear_part returned true and left a top-level sketch (Sketch13, Sketch4, Sketch9) that an earlier check left unconsumed. 0.10.8 repeats the delete until the part is empty, and falls back to a fresh part for that check if it still cannot |
clear_part (the reuse step) is marked measured on 2026 in the variants table.
CSWA canary 0.11.4-rc1, measured 2026-10-16 (SW 2026): 12 of 14, two bugs caught
The first run of the live gate on a release candidate: tools/release.sh --canary published 0.11.4-rc1
(exe sha256 35f04d75…), bridge_install put it on Drew's laptop from manifests/canary.json, and
tools/cswa-check.py built all 14 parts in one reused document, 22:36 to 22:55Z
(tools/cswa/reports/cswa-2026-10-16-sw2026-0.11.4-rc1-FAILED.json). Three earlier attempts that day were
refused by the bridge's presence rule when Drew returned to the laptop; each quit SOLIDWORKS cleanly.
| Part | Result | Key (g) | Measured (g) | Off % | Time |
|---|---|---|---|---|---|
cswa-00-lego-2x4 |
PASS | 2.114829 | 2.115 | +0.000 | 44 s |
cswa-01-3dengr-q5-block |
PASS | 324.0 | 324.0 | +0.000 | 28 s |
cswa-02-3dengr-q6-hole |
PASS | 307.04 | 307.035 | +0.001 | 154 s |
cswa-03-3dengr-q8-hole30 |
PASS | 285.83 | 285.83 | +0.000 | 35 s |
cswa-04-3dengr-q9-l-bracket |
PASS | 410.8 | 410.8 | +0.000 | 22 s |
cswa-05-tool-block-step1 |
PASS | 939.54 | 939.54 | +0.000 | 21 s |
cswa-06-tool-block-step2 |
PASS | 1032.32 | 1032.321 | +0.000 | 23 s |
cswa-07-tool-block-step3 |
PASS | 628.18 | 628.183 | +0.001 | 65 s |
cswa-08-tool-block-step4 |
PASS | 432.58 | 434.715 | +0.494 | 200 s |
cswa-08b-tool-block-step4-explicit |
PASS | 432.58 | 434.715 | +0.494 | 87 s |
cswa-09-community-stepped-shaft |
PASS | 103.568885 | 103.569 | +0.000 | 47 s |
cswa-10-community-mirrored-block |
PASS | 722.912919 | 722.913 | +0.000 | 57 s |
cswa-11-community-slotted-plate |
FAIL | 276.35927 | 274.188 | +0.786 | 87 s |
cswa-12-community-up-to-plates |
FAIL | 369.687533 | 364.35 | +1.444 | 220 s |
What the two failures measured. The deficits locate the error, because every mass and centre of mass is exact:
cswa-11: 804.248 mm3 too little material, centred at x 45, z 25, y 9.33 - the countersunk hole. That is exactly the outward frustum of the 45 deg cone (r 8 to 12 over 4 mm, 1273.4 mm3) minus the inward one (r 8 to 4, 469.1 mm3): the countersink's drafted cut opened downward. The counterbore beside it, the slots and the hexagon were right.cswa-12: 1976.9 mm3 short, which no single feature explains; the four-moment fit (volume and three first moments) picks one combination to 1 %: the up-to-surface pillar stopped at the next face (3392.9 mm3 missing), the up-to-surface hole cut only the first plate (1005.3 mm3 present), the 5 deg boss widened (+792 mm3) and the 10 deg pocket widened (-380.9 mm3). The up-to-next pillar and the offset-from-surface pillar were right.
So two API facts, both now in the code: Ddir1 TRUE drafts OUTWARD on SOLIDWORKS 2026 (the help says
inward), and "up to surface" is swEndCondUpToSurface 4, not swEndCondUpToSelection 10, which left the
direction box empty and behaved as up-to-next for a boss and a cut alike. 0.11.4-rc2 carries the fixes and a
read-back of the stored end condition, depth and draft side on every extrude and cut.
The ten variants the passing parts exercised are measured on this run (LIVE_2026_10_16_RC1 in
src/compat.rs): revolve.360, revolve_cut.360, revolve_cut.midPlane, mirror.features.plane,
mirror.features.offset, mirror.bodies.plane, sketch.construction, sketch.offsetEntities.outer,
cut.regions, cut.offsetFromSurface. The five the failing parts exercised (extrude.draft, cut.draft,
hole.countersink, extrude.upToSurface, cut.upToSurface) stay unmeasured and say so.
CSWA canary 0.11.4-rc2, measured 2026-10-20 (SW 2026): 14 of 14
The fixes from the rc1 run, proven on the bytes that ship: 0.11.4-rc2 (exe sha256 1f812642…) on Drew's
laptop, 13:13 to 13:20Z, every part in one reused document
(tools/cswa/reports/cswa-2026-10-20-sw2026-0.11.4.json). cswa-11 and cswa-12, the two that located the
draft flag and the up-to-surface id four days earlier, now land on their keys; nothing else moved.
| Part | Result | Key (g) | Measured (g) | Off % | Time |
|---|---|---|---|---|---|
cswa-00-lego-2x4 |
PASS | 2.114829 | 2.115 | +0.0000 | 20 s |
cswa-01-3dengr-q5-block |
PASS | 324.0 | 324.0 | +0.0000 | 12 s |
cswa-02-3dengr-q6-hole |
PASS | 307.04 | 307.035 | +0.0015 | 23 s |
cswa-03-3dengr-q8-hole30 |
PASS | 285.83 | 285.83 | +0.0001 | 21 s |
cswa-04-3dengr-q9-l-bracket |
PASS | 410.8 | 410.8 | +0.0000 | 11 s |
cswa-05-tool-block-step1 |
PASS | 939.54 | 939.54 | +0.0000 | 18 s |
cswa-06-tool-block-step2 |
PASS | 1032.32 | 1032.321 | +0.0001 | 15 s |
cswa-07-tool-block-step3 |
PASS | 628.18 | 628.183 | +0.0005 | 35 s |
cswa-08-tool-block-step4 |
PASS | 432.58 | 434.715 | +0.4936 | 49 s |
cswa-08b-tool-block-step4-explicit |
PASS | 432.58 | 434.715 | +0.4936 | 37 s |
cswa-09-community-stepped-shaft |
PASS | 103.568885 | 103.569 | +0.0000 | 16 s |
cswa-10-community-mirrored-block |
PASS | 722.912919 | 722.913 | +0.0000 | 23 s |
cswa-11-community-slotted-plate |
PASS | 276.35927 | 276.359 | +0.0000 | 36 s |
cswa-12-community-up-to-plates |
PASS | 369.687533 | 369.688 | +0.0000 | 54 s |
With this run the five variants rc1 caught are measured as well (extrude.draft, cut.draft,
hole.countersink, extrude.upToSurface, cut.upToSurface), together with extrude.upToNext,
extrude.offsetFromSurface, hole.counterbore and cut.one.throughAll, which only the failing parts had
exercised on rc1. The table in src/compat.rs records them on the release after 0.11.4 (the gate forbids a
code change between the canary and its publish), so swx_describe on 0.11.4 still lists them as not measured.
Not yet measured
- SOLIDWORKS versions other than 2026 and 2021 (2021: a community run, 2026-10-15): supported by the API audit in
docs/COMPATIBILITY.md, not yet run.swx_selftest {"level":"write"}on that install answers it. throughAllwithdirection:"both"on a boss, theIEntity::Select4,SelectByRayandSelectByID2selection rungs (never needed live: the first rung worked), and theCreateDefinitionfillet fallback (never needed:FeatureFillet3worked).- Sketches on a plane offset from Right Plane, a negative offset from Front Plane, or an offset from a named plane; sketches on a named plane; sketches on faces facing -X. (+Z faces: measured by the CSWA run, 2026-10-15.)
- A chamfer on all of a feature's edges, a colour on one body of a multi-body part, and
new_assembly,save_as,rebuildandzoom_fitas script steps. - Of the 0.11.0 exam ops, after the canary of 2026-10-16, still unmeasured: the counterbored and countersunk
hole,upToNext,upToSurfaceand draft (the last two fixed in 0.11.4-rc2),offsetFromSurfaceon a boss, revolve by angle, mirror about faces and face-offset planes, and a plain through-all cut; of 0.11.4's,offsetEntitiesof a whole face and a boss of sketch regions (regionsAtMm). The specscswa-08,cswa-08b,cswa-11andcswa-12build every one of them; the next live CSWA run (0.11.4-rc2) measures them. swx_describelists every variant and its measurement asliveMeasured(one table,compat::OP_FACTS).
# Live results: the modelling ops on real SOLIDWORKS
Measured 2026-10-14 with bridge **0.10.3** on **SOLIDWORKS 2026** (major version 34, 3DEXPERIENCE edition, Windows 11).
These are the features requested in wiki issue #1 and the bugs reported in #2.
## Summary
- `tools/dsl-live-check.py`: **30 of 30 checks pass.** Each builds a part on SOLIDWORKS through `swx_run_script`, reads it back with `swx_inspect_bodies` / `swx_mass_properties`, and compares it with geometry computed independently in the script (closed-form volumes, bounding boxes from the documented conventions). Tolerances: volume 0.2 %, bounding box 0.01 mm.
- `swx_selftest {"level":"write"}`: **43 passed, 0 failed, 1 skipped** (the active-document reads, skipped because the test leaves no document open). 538 s.
- Selections after a geometric pick used the first rung of the ladder, `MultiSelect2` with a typed object array, every time (11 of 11).
- Every scratch part was closed afterwards: SOLIDWORKS was left with no open documents.
## The LEGO 2x4 brick (`examples/lego-2x4.json`)
Built in 4 features, measured live:
| Measured | Value | Issue #1/#2 reference (SOLIDWORKS 2021, 22-feature build) |
|---|---|---|
| Volume | 2073.362 mm^3 | 2073.362 mm^3 |
| Bounding box | [-15.9, 0.0, -7.9] to [15.9, 11.3, 7.9] mm | 31.8 x 11.3 x 15.8 mm |
| Faces | 39 | 39 |
| Colour | [200, 0, 0] (set before the material, kept after it) | red requested |
| Density / mass | 1020.0 kg/m^3 / 0.0021148 kg | ABS 1020 / 0.0021148 |
## CSWA benchmark, measured 2026-10-15 (bridge 0.11.2, SW 2026)
The first live run of the CSWA benchmark: `tools/cswa-check.py` on Drew's laptop (target `adom_drew2`),
2026-10-15 23:04:22Z, bridge **0.11.2**, **SOLIDWORKS 2026** (34.3.0, 3DEXPERIENCE "Connected"). The eight
runnable parts were built in ONE bridge-made part (`reuseDocument`, `clear_part` between them), weighed with
`swx_mass_properties`, and compared with their published keys. **8 of 8 within tolerance**, every one within
0.0015 % of its key; Step 4 was skipped (it needed `offsetEntities`, added in 0.11.4). Each part took 7-23 s.
SOLIDWORKS held 2.2 GB afterwards and quit cleanly. The full evidence (every reply) is
[`tools/cswa/reports/cswa-2026-10-15-sw2026-0.11.2.json`](../tools/cswa/reports/cswa-2026-10-15-sw2026-0.11.2.json).
| Spec | Key (published) | Measured live | Off | Time |
|---|---|---|---|---|
| `cswa-00-lego-2x4` (spec 0, ABS) | 2073.3615208 mm³ | 2073.3615208 mm³ (2.1148288 g) | 1e-9 % | 14.7 s |
| `cswa-01-3dengr-q5-block` (6061) | 324.00 g, CoM (50, 10, 30) | 324.000 g, CoM (50.000, 10.000, 30.000) | 0.000 % | 9.4 s |
| `cswa-02-3dengr-q6-hole` (6061) | 307.04 g, CoM (51.38, 10.00, 30.00) | 307.035 g, CoM (51.381, 10.000, 30.000) | 0.0015 % | 12.0 s |
| `cswa-03-3dengr-q8-hole30` (6061) | 285.83 g | 285.830 g | 0.0001 % | 11.8 s |
| `cswa-04-3dengr-q9-l-bracket` (AISI 1020) | 410.80 g, CoM (26.54, 16.54, 20.00) | 410.800 g, CoM (26.538, 16.538, 20.000) | 0.000 % | 7.3 s |
| `cswa-05-tool-block-step1` (official Q3) | 939.54 g | 939.540 g | 0.00005 % | 7.7 s |
| `cswa-06-tool-block-step2` (official Q4) | 1032.32 g | 1032.321 g | 0.00007 % | 7.5 s |
| `cswa-07-tool-block-step3` (official Q5) | 628.18 g | 628.183 g | 0.0005 % | 23.0 s |
| `cswa-08-tool-block-step4` (official Q6) | 432.58 g | SKIPPED: needed `offsetEntities` | | |
The densities read back were the ones asked for (1020, 2700 and 7900 kg/m³), and each part carried its library
material (ABS, 6061 Alloy, AISI 1020).
**What this measured.** Every variant those eight scripts used is now measured live on SOLIDWORKS 2026
(`compat::OP_FACTS`, measurement `LIVE_2026_10_15_CSWA`). That includes six variants no earlier run had built:
- `sketch.line` and `sketch.arc`: the Tool Block profile's lines, its tangent R19 and its three-point R29 and R5;
- `sketch.faceOffset`: the R41 slot's plane, 12 mm inside the back face;
- `hole.simple`: Ø20 and Ø30 through all, and the Tool Block's Ø11;
- `set_material.density`;
- `sketch.face.front.positive`: sketches on a +Z face.
It also re-measured `clear_part`, `cut.one`, `cut.one.reversed`, `extrude.one`, `select.multiSelectTyped`,
`set_material`, `sketch.circle`, `sketch.multiProfile`, `sketch.offset.top.positive`, `sketch.plane.front`,
`sketch.plane.top` and `sketch.rect` on a newer bridge.
**Still unmeasured** (no spec in this run used them): `revolve` and `revolve_cut`, `mirror`, `slot`, `polygon`,
the counterbored and countersunk `hole`, the `upToNext` / `upToSurface` / `offsetFromSurface` end conditions,
`draft`, and construction geometry. 0.11.4 adds community specs that build each of them
(`cswa-09` to `cswa-12`), and the Step 4 pocket (`offsetEntities`, sketch regions), so the next live run measures them.
## HideFileExt, measured 2026-10-15 (bridge 0.11.2, SOLIDWORKS 2026)
On Drew's laptop, with Windows' "Hide extensions for known file types" turned
ON (HideFileExt=1, SOLIDWORKS restarted). This is Michael's 2021 condition,
reproduced on our machine to prove the 0.10.10 fix:
| Check | Result |
|---|---|
| `swx_new_document` title read back | `Part1-1792103965000`, with no extension. `swx_docs` lists it the same way |
| `swx_run_script` by path | ok, `bridgeCreatedDocument:true` |
| `swx_design_info`, `swx_get_parameters` | PASS by the reported title, by the stem, and by the stem + `.SLDPRT` |
| `swx_set_parameter`, `swx_export_step` (15,944 B), `swx_save`, `swx_close_doc` | PASS by the stem |
| Left open | nothing |
`compat::OP_FACTS` carries it as `titles.hiddenExtensions`.
### The restart that followed (the 0.11.3 finding)
The second phase restarted SOLIDWORKS with extensions shown. From the ledger:
| Time (Z) | Event |
|---|---|
| 22:40:01 | quit (processGone) |
| 22:40:02 | launch |
| 22:40:07 | `sldworksUp` |
| 22:40:39 | attached |
| 22:40:43 | `solidworks.ready` TRUE, 4 s after attach (the first phase's start took 22 s to ready) |
| 22:40:50 | `swx_new_document` OK, title `Part1-1792104049001.SLDPRT`, ledger `document_created` |
| 22:40:51 | `swx_docs`: `[]`; SOLIDWORKS pid 26316 had DIED |
| 22:40:58 | `swx_stop`: `host_app_not_running` |
This was the 2026-10-01 crash again: a document command sent while an add-in
was still initialising.
0.11.3 makes these changes:
- A performance-log marker counts only if it lies beyond the state the file was
in when no SOLIDWORKS was writing it (launch, quit, or a first sight of a
stale log), unless the file has been rewritten since.
- A fresh attach is ready only with StartupProcessCompleted TRUE, this session's
own marker, and 20 s after attach.
- `swx_new_document`, `swx_open` and `swx_import` verify the effect on the live
session: same process, still running, the document in the list. If the effect
is missing they return `host_app_died` / `document_not_created`, never ok.
- A start within 60 s of a quit waits for that session's process tree to be gone.
## SOLIDWORKS 2021 (community)
Run 2026-10-15 by Michael (issue #1) with bridge **0.10.9** on **SOLIDWORKS 2021**
(COM RevisionNumber 29.5.1, classic desktop, Windows 11, ab 2.1.168). His reply,
not our machine: it counts as a measurement `by:"community"` in `compat::OP_FACTS`.
- `swx_selftest {"level":"write"}`: **44 passed, 6 failed** (380 s). Every
modelling check passed: T01-T22 and T24-T32 (T23, the ownership check, was an
unnumbered row until 0.10.10).
- The 6 failures were ONE bug: `swx_design_info`, `swx_get_parameters`,
`swx_set_parameter`, `swx_export_step`, `swx_save` and `swx_close_doc` aimed
at the scratch part as `Part14-1792088642002.SLDPRT` while SOLIDWORKS titled it
`Part14-1792088642002` — Windows' "Hide extensions for known file types"
(HideFileExt=1, the Windows default) is on there and off on our laptop. The
close missed too, so the part was left open; closing it by path worked.
Fixed in 0.10.10: title matching ignores `.sldprt/.sldasm/.slddrw`, the
self-test addresses its own documents by path, and `swx_new_document` reports
the title SOLIDWORKS shows.
- Issue #2's fixes confirmed: `densitySource:"bodyMassProperty"`,
`bridgeCreatedDocument:true`.
The LEGO 2x4 brick on 2021, identical to 2026:
| Measured | SOLIDWORKS 2021 (0.10.9) | SOLIDWORKS 2026 (0.10.3) |
|---|---|---|
| Features | 4 | 4 |
| Volume | 2073.362 mm^3 | 2073.362 mm^3 |
| Bounding box | [-15.9, 0.0, -7.9] to [15.9, 11.3, 7.9] mm | the same |
| Faces | 39 | 39 |
| Colour | [200, 0, 0] | [200, 0, 0] |
| Density / mass | 1020 kg/m^3 / 0.0021148 kg | 1020 kg/m^3 / 0.0021148 kg |
## Every check
| Id | Check | Issue | Expected volume (mm^3) | Measured (mm^3) | Result |
|---|---|---|---|---|---|
| T01 | rectangle anchor: xMm/yMm is the CORNER by default | #1.5 | 1000.0 | 1000.0 | PASS |
| T02 | Top Plane: sketch +Y is model -Z | #1.5 | 1000.0 | 1000.0 | PASS |
| T03 | anchor center | #1.5 | 1000.0 | 1000.0 | PASS |
| T04 | sketch on a plane offset +10 mm from Top Plane | #1.1 | 4392.699 | 4392.699 | PASS |
| T05 | sketch on a NEGATIVE offset plane (-5 mm) | #1.1 | 6000.0 | 6000.0 | PASS |
| T06 | sketch on a FACE picked by a point (the block's top face) | #1.1 | 4113.097 | 4113.097 | PASS |
| T07 | Michael's case: a default cut from Top Plane with the body on +Y must FAIL LOUDLY, never succeed silently | #1.2 | | | PASS |
| T08 | cut reverse:true removes material on +Y | #1.2 | 3500.0 | 3500.0 | PASS |
| T09 | cut throughAll + reverse | #1.2 | 3000.0 | 3000.0 | PASS |
| T10 | extrude direction both (5 mm one way, 3 mm the other) | #1.2 | 800.0 | 800.0 | PASS |
| T11 | extrude midPlane | #1.2 | 1000.0 | 1000.0 | PASS |
| T12 | cut midPlane through the block | #1.2 | 3904.0 | 3904.0 | PASS |
| T13 | two concentric circles in ONE sketch extrude as a RING | #1.3 | 502.655 | 502.655 | PASS |
| T14 | two disjoint rectangles in ONE sketch: one feature, two bodies | #1.3 | 250.0 | 250.0 | PASS |
| T15 | set_appearance on the part | #1.4 | 4000.0 | 4000.0 | PASS |
| T16 | set_appearance on one face picked by a point | #1.4 | 4000.0 | 4000.0 | PASS |
| T17 | fillet every edge of the block, r = 1 | #1.6 | 3958.419 | 3958.419 | PASS |
| T18 | chamfer ONE edge picked by a point, 1 mm | #1.6 | 3990.0 | 3990.0 | PASS |
| T19 | shell 1 mm, top face removed | #1.6 | 1084 | 1084.0 | PASS |
| T20 | linear pattern: one boss -> 3 along X, 6 mm apart | #1.6 | 4188.496 | 4188.496 | PASS |
| T21 | circular pattern: one boss -> 6 around Y | #1.6 | 4169.646 | 4169.646 | PASS |
| T22 | issue #2: body mass uses the material's density (ABS 1020 kg/m^3) | #2.a | 4000.0 | 4000.0 | PASS |
| T25 | audit #1/#5: sketch on the BOTTOM face (hidden in an iso view, normal -Y) extrudes OUTWARD | #1.1 | 4084.823 | 4084.823 | PASS |
| T26 | audit unverified #1: a NEGATIVE offset plane keeps the base plane's axes (asymmetric sketch, separate body) | #1.1 | 4048.0 | 4048.0 | PASS |
| T27 | audit #6: an ASYMMETRIC two-way cut: depthMm goes along the cut's own direction (-normal), depth2Mm the other way | #1.2 | 968 | 968.0 | PASS |
| T28 | audit unverified #2: linear pattern with NEGATIVE spacing goes -X (instances stay on the block) | #1.6 | 4188.496 | 4188.496 | PASS |
| T29 | audit #1: shell removing the BOTTOM face (hidden in an iso view) removes that face, not a side | #1.6 | 1084 | 1084.0 | PASS |
| T30 | audit #3: fillet ONE feature's edges by allOfFeature on a cylinder (2 circular edges) | #1.6 | 772.517 | 772.517 | PASS |
| T24 | the LEGO 2x4 acceptance brick (examples/lego-2x4.json) | #1 acceptance | 2073.362 | 2073.362 | PASS |
| T23 | issue #2: run_script on the bridge's own new part (addressed by path) says bridgeCreatedDocument:true | #2.b | | | PASS |
## Added 2026-10-14 (bridge 0.10.4)
Eight more checks were added to `tools/dsl-live-check.py` and run on the same
install (SOLIDWORKS 2026, major 34, 3DEXPERIENCE "Connected") with bridge
**0.10.4**. All eight pass. T36 and T37 first failed on the checks' own
expectations, not on the bridge. A face sketch keeps the default plane's axes
and projects the origin onto the face, so their circles were moved to sketch
(0, 5) and both checks re-run. Since 0.10.5 these variants report
`proven.live: true` with this measurement in `measuredOn`.
| Id | Check | Issue | Expected volume (mm^3) | Measured (mm^3) | Measured bounding box (mm) | Result |
|---|---|---|---|---|---|---|
| T33 | a REVERSED boss: reverse:true from Top Plane goes -Y | #1.2 | 4000.0 | 4000.0 | [-10, -10, -10] to [10, 0, 10] | PASS |
| T34 | a boss through all (one way) from a plane below the block | #1.2 | 4062.832 | 4062.832 | [-10, -5, -10] to [10, 10, 10] | PASS |
| T35 | Right Plane axes: sketch +X is model -Z, +Y is model +Y, a boss goes +X | #1.5 | 1000.0 | 1000.0 | [0, 0, -10] to [5, 20, 0] | PASS |
| T36 | a sketch on the +X side face extrudes outward along +X (Right Plane's axes, origin projected) | #1.1 | 4037.699 | 4037.699 | [-10, 0, -10] to [13, 10, 10] | PASS |
| T37 | a sketch on the -Z face extrudes outward along -Z (Front Plane's axes, origin projected) | #1.1 | 4037.699 | 4037.699 | [-10, 0, -13] to [10, 10, 10] | PASS |
| T38 | a plane offset +12 mm from Front Plane (a separate body at z 12..14) | #1.1 | 4032.0 | 4032.0 | two bodies, the second [-2, -2, 12] to [2, 2, 14] | PASS |
| T39 | a linear pattern in two directions (X +12, Z -12): 4 bosses on the block | #1.6 | 4084.823 | 4084.823 | [-10, 0, -10] to [10, 13, 10] | PASS |
| T42 | a shell outward 1 mm with the top face removed: the block becomes the cavity | #1.6 | 1324.0 | 1324.0 | [-11, -1, -11] to [11, 10, 11] | PASS |
## Memory, measured 2026-10-14 (bridges 0.10.5 and 0.10.6)
| What | Measured |
|---|---|
| A new part per build (12 builds, each closed) | SOLIDWORKS private bytes +83 to +85 MB per part (520 to 2035 MB; again 538 to 1697 MB over 8); handles +~125 per part; `GetDocumentCount` 0 after every close |
| ONE reused part (`reuseDocument`, 12 builds) | 3260 to 3246 MB, handles 4373 to 4398: flat |
| A part created hidden (`visible:false`), then modelled | refused by SOLIDWORKS: a hidden document cannot be activated, and modelling selects |
| `swx_com_respawn` | about 210 MB freed (1697 to 1487 MB), handles unchanged (4022 to 4056): the bridge does not pin documents |
| Creating the reuse part (once) | +1.95 GB while open (1487 to 3437 MB), +285 MB after its close — observed, unexplained |
| `swx_selftest {"level":"write"}`, bridge 0.10.7 (one reused part) | complete, 475 s: 40 passed, 3 failed, 1 skipped; 15 documents created (more than 32 before); SOLIDWORKS 507 to 2361 MB (peak 3922 MB with parts open), handles 2809 to 5122; commit stayed "ok" (61.7 % to 70.0 %); no throttling, nothing recycled; launch attributed by `ancestry` |
| The self-test's closing `swx_com_respawn` | freed 0 MB (2361 to 2361 MB) — with the 210 MB above: not a saving to rely on |
| The 3 failures of that run | one bug: a single `DeleteSelection2` in `clear_part` returned true and left a top-level sketch (Sketch13, Sketch4, Sketch9) that an earlier check left unconsumed. 0.10.8 repeats the delete until the part is empty, and falls back to a fresh part for that check if it still cannot |
`clear_part` (the reuse step) is marked measured on 2026 in the variants table.
## CSWA canary 0.11.4-rc1, measured 2026-10-16 (SW 2026): 12 of 14, two bugs caught
The first run of the live gate on a release candidate: `tools/release.sh --canary` published 0.11.4-rc1
(exe sha256 35f04d75…), `bridge_install` put it on Drew's laptop from `manifests/canary.json`, and
`tools/cswa-check.py` built all 14 parts in one reused document, 22:36 to 22:55Z
(`tools/cswa/reports/cswa-2026-10-16-sw2026-0.11.4-rc1-FAILED.json`). Three earlier attempts that day were
refused by the bridge's presence rule when Drew returned to the laptop; each quit SOLIDWORKS cleanly.
| Part | Result | Key (g) | Measured (g) | Off % | Time |
|---|---|---|---|---|---|
| `cswa-00-lego-2x4` | PASS | 2.114829 | 2.115 | +0.000 | 44 s |
| `cswa-01-3dengr-q5-block` | PASS | 324.0 | 324.0 | +0.000 | 28 s |
| `cswa-02-3dengr-q6-hole` | PASS | 307.04 | 307.035 | +0.001 | 154 s |
| `cswa-03-3dengr-q8-hole30` | PASS | 285.83 | 285.83 | +0.000 | 35 s |
| `cswa-04-3dengr-q9-l-bracket` | PASS | 410.8 | 410.8 | +0.000 | 22 s |
| `cswa-05-tool-block-step1` | PASS | 939.54 | 939.54 | +0.000 | 21 s |
| `cswa-06-tool-block-step2` | PASS | 1032.32 | 1032.321 | +0.000 | 23 s |
| `cswa-07-tool-block-step3` | PASS | 628.18 | 628.183 | +0.001 | 65 s |
| `cswa-08-tool-block-step4` | PASS | 432.58 | 434.715 | +0.494 | 200 s |
| `cswa-08b-tool-block-step4-explicit` | PASS | 432.58 | 434.715 | +0.494 | 87 s |
| `cswa-09-community-stepped-shaft` | PASS | 103.568885 | 103.569 | +0.000 | 47 s |
| `cswa-10-community-mirrored-block` | PASS | 722.912919 | 722.913 | +0.000 | 57 s |
| `cswa-11-community-slotted-plate` | FAIL | 276.35927 | 274.188 | +0.786 | 87 s |
| `cswa-12-community-up-to-plates` | FAIL | 369.687533 | 364.35 | +1.444 | 220 s |
**What the two failures measured.** The deficits locate the error, because every mass and centre of mass
is exact:
- `cswa-11`: 804.248 mm3 too little material, centred at x 45, z 25, y 9.33 - the countersunk hole. That is
exactly the outward frustum of the 45 deg cone (r 8 to 12 over 4 mm, 1273.4 mm3) minus the inward one
(r 8 to 4, 469.1 mm3): the countersink's drafted cut opened downward. The counterbore beside it, the
slots and the hexagon were right.
- `cswa-12`: 1976.9 mm3 short, which no single feature explains; the four-moment fit (volume and three
first moments) picks one combination to 1 %: the up-to-surface pillar stopped at the next face
(3392.9 mm3 missing), the up-to-surface hole cut only the first plate (1005.3 mm3 present), the 5 deg boss
widened (+792 mm3) and the 10 deg pocket widened (-380.9 mm3). The up-to-next pillar and the
offset-from-surface pillar were right.
So two API facts, both now in the code: `Ddir1` TRUE drafts OUTWARD on SOLIDWORKS 2026 (the help says
inward), and "up to surface" is `swEndCondUpToSurface` 4, not `swEndCondUpToSelection` 10, which left the
direction box empty and behaved as up-to-next for a boss and a cut alike. 0.11.4-rc2 carries the fixes and a
read-back of the stored end condition, depth and draft side on every extrude and cut.
The ten variants the passing parts exercised are measured on this run (`LIVE_2026_10_16_RC1` in
`src/compat.rs`): `revolve.360`, `revolve_cut.360`, `revolve_cut.midPlane`, `mirror.features.plane`,
`mirror.features.offset`, `mirror.bodies.plane`, `sketch.construction`, `sketch.offsetEntities.outer`,
`cut.regions`, `cut.offsetFromSurface`. The five the failing parts exercised (`extrude.draft`, `cut.draft`,
`hole.countersink`, `extrude.upToSurface`, `cut.upToSurface`) stay unmeasured and say so.
## CSWA canary 0.11.4-rc2, measured 2026-10-20 (SW 2026): 14 of 14
The fixes from the rc1 run, proven on the bytes that ship: 0.11.4-rc2 (exe sha256 1f812642…) on Drew's
laptop, 13:13 to 13:20Z, every part in one reused document
(`tools/cswa/reports/cswa-2026-10-20-sw2026-0.11.4.json`). `cswa-11` and `cswa-12`, the two that located the
draft flag and the up-to-surface id four days earlier, now land on their keys; nothing else moved.
| Part | Result | Key (g) | Measured (g) | Off % | Time |
|---|---|---|---|---|---|
| `cswa-00-lego-2x4` | PASS | 2.114829 | 2.115 | +0.0000 | 20 s |
| `cswa-01-3dengr-q5-block` | PASS | 324.0 | 324.0 | +0.0000 | 12 s |
| `cswa-02-3dengr-q6-hole` | PASS | 307.04 | 307.035 | +0.0015 | 23 s |
| `cswa-03-3dengr-q8-hole30` | PASS | 285.83 | 285.83 | +0.0001 | 21 s |
| `cswa-04-3dengr-q9-l-bracket` | PASS | 410.8 | 410.8 | +0.0000 | 11 s |
| `cswa-05-tool-block-step1` | PASS | 939.54 | 939.54 | +0.0000 | 18 s |
| `cswa-06-tool-block-step2` | PASS | 1032.32 | 1032.321 | +0.0001 | 15 s |
| `cswa-07-tool-block-step3` | PASS | 628.18 | 628.183 | +0.0005 | 35 s |
| `cswa-08-tool-block-step4` | PASS | 432.58 | 434.715 | +0.4936 | 49 s |
| `cswa-08b-tool-block-step4-explicit` | PASS | 432.58 | 434.715 | +0.4936 | 37 s |
| `cswa-09-community-stepped-shaft` | PASS | 103.568885 | 103.569 | +0.0000 | 16 s |
| `cswa-10-community-mirrored-block` | PASS | 722.912919 | 722.913 | +0.0000 | 23 s |
| `cswa-11-community-slotted-plate` | PASS | 276.35927 | 276.359 | +0.0000 | 36 s |
| `cswa-12-community-up-to-plates` | PASS | 369.687533 | 369.688 | +0.0000 | 54 s |
With this run the five variants rc1 caught are measured as well (`extrude.draft`, `cut.draft`,
`hole.countersink`, `extrude.upToSurface`, `cut.upToSurface`), together with `extrude.upToNext`,
`extrude.offsetFromSurface`, `hole.counterbore` and `cut.one.throughAll`, which only the failing parts had
exercised on rc1. The table in `src/compat.rs` records them on the release after 0.11.4 (the gate forbids a
code change between the canary and its publish), so `swx_describe` on 0.11.4 still lists them as not measured.
## Not yet measured
- SOLIDWORKS versions other than 2026 and 2021 (2021: a community run, 2026-10-15): supported by the API audit in `docs/COMPATIBILITY.md`, not yet run. `swx_selftest {"level":"write"}` on that install answers it.
- `throughAll` with `direction:"both"` on a boss, the `IEntity::Select4`, `SelectByRay` and `SelectByID2` selection rungs (never needed live: the first rung worked), and the `CreateDefinition` fillet fallback (never needed: `FeatureFillet3` worked).
- Sketches on a plane offset from Right Plane, a negative offset from Front Plane, or an offset from a named plane; sketches on a named plane; sketches on faces facing -X. (+Z faces: measured by the CSWA run, 2026-10-15.)
- A chamfer on all of a feature's edges, a colour on one body of a multi-body part, and `new_assembly`, `save_as`, `rebuild` and `zoom_fit` as script steps.
- Of the 0.11.0 exam ops, after the canary of 2026-10-16, still unmeasured: the counterbored and countersunk `hole`, `upToNext`, `upToSurface` and draft (the last two fixed in 0.11.4-rc2), `offsetFromSurface` on a boss, revolve by angle, mirror about faces and face-offset planes, and a plain through-all cut; of 0.11.4's, `offsetEntities` of a whole face and a boss of sketch regions (`regionsAtMm`). The specs `cswa-08`, `cswa-08b`, `cswa-11` and `cswa-12` build every one of them; the next live CSWA run (0.11.4-rc2) measures them.
- `swx_describe` lists every variant and its measurement as `liveMeasured` (one table, `compat::OP_FACTS`).