← Commit history
BRIDGE_VERSION+1−1
@@ -1 +1 @@-0.11.3+0.11.4
Cargo.lock+1−1
@@ -122,7 +122,7 @@ dependencies = [  [[package]] name = "swx-bridge"-version = "0.11.3"+version = "0.11.4" dependencies = [  "miniz_oxide",  "serde",
Cargo.toml+1−1
@@ -1,6 +1,6 @@ [package] name = "swx-bridge"-version = "0.11.3"+version = "0.11.4" edition = "2021" rust-version = "1.80" description = "Adom SOLIDWORKS bridge — swx_* verbs over the SOLIDWORKS COM API, as a single native binary"
README.md+118−5
@@ -318,11 +318,58 @@ python3 tools/live-smoke.py                              # the full live suite  **Every release is also checked against CSWA exam parts** (0.11.0): `resources/cswa/` holds exam-style parts with their PUBLISHED answers (the official Dassault sample exam's Tool Block,-steps 1-4; the 3dengr practice set; the LEGO brick as spec 0). `python3 tools/cswa-check.py`+steps 1-4; the 3dengr practice set; the LEGO brick as spec 0) and community parts whose keys are+derived analytically (each spec's `derivation` reproduces its key in Python). `python3 tools/cswa-check.py` builds each one live, weighs it with `swx_mass_properties`, and compares it with the key within-the exam's 1 %; `swx_selftest {"level":"cswa"}` does the same on any install. Then-`tools/release.sh --require-live cswa-report.json --publish` refuses to publish without a passing-report from THIS version, newer than the last code commit. See [`tools/cswa/README.md`](tools/cswa/README.md).+the exam's 1 %; `swx_selftest {"level":"cswa"}` does the same on any install. See+[`tools/cswa/README.md`](tools/cswa/README.md).++**The release ritual: every publish is proven live (0.11.4), on the very bytes that ship.**++Only a PUBLISHED build reaches the test machine: ab installs what a manifest names, after checking the+zip's sha256, and reaps anything side-loaded. So the build is first published as a release CANDIDATE+that no one else gets (the canary). The live check runs on that candidate, and the publish then ships+those same bytes.++1. Commit the release (version bump, tests, docs).+2. `tools/release.sh --canary` builds the zip and publishes it as the release `<version>-rc<N>`. It+   also writes the page file `manifests/canary.json`, a manifest naming that candidate, and commits+   it: the record holds the code commit and the sha256 of the exe inside the zip. It reads the page's+   copy back, then prints the next three commands. The main manifest, which every other machine+   follows, is not touched.+3. On the test machine only, install the candidate:+   `adom-bridge --target adom_drew2 --ai-thread "SolidWorks Bridge" bridge_install '{"manifestUrl":"https://wiki.adom.inc/api/v1/pages/solidworks-bridge/files/manifests/canary.json"}'`.+   This does not pin the machine to the canary. ab polls a bridge's own declared `updateManifestUrl`+   first (`adom-bridge help bridge_check_updates`). Every zip's `bridge.json` declares the MAIN+   manifest there, and the canary file says the same.+4. Run `python3 tools/cswa-check.py --target adom_drew2 --report auto` there. The report lands in+   `tools/cswa/reports/`, and it records which build ran in `bridge`:+   - the installed exe's sha256, read back through ab's `read_file`;+   - the manifest it was installed from, and that zip's sha256.+5. Commit the report, then run `tools/release.sh --require-live tools/cswa/reports/<that report> --publish`.+   This PROMOTES the canary without rebuilding. It refuses unless:+   - the canary is of this version;+   - no code was committed since it was built;+   - the zip in `dist/` (or the candidate's asset, downloaded) has the canary's sha256;+   - the report ran the exe inside that zip.++   It then prints how to put the test machine back on the main manifest, should it still name the+   canary.++`--publish` on its own is REFUSED before anything is built. `tools/check-live-report.py` accepts a+report only when it comes from `cswa-check` and was made by THIS bridge version. It must also have+run EVERY part shipped in `resources/cswa/` (a run narrowed with `--only` proves nothing about the+rest; a part may be skipped only for an op the bridge lacks), passed every part it ran, and not+stopped. It must be newer than the last commit that touched `src/`, `resources/` or `Cargo.toml`:+a report made before the last code change proves nothing about this build. Finally, it must say,+in `bridge.exeSha256`, that it ran the exe being published.++The one exception is `tools/release.sh --docs-only --publish`, for a release that changes no+code. `tools/check-docs-only.py` checks the changes since the last publish (the last commit to the+release manifest). It refuses anything in `src/` or `resources/`, untracked files included, since+`resources/` ships as it is on disk. It refuses any change to `Cargo.toml` or `Cargo.lock` beyond+the package's own version line. A docs-only release's changelog starts with "Docs-only release: no+code changed since <version> … the live CSWA gate was skipped".  `live-smoke.py` creates its own scratch part, builds a real 50×30×20 mm solid, reads the geometry back, drives a dimension, exports eight formats, checks the@@ -506,7 +553,73 @@ not.  ## Roadmap -- v0.11.3 (this): **a quick restart is not ready; a reply is not an effect.**+- v0.11.4 (this): **every publish is proven live; Offset Entities; a spec for every op nothing had built.**++  Recorded first: the first live CSWA run (2026-10-15, bridge 0.11.2, SOLIDWORKS 2026). It passed 8 of 8,+  every part within 0.0015 % of its key (`docs/LIVE-RESULTS.md`). Every variant those scripts used is now+  measured live (`LIVE_2026_10_15_CSWA`). Six were built for the first time: lines and arcs, the+  face-offset plane, the plain hole, the density, and a sketch on a +Z face.++  Now:+  - **The live gate is the rule.** `tools/release.sh --publish` refuses without `--require-live <report>`,+    before anything is built. `--docs-only` skips the gate, and its changelog says so. It is allowed only+    when `tools/check-docs-only.py` finds nothing changed in `src/` or `resources/` (untracked files+    included) and nothing in Cargo.toml or Cargo.lock beyond the version. `tools/check-live-report.py`+    now also needs EVERY shipped part to have run: a run narrowed with `--only` is refused. The ritual+    is under "Live validation" above.+  - **The canary is what ships.** Only a published build reaches the test machine. So+    `tools/release.sh --canary` publishes the build as the release candidate `<version>-rc<N>`, with+    `manifests/canary.json` naming it; it is installed by hand, on the test machine only.+    `--require-live <report> --publish` then promotes those exact bytes, with no rebuild. It does so+    only when the report says it ran that exe (`bridge.exeSha256`, which `cswa-check` reads back+    from the installed copy) and no code changed since the canary. `cswa-check --report auto` names+    the report itself.+  - **`offsetEntities`**: a model face's outline offset into the sketch by SOLIDWORKS+    (`IModelDoc2::SketchOffsetEntities2`, available since 2001Plus, so on 2021 too). It takes the outer+    loop's edges or the whole face. Its sign does not fix the side, so the bridge reads where the new+    segments landed, and redoes the offset the other way once.+  - **`regionsAtMm`** on `extrude` / `cut`: SOLIDWORKS' Selected Contours, done as its own example does it+    (`EnableContourSelection`, then `SelectByID2 "SKETCHREGION"` at mark 4).+  - **Tool Block Step 4 runs, two ways.** `cswa-08` uses Offset Entities, regions and two+    `offsetFromSurface` cuts; it runs live only. `cswa-08b` draws the same pocket from the explicit inset+    profile, using only ops already measured. Both predict 434.72 g, +0.49 % of the key.+  - **Community specs `cswa-09` to `cswa-12`** build every op no spec built:+    - revolve and revolve-cut (360°, and 180° mid-plane);+    - mirror (features, bodies, an offset plane);+    - slots, a hexagon, and counterbored and countersunk holes;+    - `upToNext`, `upToSurface` and `offsetFromSurface`;+    - draft on a boss and on a cut.++    Each key is derived analytically. Each spec's `derivation` re-derives its key in Python+    (`tools/cswa-check.py --derivations`), and the spec holds SOLIDWORKS to 0.1 %.+  - **The first canary caught two bugs, which is what it is for.** 0.11.4-rc1 ran all 14 parts live on+    2026-10-16 (`tools/cswa/reports/cswa-2026-10-16-sw2026-0.11.4-rc1-FAILED.json`): cswa-00 to cswa-10+    passed within 0.1 %, cswa-11 and cswa-12 did not, and the mass and centre of mass they measured+    say exactly why (`docs/LIVE-RESULTS.md`):+    - **The draft flag was inverted.** `FeatureExtrusion3` / `FeatureCut4` take `Ddir1`; the 2024 help+      says true = inward, and SOLIDWORKS 2026 did the opposite: the 45 deg countersink cut widened into the+      outward frustum (804.25 mm3 more than the inward one, to the decimal) and the 5 deg boss widened. The+      bridge now passes true for outward (`modeling::draft_outward_flag`).+    - **"Up to surface" is end condition 4, not 10.** With `swEndCondUpToSelection` 10 and the face at mark+      1, a boss and a cut both built with an empty direction box and stopped at the next face (3392.9 and+      1005.3 mm3 short). `swEndCondUpToSurface` 4, the id the macro recorder writes, is what the bridge+      sends now; `offsetFromSurface` 5 with the same selection had gone to the face.+    - Every extrude and cut now reads back what SOLIDWORKS stored (`readBack`: the end condition, depth and+      draft side from `IExtrudeFeatureData2`), so a request the feature did not honour shows in the reply.+    - **0.11.4-rc2 then passed 14 of 14** on 2026-10-20 (`tools/cswa/reports/cswa-2026-10-20-sw2026-0.11.4.json`),+      and those are the bytes this release ships.+    - The ten variants the passing parts exercised are measured (`LIVE_2026_10_16_RC1`: revolve and+      revolve-cut, mirror about planes, construction geometry, Offset Entities, sketch regions, the offset+      cut); the five the failing parts exercised stay unmeasured and say CAUGHT until 0.11.4-rc2 passes.+  - A `derivedAppend` may no longer shadow a name its base derives. In the simulator, Step 4's `tpx`+    had redrawn Step 1's R5 fillet.+  - The simulator offsets a plain block's face. It models the regions of profiles that nest or stand+    apart, and refuses crossing ones, saying so.+  - 2007 Q1, 2007 Q6 and Planchard 3-3 are one-line placeholders (URL and key) in `tools/cswa/README.md`.++  703 tests, 0 failures; 44 of 44 mutants killed (26 on the ops and the gate, 18 on the canary flow).++- v0.11.3: **a quick restart is not ready; a reply is not an effect.**   Two live findings.    The good one: the HideFileExt fix is PROVEN on Drew's laptop with extensions
SKILL.md+4−1
@@ -138,7 +138,10 @@ BEFORE you do it:    −normal. A worked LEGO brick in 4 features is in `examples/lego-2x4.json`.    0.11.0 adds exam-grade ops — lines, arcs, polylines, slots, polygons, sketch    fillets/chamfers, revolve, mirror, hole, up-to end conditions, draft, a-   density — NOT YET MEASURED LIVE (`proven.live:false`); read+   density; 0.11.4 adds `offsetEntities` (a face's outline offset into the+   sketch) and `regionsAtMm` (extrude or cut only some regions). Lines, arcs,+   the plain hole and the density were measured live on 2026; the rest is+   NOT YET MEASURED (`proven.live:false`). Read    `references/modelling-and-export.md` before using them, and check the result    with `swx_mass_properties`. `swx_selftest {"level":"cswa"}` runs the CSWA    exam parts against their published answers.
bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "solidworks",   "displayName": "SOLIDWORKS",-  "version": "0.11.3",+  "version": "0.11.4",   "description": "Bridge for SOLIDWORKS desktop CAD — create and open documents, a modeling DSL, file management (find/open/save/export/Pack and Go), custom properties, BOM generation, design analysis (mass properties, bodies, parameters, interference, rebuild health) and background window/dialog etiquette, over the SOLIDWORKS COM API. Single native binary: no interpreter, no PowerShell, ~10ms cold start.",   "author": "Adom Inc.",   "license": "MIT",
docs/COMPATIBILITY.md+39−10
@@ -114,7 +114,9 @@ available in SOLIDWORKS 2021. | `IModelView::DisplayMode` | 2004 SP1, Revision Number 12.1 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodelview~displaymode.html) | | `ISldWorks::DocumentVisible` | — (no Availability line: an original-API member) | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isldworks~documentvisible.html) | | `IInterferenceDetectionMgr::Done` | 2007 FCS, Revision Number 15.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iinterferencedetectionmgr~done.html) |+| `IModelDoc2::EditDelete` | 2001Plus FCS, Revision Number 10.0; the offset segments on the wrong side, deleted (0.11.4) | yes |  | [help](https://help.solidworks.com/2021/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldoc2~editdelete.html) | | `IModelDoc2::EditRebuild3` | 2001Plus FCS, Revision Number 10.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldoc2~editrebuild3.html) |+| `ISelectionMgr::EnableContourSelection` | 2003 FCS, Revision Number 11.0; on for a sketch-region pick, put back as it was (0.11.4) | yes |  | [help](https://help.solidworks.com/2021/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iselectionmgr~enablecontourselection.html) | | `IEquationMgr::Equation` | 2001Plus FCS, Revision Number 10.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iequationmgr~equation.html) | | `ICurve::Evaluate2` | 2007 SP5, Revision Number 15.5 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.icurve~evaluate2.html) | | `ISurface::EvaluateAtPoint` | — (no Availability line: an original-API member) | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isurface~evaluateatpoint.html) |@@ -149,6 +151,9 @@ available in SOLIDWORKS 2021. | `IPackAndGo::GetDocumentSaveToNames` | 2011 FCS, Revision Number 19.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.ipackandgo~getdocumentsavetonames.html) | | `ISldWorks::GetDocumentTemplate` | 2001Plus SP4, Revision Number 10.4 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isldworks~getdocumenttemplate.html) | | `IFace2::GetEdges` | 2001Plus FCS, Revision Number 10.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iface2~getedges.html) |+| `ILoop2::GetEdges` | 2001Plus FCS, Revision Number 10.0; the outer loop's edges, for Offset Entities (0.11.4) | yes |  | [help](https://help.solidworks.com/2021/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iloop2~getedges.html) |+| `ISketchArc::GetEndPoint2` | 2000 FCS, Revision Number 8.0; an offset segment's end, for the side check (0.11.4) | yes |  | [help](https://help.solidworks.com/2021/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isketcharc~getendpoint2.html) |+| `ISketchLine::GetEndPoint2` | 2000 FCS, Revision Number 8.0; as above | yes |  | [help](https://help.solidworks.com/2021/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isketchline~getendpoint2.html) | | `IModelDoc2::GetEquationMgr` | 2001Plus FCS, Revision Number 10.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldoc2~getequationmgr.html) | | `IFeature::GetErrorCode` | 2001Plus FCS, Revision Number 10 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.ifeature~geterrorcode.html) | | `ISldWorks::GetExecutablePath` | 2003 SP3, Revision Number 11.3 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isldworks~getexecutablepath.html) |@@ -159,6 +164,7 @@ available in SOLIDWORKS 2021. | `ISldWorks::GetImportFileData` | 2005 SP3, Revision Number 13.3 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isldworks~getimportfiledata.html) | | `IInterferenceDetectionMgr::GetInterferenceCount` | 2007 FCS, Revision Number 15.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iinterferencedetectionmgr~getinterferencecount.html) | | `IInterferenceDetectionMgr::GetInterferences` | 2007 FCS, Revision Number 15.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iinterferencedetectionmgr~getinterferences.html) |+| `IFace2::GetLoops` | 2009 FCS, Revision Number 17.0; the face's loops, for Offset Entities (0.11.4) | yes |  | [help](https://help.solidworks.com/2021/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iface2~getloops.html) | | `IBody2::GetMassProperties` | 2001Plus FCS Revision Number 10.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.ibody2~getmassproperties.html) | | `IPartDoc::GetMaterialPropertyName2` | 2005 FCS, Revision Number 13.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.ipartdoc~getmaterialpropertyname2.html) | | `ISldWorks::GetMathUtility` | 2001 FCS, Revision Number 9.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isldworks~getmathutility.html) |@@ -170,12 +176,15 @@ available in SOLIDWORKS 2021. | `ISldWorks::GetOpenDocumentByName` | 2000 FCS, Revision Number 8.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isldworks~getopendocumentbyname.html) | | `IModelDocExtension::GetPackAndGo` | 2011 FCS, Revision Number 19.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldocextension~getpackandgo.html) | | `IPartDoc::GetPartBox` | — (no Availability line: an original-API member) | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.ipartdoc~getpartbox.html) |-| `IModelDoc2::GetPathName` | 2001Plus FCS, Revision Number 10.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldoc2~getpathname.html) | | `IComponent2::GetPathName` | 2001Plus FCS, Revision Number 10.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.icomponent2~getpathname.html) |+| `IModelDoc2::GetPathName` | 2001Plus FCS, Revision Number 10.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldoc2~getpathname.html) | | `ISldWorks::GetProcessID` | 2001Plus FCS, Revision Number 10.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isldworks~getprocessid.html) | | `IModelDoc2::GetSaveFlag` | 2001Plus FCS, Revision Number 10.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldoc2~getsaveflag.html) | | `ISelectionMgr::GetSelectedObject6` | 2006 FCS, Revision Number 14 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iselectionmgr~getselectedobject6.html) | | `ISelectionMgr::GetSelectedObjectCount2` | 2006 FCS, Revision Number 14.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iselectionmgr~getselectedobjectcount2.html) |+| `ISketch::GetSketchSegments` | SOLIDWORKS 99, datecode 1999207; what Offset Entities added to the sketch (0.11.4) | yes |  | [help](https://help.solidworks.com/2021/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isketch~getsketchsegments.html) |+| `ISketchArc::GetStartPoint2` | 2000 FCS, Revision Number 8.0; as GetEndPoint2 | yes |  | [help](https://help.solidworks.com/2021/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isketcharc~getstartpoint2.html) |+| `ISketchLine::GetStartPoint2` | 2000 FCS, Revision Number 8.0; as GetEndPoint2 | yes |  | [help](https://help.solidworks.com/2021/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isketchline~getstartpoint2.html) | | `IComponent2::GetSuppression` | 2001Plus FCS, Revision Number 10.0 | yes | obsolete → IComponent2::GetSuppression2 | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.icomponent2~getsuppression.html) | | `IFace2::GetSurface` | 2001Plus FCS, Revision Number 10.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iface2~getsurface.html) | | `IModelDoc2::GetTitle` | 2001Plus FCS, Revision Number 10.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldoc2~gettitle.html) |@@ -197,18 +206,19 @@ available in SOLIDWORKS 2021. | `IFeatureManager::InsertMirrorFeature` | — (obsolete; used only when swFeatureScope_e cannot be read from the interop) | yes | obsolete → InsertMirrorFeature2 | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.ifeaturemanager~insertmirrorfeature.html) | | `IFeatureManager::InsertMirrorFeature2` | 2008 FCS, Revision Number 16.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.ifeaturemanager~insertmirrorfeature2.html) | | `IFeatureManager::InsertRefPlane` | 2010 FCS, Revision Number 18.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.ifeaturemanager~insertrefplane.html) |-| `ISketchManager::InsertSketch` | 2007 FCS, Revision Number 15.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isketchmanager~insertsketch.html) | | `IModelDoc2::InsertSketch` | — (no Availability line: an original-API member) | yes | obsolete → ISketchManager::InsertSketch | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldoc2~insertsketch.html) |+| `ISketchManager::InsertSketch` | 2007 FCS, Revision Number 15.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isketchmanager~insertsketch.html) | | `IAssemblyDoc::InterferenceDetectionManager` | 2007 FCS, Revision Number 15 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iassemblydoc~interferencedetectionmanager.html) |+| `ILoop2::IsOuter` | 2001Plus FCS, Revision Number 10.0; which loop is the outer one (0.11.4) | yes |  | [help](https://help.solidworks.com/2021/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iloop2~isouter.html) | | `ISldWorks::LoadFile2` | — (no Availability line: an original-API member) | yes | obsolete → ISldWorks::LoadFile4 | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isldworks~loadfile2.html) | | `ISldWorks::LoadFile4` | 2006 SP1, Revision Number 14.1 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isldworks~loadfile4.html) | | `IInterferenceDetectionMgr::MakeInterferingPartsTransparent` | 2007 FCS, Revision Number 15.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iinterferencedetectionmgr~makeinterferingpartstransparent.html) | | `ISelectData::Mark` | 2004 FCS, Revision Number 12 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iselectdata~mark.html) | | `IMassProperty::Mass` | 2003 SP2, Revision Number 11.2 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imassproperty~mass.html) | | `IModelDocExtension::MultiSelect2` | 2012 SP04, Revision Number 20.4 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldocextension~multiselect2.html) |-| `IFeature::Name` | — (no Availability line: an original-API member) | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.ifeature~name.html) | | `IBody2::Name` | 2005 FCS, Revision Number 13 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.ibody2~name.html) | | `IConfiguration::Name` | — (no Availability line: an original-API member) | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iconfiguration~name.html) |+| `IFeature::Name` | — (no Availability line: an original-API member) | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.ifeature~name.html) | | `IComponent2::Name2` | 2001Plus FCS, Revision Number 10.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.icomponent2~name2.html) | | `IModelDocExtension::NeedsRebuild2` | 2012 FCS, Revision Number 20.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldocextension~needsrebuild2.html) | | `ISldWorks::NewDocument` | 2000 FCS, Revision Number 8.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isldworks~newdocument.html) |@@ -225,8 +235,8 @@ available in SOLIDWORKS 2021. | `IModelDoc2::SaveBMP` | 2001Plus FCS, Revision Number 10.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldoc2~savebmp.html) | | `IModelDocExtension::SavePackAndGo` | 2011 FCS, Revision Number 19.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldocextension~savepackandgo.html) | | `IModelView::Scale2` | 99, datecode 1999207 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodelview~scale2.html) |-| `IFeature::Select2` | 2001Plus FCS, Revision Number 10.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.ifeature~select2.html) | | `IBody2::Select2` | not verified (0.11.0): a body selected for a mirror (mark 256) | not verified |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.ibody2~select2.html) |+| `IFeature::Select2` | 2001Plus FCS, Revision Number 10.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.ifeature~select2.html) | | `IEntity::Select4` | 2004 FCS, Revision Number 12.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.ientity~select4.html) | | `ISketchSegment::Select4` | not verified (0.11.0): the revolve axis's fallback selection | not verified |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isketchsegment~select4.html) | | `IModelDoc2::SelectByID` | — (no Availability line: an original-API member) | yes | obsolete → IModelDocExtension::SelectByID2 | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldoc2~selectbyid.html) |@@ -241,6 +251,7 @@ available in SOLIDWORKS 2021. | `ISldWorks::SetUserPreferenceToggle` | — (no Availability line: an original-API member) | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isldworks~setuserpreferencetoggle.html) | | `IModelDoc2::ShowNamedView2` | 2001Plus FCS, Revision Number 10.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldoc2~shownamedview2.html) | | `IModelDoc2::SketchManager` | 2005 FCS, Revision Number 13.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldoc2~sketchmanager.html) |+| `IModelDoc2::SketchOffsetEntities2` | 2001Plus FCS, Revision Number 10.0; Offset Entities of a face or its outer loop (0.11.4); its sign does not decide the side, so the bridge checks it | yes |  | [help](https://help.solidworks.com/2021/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldoc2~sketchoffsetentities2.html) | | `ISldWorks::StartupProcessCompleted` | 2015 FCS, Revision Number 23.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isldworks~startupprocesscompleted.html) | | `IMassProperty::SurfaceArea` | 2003 SP2, Revision Number 11.2 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imassproperty~surfacearea.html) | | `IDimension::SystemValue` | — (no Availability line: an original-API member) | yes | obsolete → IDimension::GetSystemValue3 | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.idimension~systemvalue.html) |@@ -257,13 +268,16 @@ available in SOLIDWORKS 2021. | `IBody2::Visible` | 2001Plus FCS, Revision Number 10.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.ibody2~visible.html) | | `IModelDoc2::Visible` | 2001Plus FCS, Revision Number 10.0 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldoc2~visible.html) | | `IMassProperty::Volume` | 2003 SP2, Revision Number 11.2 | yes |  | [help](https://help.solidworks.com/2024/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imassproperty~volume.html) |+| `ISketchPoint::X` | SOLIDWORKS 99, datecode 1999207; with Y and Z: a sketch point, in sketch space (0.11.4) | yes |  | [help](https://help.solidworks.com/2021/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isketchpoint~x.html) |  Enum values the DSL passes are read from the published swconst pages (cited in `com.rs`): -- `swEndConditions_e`: Blind 0, ThroughAll 1, OffsetFromSurface 5, MidPlane 6, ThroughAllBoth 9, UpToSelection 10, UpToNext 11 (0.11.0; UpToSurface 4 is the obsolete id that UpToSelection replaces — the face goes at mark 1). Revolves use Blind 0 and MidPlane 6 as Dir1Type.+- `swEndConditions_e`: Blind 0, ThroughAll 1, UpToSurface 4, OffsetFromSurface 5, MidPlane 6, ThroughAllBoth 9, UpToNext 11 (0.11.4; measured 2026-10-16: the help's UpToSelection 10 with the face at mark 1 built with an EMPTY direction box and stopped at the next face on 2026, for a boss and for a cut; 4, the id the macro recorder writes, is what the bridge sends). `Ddir1` TRUE drafts OUTWARD on 2026 (the help says inward); the bridge passes `outward` as is. - `ISketchManager::CreateArc` Direction: +1 counter-clockwise, −1 clockwise (a `short`). - `InsertMirrorFeature2` marks: features 1, plane or planar face 2, bodies 256. `FeatureRevolve2` marks: sketch 0, axis 4 (the bridge tries 16 when 4 builds nothing).+- A sketch REGION (0.11.4) is selected the way SOLIDWORKS' own "Enable Contour Selection Example" does it: `ISelectionMgr::EnableContourSelection = true`, then `SelectByID2(<sketch name>, "SKETCHREGION", x, y, z, Append true, MARK 4, null, 0)` at a model point inside the region, then the feature, then contour selection put back.+- `IModelDoc2::SketchOffsetEntities2(Offset metres, BothDirections, Chain)` (0.11.4) takes "an edge, loop, face, external sketch curve, external sketch contour, set of edges, or set of external sketch curves"; its sign does not fix the side (a forum report: −0.01 landed inside on one face, outside on another), so the bridge reads where the new segments landed and redoes it with the other sign once. - `swFeatureScope_e` and `swUserPreferenceDoubleValue_e.swMaterialPropertyDensity` are NOT on the help pages with numbers: they are read from the installed `SolidWorks.Interop.swconst.dll` by reflection, never guessed. - `swRefPlaneReferenceConstraints_e`: Distance 8, OptionFlip 256. - `swFeatureFilletOptions_e`: Propagate 1, UniformRadius 2.@@ -347,12 +361,27 @@ schema and rules are in [`tools/cswa/README.md`](../tools/cswa/README.md).   `"N of M CSWA parts within tolerance"`. On a release we have not run, this is the most direct   evidence that a modelled part weighs what SOLIDWORKS says it should. - `tools/cswa-check.py` from a dev container writes `cswa-report.json`.-- `tools/release.sh --require-live <report.json>` refuses to publish without a report from THIS-  version that passed every part and is newer than the last code commit.+- `tools/release.sh --require-live <report.json> --publish` refuses to publish without a report from+  THIS version that passed every part and is newer than the last code commit; since 0.11.4 a bare+  `--publish` is refused too (only `--docs-only`, for a release that changes no code, skips the gate).+- **The live run tests the very bytes that ship (the canary).** `tools/release.sh --canary` publishes+  the build as the release candidate `<version>-rc<N>`, with `manifests/canary.json` naming it. Only+  the test machine installs it, by hand: `bridge_install {manifestUrl: .../manifests/canary.json}`.+  `cswa-check` records the installed exe's sha256 (read back through ab's `read_file`), and+  `--require-live` publishes that zip unchanged, only when the report ran its exe.+  The canary never pins the machine. ab resolves a bridge's update URL from the bridge's own+  `bridge.json` `updateManifestUrl` first, before the URL it was installed from+  (`adom-bridge help bridge_check_updates`). Every zip declares the MAIN manifest there, and the+  canary file does too. Since the release has the canary's version, the machine runs the published+  bytes as they are; the next release reaches it like any other. -The 0.11.0 ops the specs use (lines and arcs, revolve, mirror, hole, the up-to end conditions,-draft, a density) are NOT YET MEASURED on any release: every step that uses them reports-`proven.live:false` until a live run passes.+The first live run (2026-10-15, bridge 0.11.2, SOLIDWORKS 2026: 8 of 8 within 0.0015 % of their keys)+measured the lines and arcs of a contour, the face-offset plane, the plain hole and the density+(docs/LIVE-RESULTS.md). Still NOT MEASURED on any release, each step using them reporting+`proven.live:false`: revolve and revolve-cut, mirror, the counterbored and countersunk hole, the+up-to end conditions, draft, construction geometry, and 0.11.4's Offset Entities and sketch regions.+The community specs `cswa-09` to `cswa-12` and the Step 4 pair `cswa-08` / `cswa-08b` build every one+of them, so the next live run measures them.  ## What is still unmeasured on 2021 
docs/LIVE-RESULTS.md+125−2
@@ -22,6 +22,49 @@ Built in 4 features, measured live: | 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@@ -170,10 +213,90 @@ and projects the origin onto the face, so their circles were moved to sketch  `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 **2021** (and any version other than 2026): supported by the API audit in `docs/COMPATIBILITY.md`, not yet run. `swx_selftest {"level":"write"}` on that install answers it.+- 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 or +Z.+- 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`).
install.sh

  
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "solidworks-bridge",-  "version": "0.11.3",+  "version": "0.11.4",   "type": "app",   "description": "Skills for your container so your AI knows how to drive the SOLIDWORKS bridge (swx_* verbs). The bridge runtime itself is the release zip — a single native swx-bridge.exe; Adom Bridge loads that.",   "tags": [
references/modelling-and-export.md+22−2
@@ -157,10 +157,30 @@ adom-bridge --ai-thread "<thread>" swx_save_as '{"outputPath":"C:\\parts\\bracke     a library material is applied). The step reports the density READ BACK.   - `swx_mass_properties` now also reports `massG`, `volumeMm3`, `surfaceAreaMm2`,     `centerOfMassMm` (the document's frame), `densityKgM3` and `materialName`.+- **Offset Entities and sketch regions (0.11.4, NOT YET MEASURED LIVE):**+  - **`offsetEntities`** is a sketch entity:+    `{offsetEntities: {fromFace: {atPointMm: [x,y,z]}, offsetMm: -1, loops: "outer"|"all", chain: true}}`.+    SOLIDWORKS offsets a model face's outline into the sketch+    (`IModelDoc2::SketchOffsetEntities2`). That is the outline you could not draw,+    because it is the model's own.+  - A NEGATIVE `offsetMm` goes INTO the face. `loops:"outer"` (the default) takes+    the outer loop's edges; `"all"` selects the face, holes included.+  - SOLIDWORKS' sign does not decide the side, so the bridge reads where the new+    segments landed. It redoes the offset the other way once, and reports+    `side` / `sideVerified`.+  - A sketch with an offset cannot be revolved.+  - **`regionsAtMm: [[u, v], ...]`** on `extrude` / `cut` (`regionAtMm` for one)+    extrudes only the sketch regions holding those points, in the sketch's own+    coordinates. This is SOLIDWORKS' Selected Contours, for contours that CROSS+    (an offset outline and a circle).+  - The simulator offsets only a plain block's face. It models regions only of+    profiles that nest or stand apart, and refuses the rest, saying so.+  - The CSWA Tool Block Step 4 (`cswa-08`) uses both. - **The CSWA benchmark:** `swx_selftest {"level":"cswa"}` builds the exam parts   shipped in `resources/cswa/` (the official sample exam's Tool Block, the 3dengr-  practice set, the LEGO brick), weighs each, and compares it with the PUBLISHED key-  within the exam's 1 %: `"N of M CSWA parts within tolerance"`. Call it with+  practice set, the LEGO brick, and community parts with keys derived+  analytically), weighs each, and compares it with its key within the spec's+  tolerance: `"N of M CSWA parts within tolerance"`. Call it with   `responseMode:"stream"` or `"job"`. - **Verify with `swx_inspect_bodies`, not with the step list.** It reports each   solid's bounding box, size, volume, area and mass in millimetres — that is
resources/cswa/cswa-08-tool-block-step4.json+124−6
@@ -1,14 +1,132 @@ {  "id": "cswa-08-tool-block-step4",  "extends": "cswa-07-tool-block-step3",- "title": "Official Tool Block, Step 4 (Q6): a pocket 1 mm inside the front face's outline",+ "title": "Official Tool Block, Step 4 (Q6): a pocket 1 mm inside the front face's outline (Offset Entities, sketch regions)",  "expected": {   "massG": 432.58,   "tolerancePct": 1.0  },- "keyBasis": "the official key (432.58 g); every plausible reading of the drawing lands within \u00b11 % (SOURCES.md, Part 4)",- "needsOps": [-  "offsetEntities"+ "keyBasis": "the official key (432.58 g). tools/cswa/SOURCES.md Part 4 read literally: the front face's OUTER loop offset 1 mm in; a 1-mm wall left outside the slot's R41 silhouette (R42); the pocket outside it cut to 12 from the back face (depth 32); the ear inside R41 recessed to 1 mm short of the slot's front wall (depth 7, a 1-mm skin), the \u00d811 left as it is. Predicted 434.72 g, +0.49 % (tools/cswa/tb4c.py's row wall 1 / R41 / no ring / skin 1: areas 581.28 and 936.27 mm\u00b2). tb4c's best case, 432.86 g, cuts the ear through to the slot with a 1-mm ring kept round the \u00d811 instead: the drawing cannot tell the two apart (SOURCES.md ambiguity 4) and both are within the exam's 1 %",+ "prediction": {+  "massG": 434.715,+  "how": "tools/cswa/tb4c.py (wall_out 1, wall_in 0, ring False, skin 1); the regions' areas 581.282 (outside R42) and 936.267 (inside R41) mm\u00b2, the \u00d811 excluded (95.033 mm\u00b2)"+ },+ "exercises": [+  "sketch.offsetEntities.outer",+  "cut.regions",+  "cut.offsetFromSurface",+  "sketch.multiProfile"  ],- "plan": "sketch on the front face of the right section: the face's outer loop offset 1 mm inward (Offset Entities) with the R41 silhouette offset 1 mm; cut to offsetFromSurface 12 from the back face; a second cut over the ear inside R41 to offsetFromSurface 1 mm from the slot's front wall"-}\ No newline at end of file+ "simulatorSkips": "Offset Entities of the Tool Block's front face needs SOLIDWORKS' own outline of that face (the simulator knows a face's outline only on a plain block); cswa-08b cuts the same pocket from the explicit inset profile",+ "needsOps": [],+ "scriptAppend": [+  {+   "op": "sketch",+   "face": {+    "atPointMm": [+     70,+     10,+     "=C"+    ]+   },+   "entities": [+    {+     "offsetEntities": {+      "fromFace": {+       "atPointMm": [+        70,+        10,+        "=C"+       ]+      },+      "offsetMm": -1,+      "loops": "outer",+      "chain": true+     }+    },+    {+     "circle": {+      "centerMm": [+       "=xR",+       "=scy"+      ],+      "radiusMm": 42+     }+    }+   ]+  },+  {+   "op": "cut",+   "regionsAtMm": [+    [+     25,+     0+    ]+   ],+   "offsetFromSurface": {+    "face": {+     "atPointMm": [+      30,+      0,+      0+     ]+    },+    "distanceMm": 12+   }+  },+  {+   "op": "sketch",+   "face": {+    "atPointMm": [+     70,+     10,+     "=C"+    ]+   },+   "entities": [+    {+     "offsetEntities": {+      "fromFace": {+       "atPointMm": [+        70,+        10,+        "=C"+       ]+      },+      "offsetMm": -1,+      "loops": "outer",+      "chain": true+     }+    },+    {+     "circle": {+      "centerMm": [+       "=xR",+       "=scy"+      ],+      "radiusMm": 41+     }+    }+   ]+  },+  {+   "op": "cut",+   "regionsAtMm": [+    [+     65,+     15+    ]+   ],+   "offsetFromSurface": {+    "face": {+     "atPointMm": [+      65,+      15,+      36+     ]+    },+    "distanceMm": 1+   }+  }+ ]+}
resources/cswa/cswa-08b-tool-block-step4-explicit.jsonadded+419
@@ -0,0 +1,419 @@+{+ "id": "cswa-08b-tool-block-step4-explicit",+ "extends": "cswa-07-tool-block-step3",+ "title": "Official Tool Block, Step 4 (Q6), the explicit inset profile: the same pocket drawn line by line (the Offset Entities fallback)",+ "expected": {+  "massG": 432.58,+  "tolerancePct": 1.0+ },+ "keyBasis": "the official key (432.58 g). tools/cswa/SOURCES.md Part 4 read literally: the front face's OUTER loop offset 1 mm in; a 1-mm wall left outside the slot's R41 silhouette (R42); the pocket outside it cut to 12 from the back face (depth 32); the ear inside R41 recessed to 1 mm short of the slot's front wall (depth 7, a 1-mm skin), the \u00d811 left as it is. Predicted 434.72 g, +0.49 % (tools/cswa/tb4c.py's row wall 1 / R41 / no ring / skin 1: areas 581.28 and 936.27 mm\u00b2). tb4c's best case, 432.86 g, cuts the ear through to the slot with a 1-mm ring kept round the \u00d811 instead: the drawing cannot tell the two apart (SOURCES.md ambiguity 4) and both are within the exam's 1 %. This variant DRAWS the two regions (the inset outline's lines, its R20 arc, and the R42 / R41 arcs, every intersection derived below) and cuts them blind (32 and 7), so it needs no op beyond the ones measured live on 2026-10-15",+ "prediction": {+  "massG": 434.715,+  "how": "tools/cswa/tb4c.py (wall_out 1, wall_in 0, ring False, skin 1); the regions' areas 581.282 (outside R42) and 936.267 (inside R41) mm\u00b2, the \u00d811 excluded (95.033 mm\u00b2)"+ },+ "exercises": [+  "sketch.line",+  "sketch.arc",+  "cut.one",+  "sketch.face.front.positive"+ ],+ "needsOps": [],+ "derivedAppend": [+  [+   "s4c19x",+   "Tx + 19*nx"+  ],+  [+   "s4c19y",+   "Ty + 19*ny"+  ],+  [+   "s4fL",+   "sqrt((xR - xRL)^2 + (yRE + 33)^2)"+  ],+  [+   "s4fnx",+   "-(yRE + 33)/s4fL"+  ],+  [+   "s4fny",+   "(xR - xRL)/s4fL"+  ],+  [+   "s4fc",+   "s4fnx*xRL - 33*s4fny + 1"+  ],+  [+   "s4ccs",+   "xR - 5 + yRT - sqrt(2)"+  ],+  [+   "s4qblx",+   "xstep + 1"+  ],+  [+   "s4qbfx",+   "(s4fc + 13*s4fny)/s4fnx"+  ],+  [+   "s4qfry",+   "(s4fc - s4fnx*(xR - 1))/s4fny"+  ],+  [+   "s4qrcy",+   "s4ccs - (xR - 1)"+  ],+  [+   "s4qctx",+   "s4ccs - (yRT - 1)"+  ],+  [+   "s4qtax",+   "s4c19x + sqrt(400 - (yRT - 1 - s4c19y)^2)"+  ],+  [+   "s4tpx",+   "Tx - nx"+  ],+  [+   "s4tpy",+   "Ty - ny"+  ],+  [+   "s4qlly",+   "(ny*18 - 1 - nx*(xstep + 1))/ny"+  ],+  [+   "s4fdx",+   "s4fny"+  ],+  [+   "s4fdy",+   "-s4fnx"+  ],+  [+   "s4wx",+   "s4qbfx - xR"+  ],+  [+   "s4wy",+   "-13 - scy"+  ],+  [+   "s4fb",+   "s4wx*s4fdx + s4wy*s4fdy"+  ],+  [+   "s4fq",+   "s4wx^2 + s4wy^2"+  ],+  [+   "s4s42",+   "-s4fb - sqrt(s4fb^2 - s4fq + 42^2)"+  ],+  [+   "s4x1x",+   "s4qbfx + s4s42*s4fdx"+  ],+  [+   "s4x1y",+   "-13 + s4s42*s4fdy"+  ],+  [+   "s4s41",+   "-s4fb - sqrt(s4fb^2 - s4fq + 41^2)"+  ],+  [+   "s4x3x",+   "s4qbfx + s4s41*s4fdx"+  ],+  [+   "s4x3y",+   "-13 + s4s41*s4fdy"+  ],+  [+   "s4ex",+   "s4c19x - xR"+  ],+  [+   "s4ey",+   "s4c19y - scy"+  ],+  [+   "s4ed",+   "sqrt(s4ex^2 + s4ey^2)"+  ],+  [+   "s4a42",+   "(42^2 - 400 + s4ed^2)/(2*s4ed)"+  ],+  [+   "s4h42",+   "sqrt(42^2 - s4a42^2)"+  ],+  [+   "s4x2x",+   "xR + s4a42*s4ex/s4ed - s4h42*s4ey/s4ed"+  ],+  [+   "s4x2y",+   "scy + s4a42*s4ey/s4ed + s4h42*s4ex/s4ed"+  ],+  [+   "s4a41",+   "(41^2 - 400 + s4ed^2)/(2*s4ed)"+  ],+  [+   "s4h41",+   "sqrt(41^2 - s4a41^2)"+  ],+  [+   "s4x4x",+   "xR + s4a41*s4ex/s4ed - s4h41*s4ey/s4ed"+  ],+  [+   "s4x4y",+   "scy + s4a41*s4ey/s4ed + s4h41*s4ex/s4ed"+  ],+  [+   "s4m1ux",+   "(s4x1x - xR)/42 + (s4x2x - xR)/42"+  ],+  [+   "s4m1uy",+   "(s4x1y - scy)/42 + (s4x2y - scy)/42"+  ],+  [+   "s4m1n",+   "sqrt(s4m1ux^2 + s4m1uy^2)"+  ],+  [+   "s4m1x",+   "xR + 42*s4m1ux/s4m1n"+  ],+  [+   "s4m1y",+   "scy + 42*s4m1uy/s4m1n"+  ],+  [+   "s4m2ux",+   "(s4x2x - s4c19x)/20 + (s4tpx - s4c19x)/20"+  ],+  [+   "s4m2uy",+   "(s4x2y - s4c19y)/20 + (s4tpy - s4c19y)/20"+  ],+  [+   "s4m2n",+   "sqrt(s4m2ux^2 + s4m2uy^2)"+  ],+  [+   "s4m2x",+   "s4c19x + 20*s4m2ux/s4m2n"+  ],+  [+   "s4m2y",+   "s4c19y + 20*s4m2uy/s4m2n"+  ],+  [+   "s4m3ux",+   "(s4qtax - s4c19x)/20 + (s4x4x - s4c19x)/20"+  ],+  [+   "s4m3uy",+   "(yRT - 1 - s4c19y)/20 + (s4x4y - s4c19y)/20"+  ],+  [+   "s4m3n",+   "sqrt(s4m3ux^2 + s4m3uy^2)"+  ],+  [+   "s4m3x",+   "s4c19x + 20*s4m3ux/s4m3n"+  ],+  [+   "s4m3y",+   "s4c19y + 20*s4m3uy/s4m3n"+  ],+  [+   "s4m4ux",+   "(s4x4x - xR)/41 + (s4x3x - xR)/41"+  ],+  [+   "s4m4uy",+   "(s4x4y - scy)/41 + (s4x3y - scy)/41"+  ],+  [+   "s4m4n",+   "sqrt(s4m4ux^2 + s4m4uy^2)"+  ],+  [+   "s4m4x",+   "xR + 41*s4m4ux/s4m4n"+  ],+  [+   "s4m4y",+   "scy + 41*s4m4uy/s4m4n"+  ]+ ],+ "scriptAppend": [+  {+   "op": "sketch",+   "face": {+    "atPointMm": [+     70,+     10,+     "=C"+    ]+   },+   "entities": [+    {+     "polyline": {+      "points": [+       [+        "=s4qblx",+        -13+       ],+       [+        "=s4qbfx",+        -13+       ],+       [+        "=s4x1x",+        "=s4x1y"+       ]+      ]+     }+    },+    {+     "arc3": {+      "start": [+       "=s4x1x",+       "=s4x1y"+      ],+      "mid": [+       "=s4m1x",+       "=s4m1y"+      ],+      "end": [+       "=s4x2x",+       "=s4x2y"+      ]+     }+    },+    {+     "arc3": {+      "start": [+       "=s4x2x",+       "=s4x2y"+      ],+      "mid": [+       "=s4m2x",+       "=s4m2y"+      ],+      "end": [+       "=s4tpx",+       "=s4tpy"+      ]+     }+    },+    {+     "polyline": {+      "points": [+       [+        "=s4tpx",+        "=s4tpy"+       ],+       [+        "=s4qblx",+        "=s4qlly"+       ],+       [+        "=s4qblx",+        -13+       ]+      ]+     }+    }+   ]+  },+  {+   "op": "cut",+   "depthMm": 32+  },+  {+   "op": "sketch",+   "face": {+    "atPointMm": [+     70,+     10,+     "=C"+    ]+   },+   "entities": [+    {+     "polyline": {+      "points": [+       [+        "=s4x3x",+        "=s4x3y"+       ],+       [+        "=xR - 1",+        "=s4qfry"+       ],+       [+        "=xR - 1",+        "=s4qrcy"+       ],+       [+        "=s4qctx",+        "=yRT - 1"+       ],+       [+        "=s4qtax",+        "=yRT - 1"+       ]+      ]+     }+    },+    {+     "arc3": {+      "start": [+       "=s4qtax",+       "=yRT - 1"+      ],+      "mid": [+       "=s4m3x",+       "=s4m3y"+      ],+      "end": [+       "=s4x4x",+       "=s4x4y"+      ]+     }+    },+    {+     "arc3": {+      "start": [+       "=s4x4x",+       "=s4x4y"+      ],+      "mid": [+       "=s4m4x",+       "=s4m4y"+      ],+      "end": [+       "=s4x3x",+       "=s4x3y"+      ]+     }+    }+   ]+  },+  {+   "op": "cut",+   "depthMm": 7+  }+ ]+}
resources/cswa/cswa-09-community-stepped-shaft.jsonadded+163
@@ -0,0 +1,163 @@+{+ "id": "cswa-09-community-stepped-shaft",+ "title": "Community: a stepped hollow shaft - revolved, a groove revolve-cut, a half-depth flat revolve-cut mid-plane",+ "source": "community: built for the bridge's benchmark (no exam publishes it); the key is derived analytically in `derivation`",+ "official": false,+ "units": "MMGS",+ "origin": "the shaft's axis is model X (the Front Plane sketch's x axis), its left end at x = 0; a \u00d86 bore through",+ "material": {+  "name": "6061 Alloy",+  "densityKgM3": 2700+ },+ "expected": {+  "massG": 103.568885,+  "volumeMm3": 38358.8463,+  "centerOfMassMm": [+   46.831491,+   -0.114185,+   0.0+  ],+  "tolerancePct": 0.1+ },+ "keyBasis": "derived analytically (derivation): three coaxial tubes (\u00d820 x 30, \u00d830 x 40, \u00d816 x 25, \u00d86 bore) less a 2-deep x 5-wide groove at x 45..50 and the y > 0 half of a ring r 7..10 over x 0..10 (a 180\u00b0 mid-plane revolve-cut from a profile on +Y sweeps -90\u00b0..+90\u00b0 about +Y); the half ring's centroid is 4(R^3-r^3)/(3\u03c0(R^2-r^2)) off the axis. Exact: held to 0.1 %",+ "exercises": [+  "revolve.360",+  "revolve_cut.360",+  "revolve_cut.midPlane",+  "sketch.construction",+  "sketch.line",+  "sketch.rect"+ ],+ "derivation": [+  [+   "V_body",+   "pi*((10**2 - 3**2)*30 + (15**2 - 3**2)*40 + (8**2 - 3**2)*25)"+  ],+  [+   "Mx_body",+   "pi*((10**2 - 3**2)*30*15 + (15**2 - 3**2)*40*50 + (8**2 - 3**2)*25*82.5)"+  ],+  [+   "V_groove",+   "pi*(15**2 - 13**2)*5"+  ],+  [+   "V_notch",+   "pi*(10**2 - 7**2)*10/2"+  ],+  [+   "yc_notch",+   "4*(10**3 - 7**3)/(3*pi*(10**2 - 7**2))"+  ],+  [+   "volumeMm3",+   "V_body - V_groove - V_notch"+  ],+  [+   "massG",+   "volumeMm3*2.7e-3"+  ],+  [+   "centerOfMassMm",+   "[(Mx_body - V_groove*47.5 - V_notch*5)/volumeMm3, -V_notch*yc_notch/volumeMm3, 0.0]"+  ]+ ],+ "needsOps": [],+ "script": [+  {+   "op": "new_part"+  },+  {+   "op": "sketch",+   "plane": "Front Plane",+   "entities": [+    {+     "polyline": {+      "points": [+       [+        0,+        3+       ],+       [+        0,+        10+       ],+       [+        30,+        10+       ],+       [+        30,+        15+       ],+       [+        70,+        15+       ],+       [+        70,+        8+       ],+       [+        95,+        8+       ],+       [+        95,+        3+       ]+      ],+      "close": true+     }+    }+   ]+  },+  {+   "op": "revolve",+   "axis": "x"+  },+  {+   "op": "sketch",+   "plane": "Front Plane",+   "entities": [+    {+     "rect": {+      "xMm": 45,+      "yMm": 13,+      "widthMm": 5,+      "heightMm": 2+     }+    }+   ]+  },+  {+   "op": "revolve_cut",+   "axis": "x"+  },+  {+   "op": "sketch",+   "plane": "Front Plane",+   "entities": [+    {+     "rect": {+      "xMm": 0,+      "yMm": 7,+      "widthMm": 10,+      "heightMm": 3+     }+    }+   ]+  },+  {+   "op": "revolve_cut",+   "axis": "x",+   "angleDeg": 180,+   "midPlane": true+  },+  {+   "op": "set_material",+   "name": "6061 Alloy",+   "densityKgM3": 2700+  }+ ]+}
resources/cswa/cswa-10-community-mirrored-block.jsonadded+157
@@ -0,0 +1,157 @@+{+ "id": "cswa-10-community-mirrored-block",+ "title": "Community: a stepped block - one quarter, mirrored about Front Plane (features) and Right Plane (bodies); a boss mirrored about an offset plane",+ "source": "community: built for the bridge's benchmark (no exam publishes it); the key is derived analytically in `derivation`",+ "official": false,+ "units": "MMGS",+ "origin": "symmetric about Front Plane (z = 0) and Right Plane (x = 0), standing on Top Plane (y = 0)",+ "material": {+  "name": "AISI 1020",+  "densityKgM3": 7900+ },+ "expected": {+  "massG": 722.912919,+  "volumeMm3": 91507.964474,+  "centerOfMassMm": [+   -0.082395,+   16.02733,+   0.0+  ],+  "tolerancePct": 0.1+ },+ "keyBasis": "derived analytically (derivation): four copies of the quarter profile (steps 60 x 10, 40 x 15, 20 x 15; area 1500 mm\u00b2, centroid y 15.5) 15 deep, and two \u00d88 x 15 bosses on the top face at x = -15 and (mirrored about x = -5) x = +5. Exact: held to 0.1 %",+ "exercises": [+  "mirror.features.plane",+  "mirror.bodies.plane",+  "mirror.features.offset",+  "sketch.line",+  "sketch.face.top.positive"+ ],+ "derivation": [+  [+   "A_q",+   "60*10 + 40*15 + 20*15"+  ],+  [+   "Ybar_q",+   "(60*10*5 + 40*15*17.5 + 20*15*32.5)/A_q"+  ],+  [+   "V_block",+   "4*A_q*15"+  ],+  [+   "V_boss",+   "pi*4**2*15"+  ],+  [+   "volumeMm3",+   "V_block + 2*V_boss"+  ],+  [+   "massG",+   "volumeMm3*7.9e-3"+  ],+  [+   "centerOfMassMm",+   "[V_boss*(-15 + 5)/volumeMm3, (V_block*Ybar_q + 2*V_boss*(40 + 15/2))/volumeMm3, 0.0]"+  ]+ ],+ "needsOps": [],+ "script": [+  {+   "op": "new_part"+  },+  {+   "op": "sketch",+   "plane": "Front Plane",+   "entities": [+    {+     "polyline": {+      "points": [+       [+        0,+        0+       ],+       [+        60,+        0+       ],+       [+        60,+        10+       ],+       [+        40,+        10+       ],+       [+        40,+        25+       ],+       [+        20,+        25+       ],+       [+        20,+        40+       ],+       [+        0,+        40+       ]+      ],+      "close": true+     }+    }+   ]+  },+  {+   "op": "extrude",+   "depthMm": 15+  },+  {+   "op": "mirror",+   "features": "last",+   "plane": "Front Plane"+  },+  {+   "op": "mirror",+   "features": "all",+   "plane": "Right Plane"+  },+  {+   "op": "sketch_circle",+   "face": {+    "atPointMm": [+     0,+     40,+     0+    ]+   },+   "centerMm": [+    -15,+    0+   ],+   "radiusMm": 4+  },+  {+   "op": "extrude",+   "depthMm": 15+  },+  {+   "op": "mirror",+   "features": "last",+   "plane": {+    "offsetFrom": "Right Plane",+    "offsetMm": -5+   }+  },+  {+   "op": "set_material",+   "name": "AISI 1020",+   "densityKgM3": 7900+  }+ ]+}
resources/cswa/cswa-11-community-slotted-plate.jsonadded+214
@@ -0,0 +1,214 @@+{+ "id": "cswa-11-community-slotted-plate",+ "title": "Community: a plate with two straight slots, a hexagon pocket, a counterbored and a countersunk hole",+ "source": "community: built for the bridge's benchmark (no exam publishes it); the key is derived analytically in `derivation`",+ "official": false,+ "units": "MMGS",+ "origin": "the plate centred on the origin on Top Plane, 120 (X) x 80 (Z) x 12 (Y, up)",+ "material": {+  "name": "6061 Alloy",+  "densityKgM3": 2700+ },+ "expected": {+  "massG": 276.35927,+  "volumeMm3": 102355.285153,+  "centerOfMassMm": [+   1.375325,+   5.907388,+   0.035809+  ],+  "tolerancePct": 0.1+ },+ "keyBasis": "derived analytically (derivation): the plate less two 30 c-c x 10 slots through (centred x -30, z \u00b120), a hexagon pocket (circumradius 12, area 3\u221a3/2\u00b712\u00b2, 5 deep, at x 25), a \u00d88 hole through with a \u00d814 x 4 counterbore at (45, z -25) and a \u00d88 hole through with a \u00d816 x 90\u00b0 countersink (a 4-deep cone frustum, centroid h(R\u00b2+2Rr+3r\u00b2)/(4(R\u00b2+Rr+r\u00b2)) below the top) at (45, z +25). Exact: held to 0.1 %",+ "exercises": [+  "sketch.line",+  "sketch.arc",+  "cut.one.throughAll",+  "cut.one",+  "hole.counterbore",+  "hole.countersink",+  "sketch.face.top.positive"+ ],+ "derivation": [+  [+   "V_plate",+   "120*80*12"+  ],+  [+   "A_slot",+   "30*10 + pi*5**2"+  ],+  [+   "A_hex",+   "3*sqrt(3)/2*12**2"+  ],+  [+   "V_cb_big",+   "pi*7**2*4"+  ],+  [+   "V_cb_small",+   "pi*4**2*(12 - 4)"+  ],+  [+   "h_cs",+   "(16 - 8)/2/tan(radians(90)/2)"+  ],+  [+   "V_cs_cone",+   "pi*h_cs/3*(8**2 + 8*4 + 4**2)"+  ],+  [+   "d_cs_cone",+   "h_cs*(8**2 + 2*8*4 + 3*4**2)/(4*(8**2 + 8*4 + 4**2))"+  ],+  [+   "V_cs_small",+   "pi*4**2*(12 - h_cs)"+  ],+  [+   "V_cb",+   "V_cb_big + V_cb_small"+  ],+  [+   "V_cs",+   "V_cs_cone + V_cs_small"+  ],+  [+   "volumeMm3",+   "V_plate - 2*A_slot*12 - A_hex*5 - V_cb - V_cs"+  ],+  [+   "massG",+   "volumeMm3*2.7e-3"+  ],+  [+   "Mx",+   "-2*A_slot*12*(-30) - A_hex*5*25 - (V_cb + V_cs)*45"+  ],+  [+   "My",+   "V_plate*6 - 2*A_slot*12*6 - A_hex*5*(12 - 5/2) - V_cb_big*(12 - 2) - V_cb_small*(12 - 4)/2 - V_cs_cone*(12 - d_cs_cone) - V_cs_small*(12 - h_cs)/2"+  ],+  [+   "Mz",+   "-V_cb*(-25) - V_cs*25"+  ],+  [+   "centerOfMassMm",+   "[Mx/volumeMm3, My/volumeMm3, Mz/volumeMm3]"+  ]+ ],+ "needsOps": [],+ "script": [+  {+   "op": "new_part"+  },+  {+   "op": "sketch_rect",+   "plane": "Top Plane",+   "widthMm": 120,+   "heightMm": 80,+   "anchor": "center"+  },+  {+   "op": "extrude",+   "depthMm": 12+  },+  {+   "op": "sketch",+   "face": {+    "atPointMm": [+     0,+     12,+     0+    ]+   },+   "entities": [+    {+     "slot": {+      "center": [+       -30,+       20+      ],+      "lengthMm": 30,+      "widthMm": 10+     }+    },+    {+     "slot": {+      "center": [+       -30,+       -20+      ],+      "lengthMm": 30,+      "widthMm": 10+     }+    }+   ]+  },+  {+   "op": "cut",+   "throughAll": true+  },+  {+   "op": "sketch",+   "face": {+    "atPointMm": [+     0,+     12,+     0+    ]+   },+   "entities": [+    {+     "polygon": {+      "center": [+       25,+       0+      ],+      "sides": 6,+      "circumradiusMm": 12+     }+    }+   ]+  },+  {+   "op": "cut",+   "depthMm": 5+  },+  {+   "op": "hole",+   "atMm": [+    45,+    12,+    -25+   ],+   "diameterMm": 8,+   "throughAll": true,+   "counterbore": {+    "diameterMm": 14,+    "depthMm": 4+   }+  },+  {+   "op": "hole",+   "atMm": [+    45,+    12,+    25+   ],+   "diameterMm": 8,+   "throughAll": true,+   "countersink": {+    "diameterMm": 16,+    "angleDeg": 90+   }+  },+  {+   "op": "set_material",+   "name": "6061 Alloy",+   "densityKgM3": 2700+  }+ ]+}
resources/cswa/cswa-12-community-up-to-plates.jsonadded+305
@@ -0,0 +1,305 @@+{+ "id": "cswa-12-community-up-to-plates",+ "title": "Community: three plates joined by pillars ending up to next, up to a face and 8 short of a face; a drafted boss, a cut up to a face, a drafted pocket",+ "source": "community: built for the bridge's benchmark (no exam publishes it); the key is derived analytically in `derivation`",+ "official": false,+ "units": "MMGS",+ "origin": "three 80 x 50 x 10 plates on Front Plane at z 0, 40 and 80 (+Z), corner at the origin",+ "material": {+  "name": "6061 Alloy",+  "densityKgM3": 2700+ },+ "expected": {+  "massG": 369.687533,+  "volumeMm3": 136921.308673,+  "centerOfMassMm": [+   40.525243,+   24.723219,+   45.869733+  ],+  "tolerancePct": 0.1+ },+ "keyBasis": "derived analytically (derivation): three plates; \u00d812 pillars from z = 10 to the NEXT face (z 40), to 8 short of the top plate's back face (z 72, through the middle plate) and UP TO that face (z 80); a \u00d820 boss 12 high drafted 5\u00b0 inward (a frustum); a \u00d88 hole cut from the top face up to the bottom face (10 of each plate); a 20 x 10 pocket 6 deep drafted 10\u00b0 (area (20-2kt)(10-2kt), k = tan 10\u00b0). Every reading is told apart at 0.1 %: up to next instead of up to the face weighs 2.5 % less, the offset beyond the face instead of short of it 0.66 % more, the boss without its draft 0.28 % more (drafted outward 0.58 %), the pocket without its draft 0.13 % less (outward 0.28 %). Exact: held to 0.1 %",+ "exercises": [+  "extrude.upToNext",+  "extrude.offsetFromSurface",+  "extrude.upToSurface",+  "extrude.draft",+  "cut.upToSurface",+  "cut.draft",+  "sketch.offset.front.positive",+  "sketch.face.front.positive",+  "sketch.face.front.negative"+ ],+ "derivation": [+  [+   "V_plate",+   "80*50*10"+  ],+  [+   "a_p",+   "pi*6**2"+  ],+  [+   "V_A",+   "a_p*(40 - 10)"+  ],+  [+   "V_C1",+   "a_p*(40 - 10)"+  ],+  [+   "V_C2",+   "a_p*((80 - 8) - 50)"+  ],+  [+   "V_B1",+   "a_p*(40 - 10)"+  ],+  [+   "V_B2",+   "a_p*(80 - 50)"+  ],+  [+   "k5",+   "tan(radians(5))"+  ],+  [+   "r_top",+   "10 - 12*k5"+  ],+  [+   "V_boss",+   "pi*12/3*(10**2 + 10*r_top + r_top**2)"+  ],+  [+   "z_boss",+   "90 + 12*(10**2 + 2*10*r_top + 3*r_top**2)/(4*(10**2 + 10*r_top + r_top**2))"+  ],+  [+   "V_hole",+   "pi*4**2*10"+  ],+  [+   "k10",+   "tan(radians(10))"+  ],+  [+   "V_pocket",+   "200*6 - 30*k10*6**2 + 4/3*k10**2*6**3"+  ],+  [+   "z_pocket",+   "(200*6**2/2 - 60*k10*6**3/3 + 4*k10**2*6**4/4)/V_pocket"+  ],+  [+   "volumeMm3",+   "3*V_plate + V_A + V_C1 + V_C2 + V_B1 + V_B2 + V_boss - 3*V_hole - V_pocket"+  ],+  [+   "massG",+   "volumeMm3*2.7e-3"+  ],+  [+   "Mx",+   "3*V_plate*40 + V_A*12 + (V_C1 + V_C2)*68 + (V_B1 + V_B2)*40 + V_boss*40 - 3*V_hole*25 - V_pocket*60"+  ],+  [+   "My",+   "3*V_plate*25 + (V_A + V_C1 + V_C2 + V_B1 + V_B2 + V_boss)*25 - 3*V_hole*40 - V_pocket*40"+  ],+  [+   "Mz",+   "V_plate*(5 + 45 + 85) + V_A*25 + V_C1*25 + V_C2*(50 + 72)/2 + V_B1*25 + V_B2*65 + V_boss*z_boss - V_hole*(5 + 45 + 85) - V_pocket*z_pocket"+  ],+  [+   "centerOfMassMm",+   "[Mx/volumeMm3, My/volumeMm3, Mz/volumeMm3]"+  ]+ ],+ "needsOps": [],+ "script": [+  {+   "op": "new_part"+  },+  {+   "op": "sketch_rect",+   "plane": "Front Plane",+   "xMm": 0,+   "yMm": 0,+   "widthMm": 80,+   "heightMm": 50+  },+  {+   "op": "extrude",+   "depthMm": 10+  },+  {+   "op": "sketch_rect",+   "plane": {+    "offsetFrom": "Front Plane",+    "offsetMm": 40+   },+   "xMm": 0,+   "yMm": 0,+   "widthMm": 80,+   "heightMm": 50+  },+  {+   "op": "extrude",+   "depthMm": 10+  },+  {+   "op": "sketch_rect",+   "plane": {+    "offsetFrom": "Front Plane",+    "offsetMm": 80+   },+   "xMm": 0,+   "yMm": 0,+   "widthMm": 80,+   "heightMm": 50+  },+  {+   "op": "extrude",+   "depthMm": 10+  },+  {+   "op": "sketch_circle",+   "plane": {+    "offsetFrom": "Front Plane",+    "offsetMm": 10+   },+   "centerMm": [+    12,+    25+   ],+   "radiusMm": 6+  },+  {+   "op": "extrude",+   "upToNext": true+  },+  {+   "op": "sketch_circle",+   "plane": {+    "offsetFrom": "Front Plane",+    "offsetMm": 10+   },+   "centerMm": [+    68,+    25+   ],+   "radiusMm": 6+  },+  {+   "op": "extrude",+   "offsetFromSurface": {+    "face": {+     "atPointMm": [+      68,+      25,+      80+     ]+    },+    "distanceMm": 8+   }+  },+  {+   "op": "sketch_circle",+   "plane": {+    "offsetFrom": "Front Plane",+    "offsetMm": 10+   },+   "centerMm": [+    40,+    25+   ],+   "radiusMm": 6+  },+  {+   "op": "extrude",+   "upToSurface": {+    "face": {+     "atPointMm": [+      40,+      25,+      80+     ]+    }+   }+  },+  {+   "op": "sketch_circle",+   "face": {+    "atPointMm": [+     25,+     40,+     90+    ]+   },+   "centerMm": [+    25,+    40+   ],+   "radiusMm": 4+  },+  {+   "op": "cut",+   "upToSurface": {+    "face": {+     "atPointMm": [+      25,+      40,+      0+     ]+    }+   }+  },+  {+   "op": "sketch_rect",+   "face": {+    "atPointMm": [+     60,+     40,+     0+    ]+   },+   "xMm": 60,+   "yMm": 40,+   "widthMm": 20,+   "heightMm": 10,+   "anchor": "center"+  },+  {+   "op": "cut",+   "depthMm": 6,+   "draftDeg": 10+  },+  {+   "op": "sketch_circle",+   "face": {+    "atPointMm": [+     40,+     25,+     90+    ]+   },+   "centerMm": [+    40,+    25+   ],+   "radiusMm": 10+  },+  {+   "op": "extrude",+   "depthMm": 12,+   "draftDeg": 5+  },+  {+   "op": "set_material",+   "name": "6061 Alloy",+   "densityKgM3": 2700+  }+ ]+}
src/comhost/com.rs+336−14
@@ -5679,7 +5679,7 @@ impl ComBackend {                           "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"}))             } -            Op::Sketch { plane, entities, .. } => {+            Op::Sketch { plane, entities, offsets, .. } => {                 let doc = self.resolve(&target)?;                 self.ensure_active(&doc, st)?;                 let defaults = self.default_planes(&doc, st)?;@@ -5792,6 +5792,22 @@ impl ComBackend {                     },                     (Some(_), None) => failure = Some("the sketch's model-to-sketch transform could not be read, so the documented axes cannot be honoured — nothing was drawn".into()),                 }+                // OFFSET ENTITIES (0.11.4) FIRST, into the still-empty sketch: the+                // model's own edges offset by SOLIDWORKS, the side checked — so+                // every segment the sketch holds afterwards is the offset's, and+                // nothing the bridge draws next can be mistaken for it.+                let mut offsets_report: Vec<Value> = Vec::new();+                if failure.is_none() {+                    for (k, o) in offsets.iter().enumerate() {+                        match self.offset_face(&doc, o, m2s.as_ref()) {+                            Ok(r) => offsets_report.push(r),+                            Err(e) => {+                                failure = Some(format!("offsetEntities {} — {}", k + 1, e.message));+                                break;+                            }+                        }+                    }+                }                 // AddToDB: entities go straight into the sketch, without the                 // snapping/inference that would merge nearby points of several                 // profiles (ISketchManager::AddToDB, 2008 FCS). UNMEASURED for@@ -5883,7 +5899,14 @@ impl ComBackend {                 // #7: an op in between clears the selection).                 let sketch_name = Self::last_feature_name(&doc);                 segments.resize(to_draw.len(), None);-                st.pending = Some(PendingSketch { name: sketch_name.clone().unwrap_or_default(), normal, reference, segments });+                st.pending = Some(PendingSketch {+                    name: sketch_name.clone().unwrap_or_default(),+                    normal,+                    reference,+                    segments,+                    mapping,+                    sketch_to_model: m2s.as_ref().map(|t| t.inverse()),+                });                 let mut out = json!({                     "plane": plane.describe(),                     "sketchedOn": on,@@ -5896,6 +5919,9 @@ impl ComBackend {                     "transformInverted": transform_inverted,                     "planeFrames": st.frames_source,                 });+                if !offsets_report.is_empty() {+                    out["offsets"] = json!(offsets_report);+                }                 crate::script::single_entity_fields(entities, &mut out);                 Ok(out)             }@@ -5930,11 +5956,18 @@ impl ComBackend {                     let _ = Self::clear_selection(&doc);                     return Err(HostError::msg(format!("could not re-select the sketch '{}' to {}", pending.name, if cut { "cut" } else { "extrude" })));                 }+                // SKETCH REGIONS (0.11.4) — SOLIDWORKS' "Selected Contours", as+                // its own example does it (help: "Enable Contour Selection+                // Example"): ISelectionMgr::EnableContourSelection on, each region+                // by SelectByID2(sketch, "SKETCHREGION", a model point inside it,+                // Append, MARK 4), the feature, contour selection back as it was.+                let (contour_sel, regions_report) = self.select_regions(&doc, &pending, &ext.regions)?;                 // swEndConditions_e (help.solidworks.com/2024/english/api/swconst/                 // SOLIDWORKS.Interop.swconst~SOLIDWORKS.Interop.swconst.-                // swEndConditions_e.html): Blind 0, ThroughAll 1, OffsetFromSurface-                // 5, MidPlane 6, ThroughAllBoth 9, UpToSelection 10, UpToNext 11-                // (UpToSurface 4 is the obsolete id; UpToSelection replaces it).+                // swEndConditions_e.html): Blind 0, ThroughAll 1, UpToSurface 4,+                // OffsetFromSurface 5, MidPlane 6, ThroughAllBoth 9, UpToSelection+                // 10, UpToNext 11. MEASURED 2026-10-16: "up to surface" is 4 here,+                // not the help's 10 - see modeling::end_condition_id.                 const BLIND: i32 = 0;                 const THROUGH_ALL: i32 = 1;                 const MID_PLANE: i32 = 6;@@ -5949,12 +5982,19 @@ impl ComBackend {                     // UNMEASURED: Through All - Both as Sd=true, T1=9.                     (None, Direction::Both, true) => (true, THROUGH_ALL_BOTH, BLIND, 0.01, 0.01),                 };-                // OffsetReverse1: the offset goes BEYOND the face instead of short of it.+                // OffsetReverse1: the offset goes BEYOND the face instead of short of it+                // — the help's own words (FeatureCut4 / FeatureExtrusion3, read+                // 2026-10-16): "true specifies offset in direction away from the+                // sketch, false specifies offset from the face or plane in a+                // direction toward the sketch".                 let offset_reverse = matches!(ext.up_to, Some(crate::script::UpTo::OffsetFrom { reverse_offset: true, .. }));-                // DRAFT (0.11.0): Dchk1 on, Ddir1 TRUE = INWARD, Dang1 radians — and-                // the same on side 2 when the extent goes two ways.+                // DRAFT (0.11.0): Dchk1 on, Dang1 radians - and the same on side 2+                // when the extent goes two ways. Ddir1 TRUE = OUTWARD, as SOLIDWORKS+                // measured it on 2026-10-16 (the help says inward; the help is wrong+                // for this build; see modeling::draft_outward_flag). The canary+                // 0.11.4-rc1 had passed !outward and widened every drafted feature.                 let (dchk, ddir, dang) = match ext.draft {-                    Some(d) => (true, !d.outward, d.angle),+                    Some(d) => (true, crate::modeling::draft_outward_flag(&d), d.angle),                     None => (false, false, 0.0174533),                 };                 let dchk2 = dchk && !sd;@@ -5962,8 +6002,15 @@ impl ComBackend {                 // against it for a cut, whatever way the sketch's own normal                 // points; the caller's reverse flips it.                 let (dir, flipped) = crate::modeling::dir_flag(pending.normal, pending.reference, ext.reverse);-                let fm = doc.obj("FeatureManager", &[])?.ok_or_else(|| HostError::msg("no FeatureManager"))?;-                let f = if !cut {+                let fm = match doc.obj("FeatureManager", &[]) {+                    Ok(Some(fm)) => fm,+                    other => {+                        Self::end_contour_selection(&doc, contour_sel);+                        other?;+                        return Err(HostError::msg("no FeatureManager"));+                    }+                };+                let made: Result<Var, HostError> = if !cut {                     // FeatureExtrusion3 (2014 FCS): Sd, Flip, Dir, T1, T2, D1, D2,                     // Dchk1, Dchk2, Ddir1, Ddir2, Dang1, Dang2, OffsetReverse1,                     // OffsetReverse2, TranslateSurface1, TranslateSurface2, Merge,@@ -5996,9 +6043,10 @@ impl ComBackend {                             &Var::r8(0.0),                             &Var::boolean(false),                         ],-                    )?+                    )+                } else if let Err(e) = self.requires(25, "IFeatureManager::FeatureCut4 (SOLIDWORKS 2017)") {+                    Err(e)                 } else {-                    self.requires(25, "IFeatureManager::FeatureCut4 (SOLIDWORKS 2017)")?;                     // FeatureCut4 (2017 FCS): Sd, Flip (the side to cut), Dir                     // (reverse the direction), T1, T2, D1, D2, Dchk1, Dchk2,                     // Ddir1, Ddir2, Dang1, Dang2, OffsetReverse1, OffsetReverse2,@@ -6037,12 +6085,24 @@ impl ComBackend {                             &Var::r8(0.0),                             &Var::boolean(false),                         ],-                    )?+                    )                 };+                // Contour selection is put back as it was on EVERY road out.+                Self::end_contour_selection(&doc, contour_sel);+                let f = made?;                 let feature = f.as_dispatch().map(Disp);                 let _ = Self::clear_selection(&doc);                 // A FEATURE THAT COMES BACK NULL IS AN ERROR (issue #1).                 let Some(feature) = feature else {+                    if !ext.regions.is_empty() {+                        return Err(HostError::msg(format!(+                            "SOLIDWORKS made no {} from the selected sketch regions (the feature came back null) — {} region(s) were \+                             selected by SelectByID2 SKETCHREGION at mark 4 (UNMEASURED live, 0.11.4); check that each point lies \+                             inside the region meant, on the sketch's plane",+                            if cut { "cut" } else { "extrusion" },+                            ext.regions.len()+                        )));+                    }                     return Err(HostError::msg(if cut {                         "SOLIDWORKS made no cut (the feature came back null) — nothing was removed. A cut goes along its \                          plane's −NORMAL (measured: a cut from Top Plane removes −Y) and INTO a face it is sketched on; \@@ -6069,6 +6129,18 @@ impl ComBackend {                     "upToFace": up_to_face,                     "draftDeg": ext.draft.map(|d| d.angle.to_degrees()),                     "draftInward": ext.draft.map(|d| !d.outward),+                    "regions": regions_report,+                    // WHAT SOLIDWORKS STORED (0.11.4, best-effort, read-only):+                    // IFeature::GetDefinition -> IExtrudeFeatureData2, the end+                    // condition, depth and draft side of direction 1 as the+                    // feature holds them. A reply that disagrees with the request+                    // is the finding (UNMEASURED: the read-back itself).+                    "readBack": feature.obj("GetDefinition", &[]).ok().flatten().map(|def| json!({+                        "endCondition": def.int("GetEndCondition", &[&Var::boolean(true)]),+                        "depthMm": def.float("GetDepth", &[&Var::boolean(true)]).map(|m| m * 1000.0),+                        "draftOutward": def.call("GetDraftOutward", &[&Var::boolean(true)]).ok().and_then(|v| v.as_bool()),+                        "draftAngleDeg": def.float("GetDraftAngle", &[&Var::boolean(true)]).map(|a| a.to_degrees()),+                    })),                 }))             } @@ -7017,6 +7089,239 @@ impl ComBackend {         }     } +    /// SELECT SKETCH REGIONS (0.11.4) for the feature about to be made, the+    /// way SOLIDWORKS' own example does: ISelectionMgr::EnableContourSelection+    /// on, then per region IModelDocExtension::SelectByID2(<sketch>,+    /// "SKETCHREGION", <a model point inside it>, Append, MARK 4). Each pick is+    /// believed only when the selection count grew. Returns the selection+    /// manager and what contour selection was before (to put back), and the+    /// report. Nothing to do for no regions.+    fn select_regions(&mut self, doc: &Disp, pending: &PendingSketch, regions: &[[f64; 2]]) -> Result<(Option<(Disp, bool)>, Value), HostError> {+        if regions.is_empty() {+            return Ok((None, Value::Null));+        }+        let sel = doc.obj("SelectionManager", &[])?.ok_or_else(|| HostError::msg("no SelectionManager"))?;+        let ext = doc.obj("Extension", &[])?.ok_or_else(|| HostError::msg("no ModelDocExtension"))?;+        let was = sel.call("EnableContourSelection", &[]).ok().and_then(|v| v.as_bool()).unwrap_or(false);+        sel.try_put("EnableContourSelection", &Var::boolean(true));+        let state = Some((sel.clone(), was));+        let mut picked = Vec::new();+        for (k, r) in regions.iter().enumerate() {+            let fail = |why: String| {+                Self::end_contour_selection(doc, state.clone());+                let _ = Self::clear_selection(doc);+                Err(HostError::msg(format!("region {} at [{:.3}, {:.3}] mm: {why}", k + 1, r[0] * 1000.0, r[1] * 1000.0)))+            };+            let Some(p) = pending.model_point(r[0], r[1]) else {+                return fail("the sketch's place in the model could not be read, so the point cannot be put on it".into());+            };+            let before = sel.int("GetSelectedObjectCount2", &[&Var::i4(-1)]).unwrap_or(0);+            let ok = ext+                .call(+                    "SelectByID2",+                    &[+                        &Var::bstr(&pending.name),+                        &Var::bstr("SKETCHREGION"),+                        &Var::r8(p[0]),+                        &Var::r8(p[1]),+                        &Var::r8(p[2]),+                        &Var::boolean(true),+                        &Var::i4(4),+                        &Var::null_dispatch(),+                        &Var::i4(0),+                    ],+                )+                .map(|v| v.as_bool().unwrap_or(false));+            let after = sel.int("GetSelectedObjectCount2", &[&Var::i4(-1)]).unwrap_or(0);+            match ok {+                Ok(true) if after > before => picked.push(json!({"atMm": [r[0] * 1000.0, r[1] * 1000.0], "modelMm": [p[0] * 1000.0, p[1] * 1000.0, p[2] * 1000.0]})),+                Ok(_) => return fail(format!("no region of the sketch '{}' holds that point (SelectByID2 SKETCHREGION selected nothing)", pending.name)),+                Err(e) => return fail(e.message),+            }+        }+        Ok((state, json!({"selected": picked, "via": "SelectByID2 SKETCHREGION, mark 4, EnableContourSelection on"})))+    }++    /// Put ISelectionMgr::EnableContourSelection back as it was.+    fn end_contour_selection(_doc: &Disp, state: Option<(Disp, bool)>) {+        if let Some((sel, was)) = state {+            sel.try_put("EnableContourSelection", &Var::boolean(was));+        }+    }++    /// The edges of a face's OUTER loop (IFace2::GetLoops, ILoop2::IsOuter,+    /// ILoop2::GetEdges — 2001Plus).+    fn outer_loop_edges(face: &Disp) -> Result<Vec<Disp>, HostError> {+        let loops: Vec<Disp> = face.call("GetLoops", &[])?.as_array().iter().filter_map(|l| l.as_dispatch().map(Disp)).collect();+        for lp in &loops {+            if lp.call("IsOuter", &[]).ok().and_then(|v| v.as_bool()) == Some(true) {+                let edges: Vec<Disp> = lp.call("GetEdges", &[])?.as_array().iter().filter_map(|e| e.as_dispatch().map(Disp)).collect();+                if edges.is_empty() {+                    return Err(HostError::msg("the face's outer loop has no edges"));+                }+                return Ok(edges);+            }+        }+        Err(HostError::msg(format!("none of the face's {} loops says it is the outer one (ILoop2::IsOuter)", loops.len())))+    }++    /// The open sketch's segments (ISketch::GetSketchSegments), in order.+    fn sketch_segments(sketch: &Disp) -> Vec<Disp> {+        sketch.call("GetSketchSegments", &[]).map(|v| v.as_array().iter().filter_map(|x| x.as_dispatch().map(Disp)).collect()).unwrap_or_default()+    }++    /// A sketch segment's two ends, in SKETCH space: ISketchLine / ISketchArc+    /// GetStartPoint2 / GetEndPoint2 → ISketchPoint X, Y, Z — through the+    /// segment's own dispatch, or its ISketchLine / ISketchArc interface (QI+    /// with the IID read from the installed interop). None for anything else+    /// (a spline, an ellipse): the side check then says it could not tell.+    fn segment_ends(&mut self, seg: &Disp) -> Option<[crate::modeling::V3; 2]> {+        let exe = self.app(false, true).ok().and_then(|sw| sw.string("GetExecutablePath", &[])).unwrap_or_default();+        let mut via: Vec<Disp> = vec![seg.clone()];+        for iface in ["ISketchLine", "ISketchArc"] {+            if let Ok(iid) = interop_dual_iid(&exe, iface) {+                if let Some(d) = seg.query_dual(&iid) {+                    via.push(d);+                }+            }+        }+        let point = |p: Option<Disp>| -> Option<crate::modeling::V3> {+            let p = p?;+            Some([p.call("X", &[]).ok()?.as_f64()?, p.call("Y", &[]).ok()?.as_f64()?, p.call("Z", &[]).ok()?.as_f64()?])+        };+        for d in via {+            if d.dispid("GetStartPoint2").is_err() {+                continue;+            }+            let a = point(d.obj("GetStartPoint2", &[]).ok().flatten());+            let b = point(d.obj("GetEndPoint2", &[]).ok().flatten());+            if let (Some(a), Some(b)) = (a, b) {+                return Some([a, b]);+            }+        }+        None+    }++    /// Delete sketch segments: each selected (ISketchSegment::Select4,+    /// appended), then IModelDoc2::EditDelete.+    fn delete_segments(doc: &Disp, segs: &[Disp]) -> Result<(), HostError> {+        let _ = Self::clear_selection(doc);+        for sg in segs {+            if !Self::select_with_mark(doc, sg, "Select4", 0) {+                let _ = Self::clear_selection(doc);+                return Err(HostError::msg("a segment the offset made could not be selected to be deleted"));+            }+        }+        doc.call("EditDelete", &[])?;+        let _ = Self::clear_selection(doc);+        Ok(())+    }++    /// OFFSET ENTITIES (0.11.4) into the open sketch: the face picked by its+    /// point; its outer loop's edges (or the face itself) selected; then+    /// IModelDoc2::SketchOffsetEntities2(Offset metres, BothDirections false,+    /// Chain) — "the geometry selected for offset can be an edge, loop, face+    /// …" (help.solidworks.com/2018/english/api/sldworksapi/SolidWorks.Interop.+    /// sldworks~SolidWorks.Interop.sldworks.IModelDoc2~SketchOffsetEntities2.+    /// html; the same in 2026, available since 2001Plus, so on 2021 too).+    /// SOLIDWORKS' sign does NOT say which side the offset lands on (a forum+    /// report: SketchOffsetEntities2(-0.01, …) went inside on one face and+    /// outside on another), so the bridge LOOKS: every new segment's ends,+    /// put in the model, are within half the offset of the face (inward) or+    /// all farther (outward). Landed on the wrong side, the new segments are+    /// deleted and the offset made with the other sign — once.+    fn offset_face(&mut self, doc: &Disp, o: &crate::script::OffsetFace, m2s: Option<&crate::modeling::Xform>) -> Result<Value, HostError> {+        use crate::modeling::{dot, norm, scale, sub};+        let picked = Self::pick_face(doc, o.point)?;+        let face = picked.face.clone();+        let normal = picked.normal;+        let (items, what): (Vec<SelItem>, String) = match o.loops {+            crate::script::OffsetLoops::All => (vec![SelItem::face(picked)], "the face".into()),+            crate::script::OffsetLoops::Outer => {+                let edges = Self::outer_loop_edges(&face)?;+                let n = edges.len();+                (edges.into_iter().map(|e| SelItem::edge(e, None)).collect(), format!("the face's outer loop ({n} edges)"))+            }+        };+        let n_sel = items.len();+        let sketch = doc.obj("GetActiveSketch2", &[])?.ok_or_else(|| HostError::msg("no open sketch to offset into"))?;+        let s2m = m2s.map(|t| t.inverse());+        let want_inward = o.offset < 0.0;+        let half = o.offset.abs() / 2.0;+        let mut tries: Vec<Value> = Vec::new();+        let mut sign = 1.0;+        for attempt in 0..2 {+            let before = Self::sketch_segments(&sketch).len();+            let r = self.select_items(doc, items.clone(), 0)?;+            if !r.all(n_sel) {+                let _ = Self::clear_selection(doc);+                return Err(HostError::msg(format!("{what} could not be selected to offset ({})", r.notes.join("; "))));+            }+            let value = o.offset * sign;+            let ok = doc.call("SketchOffsetEntities2", &[&Var::r8(value), &Var::boolean(false), &Var::boolean(o.chain)])?.as_bool().unwrap_or(false);+            let _ = Self::clear_selection(doc);+            let new: Vec<Disp> = Self::sketch_segments(&sketch).into_iter().skip(before).collect();+            if !ok || new.is_empty() {+                return Err(HostError::msg(format!(+                    "SketchOffsetEntities2({} mm) on {what} made nothing (returned {ok}, {} new segments)",+                    value * 1000.0,+                    new.len()+                )));+            }+            // WHERE DID IT LAND? Each end, in the model, against the face.+            let mut dists: Vec<f64> = Vec::new();+            let mut unread = 0usize;+            for sg in &new {+                match (self.segment_ends(sg), &s2m) {+                    (Some(ends), Some(t)) => {+                        for e in ends {+                            let p = t.apply(e);+                            let c = Self::floats(&face.call("GetClosestPointOn", &[&Var::r8(p[0]), &Var::r8(p[1]), &Var::r8(p[2])]).unwrap_or(Var::empty()));+                            if c.len() >= 3 {+                                let v = sub([c[0], c[1], c[2]], p);+                                dists.push(norm(sub(v, scale(normal, dot(v, normal)))));+                            } else {+                                unread += 1;+                            }+                        }+                    }+                    _ => unread += 1,+                }+            }+            let inside = !dists.is_empty() && dists.iter().all(|d| *d < half);+            let outside = !dists.is_empty() && dists.iter().all(|d| *d > half);+            let landed = if unread > 0 || dists.is_empty() { "unknown" } else if inside { "inward" } else if outside { "outward" } else { "both" };+            tries.push(json!({"offsetMm": value * 1000.0, "segments": new.len(), "landed": landed,+                              "farthestFromTheFaceMm": dists.iter().cloned().fold(0.0, f64::max) * 1000.0}));+            let right = (want_inward && inside) || (!want_inward && outside);+            if right || landed == "unknown" {+                return Ok(json!({+                    "offsetEntities": o.describe()["offsetEntities"].clone(),+                    "selected": what,+                    "segments": new.len(),+                    "side": if right { landed } else { "not verified" },+                    "sideVerified": right,+                    "why": (!right).then_some("the new segments' ends could not all be read back, so the side was not checked — verify the result's mass or area"),+                    "tries": tries,+                    "route": "IModelDoc2::SketchOffsetEntities2",+                }));+            }+            if attempt == 1 {+                return Err(HostError::msg(format!(+                    "SketchOffsetEntities2 put the offset of {what} on the wrong side ({}) with both signs — nothing usable was drawn: {}",+                    if want_inward { "wanted inside the face" } else { "wanted outside it" },+                    serde_json::to_string(&tries).unwrap_or_default()+                )));+            }+            Self::delete_segments(doc, &new)?;+            if Self::sketch_segments(&sketch).len() != before {+                return Err(HostError::msg("the offset on the wrong side could not be deleted — the sketch keeps it; nothing more was drawn"));+            }+            sign = -sign;+        }+        unreachable!("two attempts return")+    }+     /// THE GEOMETRIC EDGE PICK: IEdge::GetClosestPointOn over every edge.     fn pick_edge(doc: &Disp, p: crate::modeling::V3) -> Result<(Disp, crate::modeling::V3), HostError> {         use crate::modeling::{norm, sub};@@ -7361,6 +7666,7 @@ enum SelKind {  /// One entity to select, with what the ray rung needs: a point ON it and its /// outward direction (a face's normal; filled lazily for an edge).+#[derive(Clone)] struct SelItem {     ent: Disp,     kind: SelKind,@@ -7584,6 +7890,22 @@ struct PendingSketch {     /// Each drawn entity's line segment (None for anything else), in the     /// order drawn — a revolve's axis is selected from here.     segments: Vec<Option<SketchSeg>>,+    /// Where the caller's (u, v) are in the model (0.11.4, a region pick): the+    /// base plane's frame at a height for a mapped sketch (an offset plane, a+    /// face), else the sketch's own axes (sketch-to-model transform).+    mapping: Option<(crate::modeling::PlaneFrame, f64)>,+    sketch_to_model: Option<crate::modeling::Xform>,+}++impl PendingSketch {+    /// The model point of the caller's sketch point (u, v).+    fn model_point(&self, u: f64, v: f64) -> Option<crate::modeling::V3> {+        match (&self.mapping, &self.sketch_to_model) {+            (Some((frame, h)), _) => Some(frame.point(u, v, *h)),+            (None, Some(t)) => Some(t.apply([u, v, 0.0])),+            (None, None) => None,+        }+    } }  /// A drawn sketch line: its ISketchSegment and its name within the sketch.
src/comhost/mock_csg.rs+56
@@ -121,6 +121,62 @@ pub fn crossings(entities: &[Entity], p: (f64, f64), e: (f64, f64), shrink: f64)     out } +/// Is `p` inside the closed profile that `members` (indices into `entities`)+/// make? Even-odd along a ray in a direction no drawn vertex lines up with+/// (0.11.4, the simulator's sketch regions).+pub fn point_in(entities: &[Entity], members: &[usize], p: (f64, f64)) -> bool {+    let sub: Vec<Entity> = members.iter().filter_map(|i| entities.get(*i).cloned()).collect();+    let a: f64 = 0.618_033_988_75;+    crossings(&sub, p, (a.cos(), a.sin()), 0.0).iter().filter(|s| **s > 0.0).count() % 2 == 1+}++/// Points along a profile's boundary, `n` per entity.+fn boundary_samples(entities: &[Entity], members: &[usize], n: usize) -> Vec<(f64, f64)> {+    let mut out = Vec::new();+    let seg = |a: (f64, f64), b: (f64, f64), out: &mut Vec<(f64, f64)>| {+        for k in 0..n {+            let t = (k as f64 + 0.5) / n as f64;+            out.push((a.0 + (b.0 - a.0) * t, a.1 + (b.1 - a.1) * t));+        }+    };+    for i in members {+        match entities.get(*i).cloned() {+            Some(Entity::Rect { x0, y0, x1, y1 }) => {+                for (a, b) in [((x0, y0), (x1, y0)), ((x1, y0), (x1, y1)), ((x1, y1), (x0, y1)), ((x0, y1), (x0, y0))] {+                    seg(a, b, &mut out);+                }+            }+            Some(Entity::Circle { cx, cy, r }) => {+                for k in 0..4 * n {+                    let t = std::f64::consts::TAU * (k as f64 + 0.5) / (4 * n) as f64;+                    out.push((cx + r * t.cos(), cy + r * t.sin()));+                }+            }+            Some(Entity::Line { x0, y0, x1, y1, .. }) => seg((x0, y0), (x1, y1), &mut out),+            Some(e @ Entity::Arc { .. }) => {+                if let Some((cx, cy, r, t0, sw)) = crate::script::arc_geom(&e) {+                    for k in 0..n {+                        let t = t0 + sw * (k as f64 + 0.5) / n as f64;+                        out.push((cx + r * t.cos(), cy + r * t.sin()));+                    }+                }+            }+            None => {}+        }+    }+    out+}++/// Do two closed profiles' boundaries CROSS — one partly inside the other+/// (sampled: 64 points per entity, either way round)?+pub fn profiles_cross(entities: &[Entity], a: &[usize], b: &[usize]) -> bool {+    let mixed = |samples: &[(f64, f64)], other: &[usize]| {+        let ins = samples.iter().filter(|p| point_in(entities, other, **p)).count();+        ins > 0 && ins < samples.len()+    };+    mixed(&boundary_samples(entities, a, 64), b) || mixed(&boundary_samples(entities, b, 64), a)+}+ /// Pairs of crossings as intervals (an odd count drops the last: a tangency). fn pairs(c: &[f64]) -> Vec<(f64, f64)> {     c.chunks_exact(2).map(|w| (w[0], w[1])).filter(|(a, b)| b > a).collect()
src/comhost/mock_model.rs+122−7
@@ -224,6 +224,29 @@ fn profiles(entities: &[Entity]) -> Vec<Prof> {     out } +/// Every profile with the entities that make it (0.11.4): a rectangle or a+/// circle is its own entity; a contour, its lines and arcs.+fn profile_members(entities: &[Entity]) -> Vec<(Prof, Vec<usize>)> {+    let ps = profiles(entities);+    let mut members: Vec<Vec<usize>> = Vec::new();+    for (i, e) in entities.iter().enumerate() {+        if matches!(e, Entity::Rect { .. } | Entity::Circle { .. }) {+            members.push(vec![i]);+        }+    }+    for c in crate::script::contours(entities).unwrap_or_default() {+        let (a, _, _) = modeling::contour_moments(entities, &c);+        if a.abs() > 1e-30 {+            members.push(c.iter().map(|(i, _)| *i).collect());+        }+    }+    ps.into_iter().zip(members).collect()+}++fn members_of(members: &[(Prof, Vec<usize>)], id: usize) -> Vec<usize> {+    members.iter().find(|(p, _)| p.id == id).map(|(_, m)| m.clone()).unwrap_or_default()+}+ fn inside(a: &Prof, b: &Prof) -> bool {     let (ax0, ay0, ax1, ay1) = a.bounds;     let (bx0, by0, bx1, by1) = b.bounds;@@ -488,7 +511,7 @@ impl Model {      /// A sketch: where it is, resolved. Returns the pending sketch and the     /// step's report.-    pub fn sketch(&mut self, plane: &PlaneRef, entities: &[Entity]) -> Result<(Pending, Value), String> {+    pub fn sketch(&mut self, plane: &PlaneRef, entities: &[Entity], offsets: &[crate::script::OffsetFace]) -> Result<(Pending, Value), String> {         let defaults = PlaneFrame::defaults();         let (frame, h, sign, resolved, made) = match plane {             PlaneRef::Named(n) => {@@ -535,6 +558,47 @@ impl Model {                 )             }         };+        // OFFSET ENTITIES (0.11.4): the simulator knows a face's outline only+        // where the body IS its box — a plain block, whose faces are+        // rectangles. Anything else is SOLIDWORKS' to draw: refused, saying so.+        let mut all = entities.to_vec();+        let mut offset_report = Vec::new();+        for o in offsets {+            let f = self.pick_face(o.point)?;+            if self.bodies[f.body].shape != Shape::Box {+                return Err("the simulator can offset only the face of a plain block (a body that is its own bounding box); \+                            this face's outline is SOLIDWORKS' own — run it live (offsetEntities)".into());+            }+            if f.axis != normal_axis(&frame) {+                return Err("the simulator offsets a face PARALLEL to the sketch plane only (SOLIDWORKS projects any face)".into());+            }+            let b = &self.bodies[f.body];+            let (mut u0, mut v0, mut u1, mut v1) = (f64::MAX, f64::MAX, f64::MIN, f64::MIN);+            let others: Vec<usize> = (0..3).filter(|i| *i != f.axis).collect();+            for ca in [b.lo[others[0]], b.hi[others[0]]] {+                for cb in [b.lo[others[1]], b.hi[others[1]]] {+                    let mut p = [0.0; 3];+                    p[others[0]] = ca;+                    p[others[1]] = cb;+                    let rel = modeling::sub(p, frame.origin);+                    let (u, v) = (modeling::dot(rel, frame.x), modeling::dot(rel, frame.y));+                    u0 = u0.min(u);+                    u1 = u1.max(u);+                    v0 = v0.min(v);+                    v1 = v1.max(v);+                }+            }+            // offset < 0: INTO the face.+            let d = o.offset;+            let (x0, y0, x1, y1) = (u0 - d, v0 - d, u1 + d, v1 + d);+            if x1 - x0 <= 1e-9 || y1 - y0 <= 1e-9 {+                return Err(format!("an offset of {} mm inward leaves nothing of a {:.3} x {:.3} mm face", -d * 1000.0, (u1 - u0) * 1000.0, (v1 - v0) * 1000.0));+            }+            all.push(Entity::Rect { x0, y0, x1, y1 });+            offset_report.push(json!({"rectMm": [[x0 * 1000.0, y0 * 1000.0], [x1 * 1000.0, y1 * 1000.0]], "side": if d < 0.0 { "inward" } else { "outward" },+                                      "simulated": "the face of a plain block: its rectangle, offset"}));+        }+        let entities = &all[..];         let name = self.next_name("Sketch");         let mut report = json!({             "plane": plane.describe(),@@ -544,10 +608,54 @@ impl Model {             "entities": entities.iter().map(|e| e.describe()).collect::<Vec<_>>(),             "profileAreaMm2": profile_area(entities) * 1.0e6,         });+        if !offsets.is_empty() {+            report["offsets"] = json!(offsets.iter().zip(offset_report).map(|(o, r)| {+                let mut d = o.describe();+                d["drawn"] = r;+                d+            }).collect::<Vec<_>>());+        }         crate::script::single_entity_fields(entities, &mut report);         Ok((Pending { name, frame, h, sign, entities: entities.to_vec() }, report))     } +    /// THE SKETCH REGIONS a pick selects (0.11.4), as the entities that bound+    /// them: for each point, the innermost profile holding it and the+    /// profiles directly inside that one (its holes). The simulator models+    /// regions of profiles that NEST or stand apart; crossing contours (an+    /// offset outline and a circle) are SOLIDWORKS' to resolve — refused.+    pub fn region_entities(entities: &[Entity], picks: &[[f64; 2]]) -> Result<Vec<Entity>, String> {+        let members = profile_members(entities);+        for (i, (a, _)) in members.iter().enumerate() {+            for (b, _) in members.iter().skip(i + 1) {+                let (ax0, ay0, ax1, ay1) = a.bounds;+                let (bx0, by0, bx1, by1) = b.bounds;+                let apart = ax1 < bx0 - 1e-12 || bx1 < ax0 - 1e-12 || ay1 < by0 - 1e-12 || by1 < ay0 - 1e-12;+                let crossing = crate::comhost::mock_csg::profiles_cross(entities, &members_of(&members, a.id), &members_of(&members, b.id));+                if !apart && crossing {+                    return Err("the simulator models regions of profiles that nest or stand apart; these contours CROSS — \+                                only SOLIDWORKS resolves their regions (run it live)".into());+                }+            }+        }+        let mut keep: Vec<usize> = Vec::new();+        for (k, p) in picks.iter().enumerate() {+            let holding: Vec<&(Prof, Vec<usize>)> = members.iter().filter(|(_, m)| crate::comhost::mock_csg::point_in(entities, m, (p[0], p[1]))).collect();+            let inner = holding.iter().min_by(|a, b| a.0.area.partial_cmp(&b.0.area).unwrap_or(std::cmp::Ordering::Equal))+                .ok_or_else(|| format!("region {}: [{}, {}] mm is in no closed profile of the sketch", k + 1, p[0] * 1000.0, p[1] * 1000.0))?;+            keep.extend(inner.1.iter().copied());+            // Its holes: the profiles inside it with nothing between.+            for (q, m) in &members {+                if q.id != inner.0.id && inside(q, &inner.0) && !members.iter().any(|(r, _)| r.id != q.id && r.id != inner.0.id && inside(q, r) && inside(r, &inner.0)) {+                    keep.extend(m.iter().copied());+                }+            }+        }+        keep.sort_unstable();+        keep.dedup();+        Ok(keep.into_iter().map(|i| entities[i].clone()).collect())+    }+     /// Where an UP-TO end condition stops, as a coordinate along the sketch's     /// normal axis (0.11.0). The simulator models faces parallel to the sketch     /// plane only.@@ -1393,14 +1501,14 @@ pub fn apply(model: &mut Model, run: &mut Run, op: &Op, active: bool) -> Result<         return Err("selection works only in the ACTIVE document, and this one is not active — nothing could be selected".into());     }     let out = match op {-        Op::Sketch { plane, entities, .. } => {+        Op::Sketch { plane, entities, offsets, .. } => {             let via = if let PlaneRef::Face { point } = plane {                 model.pick_face(*point)?;                 Some(select_n(run, 1, "faces", "nothing to sketch on").map_err(|e| format!("the picked face could not be selected ({e})"))?)             } else {                 None             };-            let (p, mut report) = model.sketch(plane, entities)?;+            let (p, mut report) = model.sketch(plane, entities, offsets)?;             if let Some(v) = via {                 report["resolvedPlane"]["selectedVia"] = v["selectedVia"].clone();                 report["resolvedPlane"]["viewDependent"] = v["viewDependent"].clone();@@ -1417,6 +1525,13 @@ pub fn apply(model: &mut Model, run: &mut Run, op: &Op, active: bool) -> Result<                 return Err(format!("the sketch '{}' was no longer selected — SOLIDWORKS returned no feature", p.name));             }             run.sketch_selected = false;+            // SELECTED REGIONS (0.11.4): only those profiles are extruded.+            let p = if ext.regions.is_empty() {+                p+            } else {+                let kept = Model::region_entities(&p.entities, &ext.regions).inspect_err(|_| model.loose_sketches.push(p.name.clone()))?;+                Pending { entities: kept, ..p }+            };             let made = model.extrude(&p, ext, matches!(op, Op::Cut(_)));             if made.is_err() {                 // A feature that came back null leaves its sketch in the tree.@@ -1586,14 +1701,14 @@ mod tests {     use crate::script::{Direction, Extent};      fn ext(depth: f64) -> Extent {-        Extent { depth, depth2: depth, through_all: false, reverse: false, direction: Direction::One , up_to: None, draft: None }+        Extent { depth, depth2: depth, through_all: false, reverse: false, direction: Direction::One , up_to: None, draft: None, regions: Vec::new() }     }      fn block() -> (Model, Run) {         let mut m = Model::default();         let mut run = Run::default();         apply(&mut m, &mut run, &Op::Sketch { shorthand: "sketch_rect", plane: PlaneRef::Named("Top Plane".into()),-            entities: vec![Entity::Rect { x0: -0.01, y0: -0.01, x1: 0.01, y1: 0.01 }] }, true).unwrap();+            entities: vec![Entity::Rect { x0: -0.01, y0: -0.01, x1: 0.01, y1: 0.01 }], offsets: vec![] }, true).unwrap();         apply(&mut m, &mut run, &Op::Extrude(ext(0.01)), true).unwrap();         (m, run)     }@@ -1618,7 +1733,7 @@ mod tests {         let (mut m, mut run) = block();         // Michael's case: a default cut from Top Plane goes −Y, where there is no material.         apply(&mut m, &mut run, &Op::Sketch { shorthand: "sketch_rect", plane: PlaneRef::Named("Top Plane".into()),-            entities: vec![Entity::Rect { x0: -0.005, y0: -0.005, x1: 0.005, y1: 0.005 }] }, true).unwrap();+            entities: vec![Entity::Rect { x0: -0.005, y0: -0.005, x1: 0.005, y1: 0.005 }], offsets: vec![] }, true).unwrap();         assert!(apply(&mut m, &mut run, &Op::Cut(ext(0.005)), true).unwrap_err().contains("null"));     } @@ -1646,7 +1761,7 @@ mod tests {     fn a_boss_from_the_bottom_face_goes_outward() {         let (mut m, mut run) = block();         apply(&mut m, &mut run, &Op::Sketch { shorthand: "sketch_circle", plane: PlaneRef::Face { point: [0.0, 0.0, 0.0] },-            entities: vec![Entity::Circle { cx: 0.0, cy: 0.0, r: 0.003 }] }, true).unwrap();+            entities: vec![Entity::Circle { cx: 0.0, cy: 0.0, r: 0.003 }], offsets: vec![] }, true).unwrap();         apply(&mut m, &mut run, &Op::Extrude(ext(0.003)), true).unwrap();         assert!((m.bodies[0].lo[1] + 0.003).abs() < 1e-12, "y down to -3 mm: {:?}", m.bodies[0].lo);     }
src/compat.rs+157−49
@@ -128,9 +128,25 @@ pub const LIVE_2021_10_15: Measurement = Measurement { year: 2021, major: 29, ed /// title fix, proven. pub const LIVE_2026_10_15_HIDEEXT: Measurement = Measurement { year: 2026, major: 34, edition: "connected", date: "2026-10-15", bridge: "0.11.2", by: "adom" }; +/// 2026-10-15 23:04Z, bridge 0.11.2, SOLIDWORKS 2026 (34.3.0, "Connected"),+/// Drew's laptop: THE FIRST LIVE CSWA RUN — tools/cswa-check.py, 8 of 8 parts+/// within tolerance, every one within 0.0015 % of its published key+/// (tools/cswa/reports/cswa-2026-10-15-sw2026-0.11.2.json; docs/LIVE-RESULTS.md).+/// Every variant those eight scripts used is measured by it — the lines and+/// arcs of the Tool Block's profile, the face-offset plane, the plain hole,+/// the density, the sketch on a +Z face among them. The same install, bridge+/// and day as the HideFileExt run (equal as values; `checks` says which run).+pub const LIVE_2026_10_15_CSWA: Measurement = Measurement { year: 2026, major: 34, edition: "connected", date: "2026-10-15", bridge: "0.11.2", by: "adom" };+/// The first canary (0.11.4-rc1): 14 CSWA parts, 12 within 0.1 % (cswa-00..10), two caught the draft flag+/// and the up-to-surface id (cswa-11, cswa-12). The variants listed on it were exercised by PASSING parts.+pub const LIVE_2026_10_16_RC1: Measurement = Measurement { year: 2026, major: 34, edition: "connected", date: "2026-10-16", bridge: "0.11.4-rc1", by: "adom" };+ const M2026_2021: &[Measurement] = &[LIVE_2026_10_14, LIVE_2021_10_15];+const M2026_2021_CSWA: &[Measurement] = &[LIVE_2026_10_14, LIVE_2021_10_15, LIVE_2026_10_15_CSWA]; const M2026_HIDEEXT: &[Measurement] = &[LIVE_2026_10_15_HIDEEXT];-const M2026C_2021: &[Measurement] = &[LIVE_2026_10_14_C, LIVE_2021_10_15];+const M2026C_2021_CSWA: &[Measurement] = &[LIVE_2026_10_14_C, LIVE_2021_10_15, LIVE_2026_10_15_CSWA];+const M2026_CSWA: &[Measurement] = &[LIVE_2026_10_15_CSWA];+const M2026_RC1: &[Measurement] = &[LIVE_2026_10_16_RC1]; const M2026B: &[Measurement] = &[LIVE_2026_10_14_B]; const UNMEASURED: &[Measurement] = &[]; @@ -149,12 +165,12 @@ pub const OP_FACTS: &[OpFact] = &[     OpFact { id: "new_assembly", what: "a new assembly document", checks: "not in the live battery", measured: UNMEASURED },     OpFact { id: "new_part.invisible", what: "a new part created HIDDEN (DocumentVisible false around NewDocument) — it CANNOT be modelled: a hidden document cannot be activated, and every modelling op selects (measured 2026-10-14)", checks: "creation worked live (0.10.6); its modelling failed, so scripts now refuse it (document_hidden)", measured: UNMEASURED },     OpFact { id: "new_assembly.invisible", what: "a new assembly created HIDDEN (cannot be modelled, as new_part.invisible)", checks: "not run live", measured: UNMEASURED },-    OpFact { id: "clear_part", what: "every feature after the origin deleted from the bridge's own part (DeleteSelection2), so one document serves a whole battery", checks: "12 reused builds (reuseDocument), 2026-10-14", measured: M2026C_2021 },-    OpFact { id: "sketch.plane.front", what: "a sketch on Front Plane", checks: "T01 T03 T10 T14 T27", measured: M2026_2021 },-    OpFact { id: "sketch.plane.top", what: "a sketch on Top Plane", checks: "T02 T13 T24 T30", measured: M2026_2021 },+    OpFact { id: "clear_part", what: "every feature after the origin deleted from the bridge's own part (DeleteSelection2), so one document serves a whole battery", checks: "12 reused builds (reuseDocument), 2026-10-14; the 8 CSWA parts in one part, tools/cswa-check.py 2026-10-15", measured: M2026C_2021_CSWA },+    OpFact { id: "sketch.plane.front", what: "a sketch on Front Plane", checks: "T01 T03 T10 T14 T27; 7 CSWA parts, tools/cswa-check.py 2026-10-15", measured: M2026_2021_CSWA },+    OpFact { id: "sketch.plane.top", what: "a sketch on Top Plane", checks: "T02 T13 T24 T30; the LEGO brick, tools/cswa-check.py 2026-10-15", measured: M2026_2021_CSWA },     OpFact { id: "sketch.plane.right", what: "a sketch on Right Plane (sketch +x = model −Z, +y = model +Y; a boss goes +X)", checks: "T35", measured: M2026B },     OpFact { id: "sketch.plane.named", what: "a sketch on a named plane other than Front/Top/Right", checks: "not in the live battery", measured: UNMEASURED },-    OpFact { id: "sketch.offset.top.positive", what: "a sketch on a plane offset + from Top Plane", checks: "T04 T24", measured: M2026_2021 },+    OpFact { id: "sketch.offset.top.positive", what: "a sketch on a plane offset + from Top Plane", checks: "T04 T24; the LEGO brick, tools/cswa-check.py 2026-10-15", measured: M2026_2021_CSWA },     OpFact { id: "sketch.offset.top.negative", what: "a sketch on a plane offset − from Top Plane (keeps Top Plane's axes)", checks: "T05 T26", measured: M2026_2021 },     OpFact { id: "sketch.offset.front.positive", what: "a sketch on a plane offset + from Front Plane", checks: "T38", measured: M2026B },     OpFact { id: "sketch.offset.front.negative", what: "a sketch on a plane offset − from Front Plane", checks: "not in the live battery", measured: UNMEASURED },@@ -166,22 +182,22 @@ pub const OP_FACTS: &[OpFact] = &[     OpFact { id: "sketch.face.right.positive", what: "a sketch on a face facing +X (keeps Right Plane's axes, the origin projected)", checks: "T36", measured: M2026B },     OpFact { id: "sketch.face.right.negative", what: "a sketch on a face facing −X", checks: "not in the live battery", measured: UNMEASURED },     OpFact { id: "sketch.face.front.negative", what: "a sketch on a face facing −Z (keeps Front Plane's axes, the origin projected)", checks: "T37", measured: M2026B },-    OpFact { id: "sketch.face.front.positive", what: "a sketch on a face facing +Z", checks: "not in the live battery", measured: UNMEASURED },-    OpFact { id: "sketch.rect", what: "a rectangle (corner or center anchor)", checks: "T01 T02 T03", measured: M2026_2021 },-    OpFact { id: "sketch.circle", what: "a circle", checks: "T04 T06 T30", measured: M2026_2021 },-    OpFact { id: "sketch.multiProfile", what: "several profiles in one sketch (a ring, disjoint rectangles, the LEGO tubes)", checks: "T13 T14 T24", measured: M2026_2021 },-    OpFact { id: "extrude.one", what: "a boss one way (the plane's normal, or outward from a face)", checks: "T01 T06 T25 and every base block", measured: M2026_2021 },+    OpFact { id: "sketch.face.front.positive", what: "a sketch on a face facing +Z", checks: "the Tool Block step 3's two cuts from the front face, tools/cswa-check.py 2026-10-15", measured: M2026_CSWA },+    OpFact { id: "sketch.rect", what: "a rectangle (corner or center anchor)", checks: "T01 T02 T03; 7 CSWA parts, tools/cswa-check.py 2026-10-15", measured: M2026_2021_CSWA },+    OpFact { id: "sketch.circle", what: "a circle", checks: "T04 T06 T30; the CSWA holes and slot, tools/cswa-check.py 2026-10-15", measured: M2026_2021_CSWA },+    OpFact { id: "sketch.multiProfile", what: "several profiles in one sketch (a ring, disjoint rectangles, the LEGO tubes)", checks: "T13 T14 T24; the LEGO brick and the Tool Block (its Ø14 in the profile), tools/cswa-check.py 2026-10-15", measured: M2026_2021_CSWA },+    OpFact { id: "extrude.one", what: "a boss one way (the plane's normal, or outward from a face)", checks: "T01 T06 T25 and every base block; every CSWA part, tools/cswa-check.py 2026-10-15", measured: M2026_2021_CSWA },     OpFact { id: "extrude.one.reversed", what: "a boss whose direction flag is reversed (reverse:true: from Top Plane it goes −Y)", checks: "T33", measured: M2026B },     OpFact { id: "extrude.both", what: "a boss both ways (depthMm and depth2Mm)", checks: "T10", measured: M2026_2021 },     OpFact { id: "extrude.midPlane", what: "a boss symmetric about the sketch plane", checks: "T11", measured: M2026_2021 },     OpFact { id: "extrude.one.throughAll", what: "a boss through all, one way", checks: "T34", measured: M2026B },     OpFact { id: "extrude.both.throughAll", what: "a boss through all, both ways", checks: "not in the live battery", measured: UNMEASURED },-    OpFact { id: "cut.one", what: "a cut one way, the default direction (the plane's −normal, into a face)", checks: "T07 (nothing on that side: the step failed, as it must) and T27's first direction", measured: M2026_2021 },-    OpFact { id: "cut.one.reversed", what: "a cut one way, reversed (reverse:true)", checks: "T08 T24", measured: M2026_2021 },+    OpFact { id: "cut.one", what: "a cut one way, the default direction (the plane's −normal, into a face)", checks: "T07 (nothing on that side: the step failed, as it must) and T27's first direction; the Tool Block step 3's cuts, tools/cswa-check.py 2026-10-15", measured: M2026_2021_CSWA },+    OpFact { id: "cut.one.reversed", what: "a cut one way, reversed (reverse:true)", checks: "T08 T24; the LEGO brick, tools/cswa-check.py 2026-10-15", measured: M2026_2021_CSWA },     OpFact { id: "cut.one.throughAll.reversed", what: "a cut through all, reversed", checks: "T09", measured: M2026_2021 },     OpFact { id: "cut.both", what: "a cut both ways (depthMm along the cut's own direction, depth2Mm the other)", checks: "T27", measured: M2026_2021 },     OpFact { id: "cut.midPlane", what: "a cut symmetric about the sketch plane", checks: "T12", measured: M2026_2021 },-    OpFact { id: "select.multiSelectTyped", what: "the picked entities selected by MultiSelect2 with a typed object array", checks: "11 of 11 live selections (T06 T16-T21 T25 T28-T30)", measured: M2026_2021 },+    OpFact { id: "select.multiSelectTyped", what: "the picked entities selected by MultiSelect2 with a typed object array", checks: "11 of 11 live selections (T06 T16-T21 T25 T28-T30); the Tool Block step 3's face picks, tools/cswa-check.py 2026-10-15", measured: M2026_2021_CSWA },     OpFact { id: "select.entitySelect4", what: "a picked entity selected by IEntity::Select4 (the ladder's 2nd rung)", checks: "never needed live: the first rung worked", measured: UNMEASURED },     OpFact { id: "select.selectByRay", what: "a picked entity selected by SelectByRay (the ladder's 3rd rung)", checks: "never needed live: the first rung worked", measured: UNMEASURED },     OpFact { id: "select.selectByIdAtPoint", what: "a picked entity selected by SelectByID2 at the point, through the view (the last rung)", checks: "never needed live: the first rung worked", measured: UNMEASURED },@@ -199,40 +215,47 @@ pub const OP_FACTS: &[OpFact] = &[     OpFact { id: "set_appearance.part", what: "a colour on the part (or on the one body of a single-body part)", checks: "T15 T24", measured: M2026_2021 },     OpFact { id: "set_appearance.face", what: "a colour on one face picked by a point", checks: "T16", measured: M2026_2021 },     OpFact { id: "set_appearance.body", what: "a colour on one body of a multi-body part", checks: "not in the live battery", measured: UNMEASURED },-    OpFact { id: "set_material", what: "a material from the SOLIDWORKS library (the body's density follows it)", checks: "T22 T24", measured: M2026_2021 },+    OpFact { id: "set_material", what: "a material from the SOLIDWORKS library (the body's density follows it)", checks: "T22 T24; every CSWA part (ABS, 6061 Alloy, AISI 1020), tools/cswa-check.py 2026-10-15", measured: M2026_2021_CSWA },     OpFact { id: "set_material.reappliesAppearance", what: "a material after a colour: the bridge re-applies the colour", checks: "T31 (swx_selftest)", measured: M2026_2021 },     OpFact { id: "set_prop", what: "a custom property", checks: "T24", measured: M2026_2021 },     // ── 0.11.0, CSWA phase 1: built and simulated, NOT YET RUN LIVE ──-    OpFact { id: "sketch.line", what: "lines of a closed contour (line, polyline, polygon, slot, rounded rect): ISketchManager::CreateLine", checks: "not run live (0.11.0)", measured: UNMEASURED },-    OpFact { id: "sketch.arc", what: "arcs of a closed contour (arc, arc3, tangentArc, slot, rounded rect): ISketchManager::CreateArc", checks: "not run live (0.11.0)", measured: UNMEASURED },-    OpFact { id: "sketch.faceOffset", what: "a sketch on a plane offset from a picked face (along its outward normal)", checks: "not run live (0.11.0)", measured: UNMEASURED },+    OpFact { id: "sketch.line", what: "lines of a closed contour (line, polyline, polygon, slot, rounded rect): ISketchManager::CreateLine", checks: "the Tool Block steps 1-3 and the Q9 L-bracket's polyline, tools/cswa-check.py 2026-10-15", measured: M2026_CSWA },+    OpFact { id: "sketch.arc", what: "arcs of a closed contour (arc, arc3, tangentArc, slot, rounded rect): ISketchManager::CreateArc", checks: "the Tool Block steps 1-3 (tangentArc R19, arc3 R29 and R5), tools/cswa-check.py 2026-10-15", measured: M2026_CSWA },+    OpFact { id: "sketch.faceOffset", what: "a sketch on a plane offset from a picked face (along its outward normal)", checks: "the Tool Block step 3's R41 slot, 12 inside the back face, tools/cswa-check.py 2026-10-15", measured: M2026_CSWA },     OpFact { id: "mirror.features.faceOffset", what: "features mirrored about a plane offset from a face", checks: "not run live (0.11.0)", measured: UNMEASURED },     OpFact { id: "mirror.bodies.faceOffset", what: "every body mirrored about a plane offset from a face", checks: "not run live (0.11.0)", measured: UNMEASURED },-    OpFact { id: "sketch.construction", what: "construction geometry (CreateCenterLine; arcs with ConstructionGeometry)", checks: "not run live (0.11.0)", measured: UNMEASURED },+    OpFact { id: "sketch.construction", what: "construction geometry (CreateCenterLine; arcs with ConstructionGeometry)", checks: "tools/cswa-check.py 2026-10-16 (canary 0.11.4-rc1): cswa-09 within 0.1 % of its key", measured: M2026_RC1 },     OpFact { id: "extrude.upToNext", what: "a boss up to the next face (swEndCondUpToNext 11)", checks: "not run live (0.11.0)", measured: UNMEASURED },-    OpFact { id: "extrude.upToSurface", what: "a boss up to a picked face (swEndCondUpToSelection 10, the face at mark 1)", checks: "not run live (0.11.0)", measured: UNMEASURED },+    OpFact { id: "extrude.upToSurface", what: "a boss up to a picked face (swEndCondUpToSurface 4, the face at mark 1)", checks: "CAUGHT 2026-10-16 (canary 0.11.4-rc1, cswa-12): with swEndCondUpToSelection 10 the boss stopped at the NEXT face (3392.9 mm3 short); now 4, the macro recorder's id, with a read-back of the stored end condition; not yet run live", measured: UNMEASURED },     OpFact { id: "extrude.offsetFromSurface", what: "a boss to a distance from a picked face (swEndCondOffsetFromSurface 5)", checks: "not run live (0.11.0)", measured: UNMEASURED },-    OpFact { id: "extrude.draft", what: "a boss with draft (Dchk1/Ddir1/Dang1)", checks: "not run live (0.11.0)", measured: UNMEASURED },+    OpFact { id: "extrude.draft", what: "a boss with draft (Dchk1/Ddir1/Dang1; Ddir1 TRUE = outward, measured)", checks: "CAUGHT 2026-10-16 (canary 0.11.4-rc1, cswa-12): Ddir1 as the help reads it widened the 5 deg boss; the flag is now passed as SOLIDWORKS measured it; not yet run live", measured: UNMEASURED },     OpFact { id: "cut.upToNext", what: "a cut up to the next face", checks: "not run live (0.11.0)", measured: UNMEASURED },-    OpFact { id: "cut.upToSurface", what: "a cut up to a picked face", checks: "not run live (0.11.0)", measured: UNMEASURED },-    OpFact { id: "cut.offsetFromSurface", what: "a cut to a distance from a picked face", checks: "not run live (0.11.0)", measured: UNMEASURED },-    OpFact { id: "cut.draft", what: "a cut with draft (a countersink is one)", checks: "not run live (0.11.0)", measured: UNMEASURED },-    OpFact { id: "revolve.360", what: "a full revolve about a line of the sketch (FeatureRevolve2)", checks: "not run live (0.11.0)", measured: UNMEASURED },+    OpFact { id: "cut.upToSurface", what: "a cut up to a picked face (swEndCondUpToSurface 4, the face at mark 1)", checks: "CAUGHT 2026-10-16 (canary 0.11.4-rc1, cswa-12): with 10 the cut went one plate deep instead of to the face (1005.3 mm3 short); now 4; not yet run live", measured: UNMEASURED },+    OpFact { id: "cut.offsetFromSurface", what: "a cut to a distance from a picked face", checks: "tools/cswa-check.py 2026-10-16 (canary 0.11.4-rc1): cswa-08 within 0.1 % of its key", measured: M2026_RC1 },+    OpFact { id: "cut.draft", what: "a cut with draft (a countersink is one; Ddir1 TRUE = outward, measured)", checks: "CAUGHT 2026-10-16 (canary 0.11.4-rc1, cswa-11): the 45 deg countersink cut widened into the outward frustum, 804.25 mm3 more than the inward one; fixed with the boss; not yet run live", measured: UNMEASURED },+    OpFact { id: "revolve.360", what: "a full revolve about a line of the sketch (FeatureRevolve2)", checks: "tools/cswa-check.py 2026-10-16 (canary 0.11.4-rc1): cswa-09 within 0.1 % of its key", measured: M2026_RC1 },     OpFact { id: "revolve.angle", what: "a revolve through less than 360°", checks: "not run live (0.11.0)", measured: UNMEASURED },     OpFact { id: "revolve.midPlane", what: "a revolve symmetric about the sketch plane", checks: "not run live (0.11.0)", measured: UNMEASURED },-    OpFact { id: "revolve_cut.360", what: "a full revolve-cut (FeatureRevolve2 with IsCut)", checks: "not run live (0.11.0)", measured: UNMEASURED },+    OpFact { id: "revolve_cut.360", what: "a full revolve-cut (FeatureRevolve2 with IsCut)", checks: "tools/cswa-check.py 2026-10-16 (canary 0.11.4-rc1): cswa-09 within 0.1 % of its key", measured: M2026_RC1 },     OpFact { id: "revolve_cut.angle", what: "a revolve-cut through less than 360°", checks: "not run live (0.11.0)", measured: UNMEASURED },-    OpFact { id: "revolve_cut.midPlane", what: "a revolve-cut symmetric about the sketch plane", checks: "not run live (0.11.0)", measured: UNMEASURED },-    OpFact { id: "mirror.features.plane", what: "features mirrored about a named plane (InsertMirrorFeature2, features mark 1, plane mark 2)", checks: "not run live (0.11.0)", measured: UNMEASURED },-    OpFact { id: "mirror.features.offset", what: "features mirrored about an offset plane", checks: "not run live (0.11.0)", measured: UNMEASURED },+    OpFact { id: "revolve_cut.midPlane", what: "a revolve-cut symmetric about the sketch plane", checks: "tools/cswa-check.py 2026-10-16 (canary 0.11.4-rc1): cswa-09 within 0.1 % of its key", measured: M2026_RC1 },+    OpFact { id: "mirror.features.plane", what: "features mirrored about a named plane (InsertMirrorFeature2, features mark 1, plane mark 2)", checks: "tools/cswa-check.py 2026-10-16 (canary 0.11.4-rc1): cswa-10 within 0.1 % of its key", measured: M2026_RC1 },+    OpFact { id: "mirror.features.offset", what: "features mirrored about an offset plane", checks: "tools/cswa-check.py 2026-10-16 (canary 0.11.4-rc1): cswa-10 within 0.1 % of its key", measured: M2026_RC1 },     OpFact { id: "mirror.features.face", what: "features mirrored about a planar face", checks: "not run live (0.11.0)", measured: UNMEASURED },-    OpFact { id: "mirror.bodies.plane", what: "every body mirrored about a named plane (BMirrorBody, bodies mark 256)", checks: "not run live (0.11.0)", measured: UNMEASURED },+    OpFact { id: "mirror.bodies.plane", what: "every body mirrored about a named plane (BMirrorBody, bodies mark 256)", checks: "tools/cswa-check.py 2026-10-16 (canary 0.11.4-rc1): cswa-10 within 0.1 % of its key", measured: M2026_RC1 },     OpFact { id: "mirror.bodies.offset", what: "every body mirrored about an offset plane", checks: "not run live (0.11.0)", measured: UNMEASURED },     OpFact { id: "mirror.bodies.face", what: "every body mirrored about a planar face", checks: "not run live (0.11.0)", measured: UNMEASURED },-    OpFact { id: "hole.simple", what: "a plain hole: a circle on the face's plane, cut blind or through all", checks: "not run live (0.11.0)", measured: UNMEASURED },+    OpFact { id: "hole.simple", what: "a plain hole: a circle on the face's plane, cut blind or through all", checks: "3dengr Q6 and Q8 (Ø20, Ø30 through all) and the Tool Block step 3's Ø11, tools/cswa-check.py 2026-10-15", measured: M2026_CSWA },     OpFact { id: "hole.counterbore", what: "a counterbored hole (two cuts)", checks: "not run live (0.11.0)", measured: UNMEASURED },-    OpFact { id: "hole.countersink", what: "a countersunk hole (a drafted cut, then the hole)", checks: "not run live (0.11.0)", measured: UNMEASURED },-    OpFact { id: "set_material.density", what: "a density in kg/m³ (the document's own, or checked against the material's)", checks: "not run live (0.11.0)", measured: UNMEASURED },+    OpFact { id: "hole.countersink", what: "a countersunk hole (a drafted cut, then the hole)", checks: "CAUGHT 2026-10-16 (canary 0.11.4-rc1, cswa-11): its cone opened downward (the draft flag); the hole and the counterbore beside it were right; not yet run live", measured: UNMEASURED },+    OpFact { id: "set_material.density", what: "a density in kg/m³ (the document's own, or checked against the material's)", checks: "every CSWA part (1020, 2700, 7900 kg/m³ read back), tools/cswa-check.py 2026-10-15", measured: M2026_CSWA },+    // ── 0.11.4: Offset Entities, sketch regions, and the through-all cut+    //    the community plate exercises: built and simulated, NOT YET RUN LIVE ──+    OpFact { id: "sketch.offsetEntities.outer", what: "a face's OUTER loop offset into the sketch: its edges selected, IModelDoc2::SketchOffsetEntities2 (side checked, redone the other way if SOLIDWORKS put it outside)", checks: "tools/cswa-check.py 2026-10-16 (canary 0.11.4-rc1): cswa-08 within 0.1 % of its key", measured: M2026_RC1 },+    OpFact { id: "sketch.offsetEntities.face", what: "every loop of a face offset into the sketch: the face selected, IModelDoc2::SketchOffsetEntities2", checks: "not run live (0.11.4)", measured: UNMEASURED },+    OpFact { id: "extrude.regions", what: "a boss of selected sketch regions (EnableContourSelection, SelectByID2 \"SKETCHREGION\" at mark 4)", checks: "not run live (0.11.4)", measured: UNMEASURED },+    OpFact { id: "cut.regions", what: "a cut of selected sketch regions (EnableContourSelection, SelectByID2 \"SKETCHREGION\" at mark 4)", checks: "tools/cswa-check.py 2026-10-16 (canary 0.11.4-rc1): cswa-08 within 0.1 % of its key", measured: M2026_RC1 },+    OpFact { id: "cut.one.throughAll", what: "a cut through all, the default direction (into a face)", checks: "not run live (0.11.4)", measured: UNMEASURED },     OpFact { id: "titles.hiddenExtensions", what: "documents addressed by title while Windows hides known extensions: swx_new_document reads back 'Part1-…' (no .SLDPRT); swx_design_info and swx_get_parameters by the reported title, the stem and stem+.SLDPRT; swx_set_parameter, swx_export_step, swx_save and swx_close_doc by the stem; nothing left open", checks: "the focused HideFileExt test, 2026-10-15 22:38-22:41Z", measured: M2026_HIDEEXT },     OpFact { id: "save_as", what: "save_as as a script step", checks: "not in the live battery (swx_save_as, the verb, is)", measured: UNMEASURED },     OpFact { id: "rebuild", what: "rebuild as a script step", checks: "not in the live battery", measured: UNMEASURED },@@ -313,7 +336,7 @@ pub fn op_variants(op: &crate::script::Op, result: &serde_json::Value) -> Vec<St         Op::NewAssembly { visible: true } => v.push("new_assembly".into()),         Op::NewAssembly { visible: false } => v.push("new_assembly.invisible".into()),         Op::ClearPart => v.push("clear_part".into()),-        Op::Sketch { plane, entities, .. } => {+        Op::Sketch { plane, entities, offsets, .. } => {             v.push(match plane {                 PlaneRef::Named(n) => format!("sketch.plane.{}", plane_key(n)),                 PlaneRef::Offset { from, offset } => match plane_key(from) {@@ -335,7 +358,7 @@ pub fn op_variants(op: &crate::script::Op, result: &serde_json::Value) -> Vec<St             if entities.iter().any(|e| matches!(e, crate::script::Entity::Circle { .. })) {                 v.push("sketch.circle".into());             }-            if entities.len() > 1 {+            if entities.len() + offsets.len() > 1 {                 v.push("sketch.multiProfile".into());             }             if entities.iter().any(|e| matches!(e, crate::script::Entity::Line { construction: false, .. })) {@@ -347,6 +370,13 @@ pub fn op_variants(op: &crate::script::Op, result: &serde_json::Value) -> Vec<St             if entities.iter().any(|e| e.is_construction()) {                 v.push("sketch.construction".into());             }+            // Offset Entities (0.11.4): by what was SELECTED for SOLIDWORKS —+            // the outer loop's edges, or the face.+            for loops in [crate::script::OffsetLoops::Outer, crate::script::OffsetLoops::All] {+                if offsets.iter().any(|o| o.loops == loops) {+                    v.push(if loops == crate::script::OffsetLoops::Outer { "sketch.offsetEntities.outer" } else { "sketch.offsetEntities.face" }.into());+                }+            }         }         Op::Extrude(e) | Op::Cut(e) => {             let kind = if matches!(op, Op::Cut(_)) { "cut" } else { "extrude" };@@ -374,6 +404,9 @@ pub fn op_variants(op: &crate::script::Op, result: &serde_json::Value) -> Vec<St             if e.draft.is_some() {                 v.push(format!("{kind}.draft"));             }+            if !e.regions.is_empty() {+                v.push(format!("{kind}.regions"));+            }         }         Op::Fillet { edges, .. } | Op::Chamfer { edges, .. } => {             let kind = if matches!(op, Op::Fillet { .. }) { "fillet" } else { "chamfer" };@@ -598,7 +631,45 @@ mod tests {             "fillet.allOfFeature", "fillet.FeatureFillet3", "chamfer.atPoints", "shell.inward", "linear_pattern.x",             "circular_pattern.y", "set_prop", "select.multiSelectTyped",         ] {-            assert_eq!(op_fact(id).map(|f| f.measured), Some(M2026_2021), "{id} was measured on 2026, and on 2021 by the community run");+            let m = op_fact(id).map(|f| f.measured).unwrap_or_default();+            assert!(m.starts_with(M2026_2021), "{id} was measured on 2026, and on 2021 by the community run: {m:?}");+        }+        // THE FIRST LIVE CSWA RUN (2026-10-15, bridge 0.11.2): EXACTLY the+        // variants its eight scripts used (tools/cswa/reports/cswa-2026-10-15-+        // sw2026-0.11.2.json, every step's proven.variants), and nothing else.+        assert_eq!(+            LIVE_2026_10_15_CSWA.to_json(),+            serde_json::json!({"solidworks": 2026, "major": 34, "edition": "connected", "date": "2026-10-15", "bridge": "0.11.2", "by": "adom"})+        );+        let mut by_cswa: Vec<&str> = OP_FACTS.iter().filter(|f| f.measured.contains(&LIVE_2026_10_15_CSWA) && f.checks.contains("tools/cswa-check.py 2026-10-15")).map(|f| f.id).collect();+        by_cswa.sort_unstable();+        assert_eq!(+            by_cswa,+            [+                "clear_part", "cut.one", "cut.one.reversed", "extrude.one", "hole.simple", "select.multiSelectTyped", "set_material",+                "set_material.density", "sketch.arc", "sketch.circle", "sketch.face.front.positive", "sketch.faceOffset", "sketch.line",+                "sketch.multiProfile", "sketch.offset.top.positive", "sketch.plane.front", "sketch.plane.top", "sketch.rect",+            ]+        );+        // THE FIRST CANARY (2026-10-16, 0.11.4-rc1): EXACTLY the variants its+        // twelve PASSING parts exercised and nothing had measured before (the+        // report in scratch, cswa-00..10 pass; 11 and 12 caught two bugs).+        let mut by_rc1: Vec<&str> = OP_FACTS.iter().filter(|f| f.measured.contains(&LIVE_2026_10_16_RC1)).map(|f| f.id).collect();+        by_rc1.sort_unstable();+        assert_eq!(+            by_rc1,+            [+                "cut.offsetFromSurface", "cut.regions", "mirror.bodies.plane", "mirror.features.offset", "mirror.features.plane",+                "revolve.360", "revolve_cut.360", "revolve_cut.midPlane", "sketch.construction", "sketch.offsetEntities.outer",+            ]+        );+        // ...and the five it caught stay unmeasured, saying so, until a run proves the fix.+        for id in ["extrude.upToSurface", "cut.upToSurface", "extrude.draft", "cut.draft", "hole.countersink"] {+            let f = op_fact(id).unwrap();+            assert!(f.measured.is_empty() && f.checks.starts_with("CAUGHT 2026-10-16"), "{id}: {:?} / {}", f.measured, f.checks);+        }+        for id in ["sketch.line", "sketch.arc", "sketch.faceOffset", "hole.simple", "set_material.density", "sketch.face.front.positive"] {+            assert_eq!(op_fact(id).map(|f| f.measured), Some(M2026_CSWA), "{id}: first measured by the CSWA run");         }         // 2021 (0.10.10): Michael's community run, and EXACTLY the facts its         // selftest checks (T01-T22, T24-T32) measured — plus new_part and the@@ -628,9 +699,18 @@ mod tests {         // ...and EXACTLY what is not: its "not yet measured" list (throughAll+both         // on a boss, the ladder's later rungs, the CreateDefinition fillet) plus         // the variants no live check built — a reversed boss among them.-        let mut unmeasured: Vec<&str> =-            OP_FACTS.iter().filter(|f| f.measured.is_empty() && f.checks != "not run live (0.11.0)").map(|f| f.id).collect();+        let mut unmeasured: Vec<&str> = OP_FACTS+            .iter()+            .filter(|f| f.measured.is_empty() && f.checks != "not run live (0.11.0)" && f.checks != "not run live (0.11.4)")+            .map(|f| f.id)+            .collect();         unmeasured.sort_unstable();+        // 0.11.4's, still unrun after the first canary (it measured cut.regions and the+        // outer-loop Offset Entities through cswa-08; the through-all cut ran only in cswa-11).+        let mut new_0114: Vec<&str> = OP_FACTS.iter().filter(|f| f.checks == "not run live (0.11.4)").map(|f| f.id).collect();+        assert!(OP_FACTS.iter().filter(|f| f.checks == "not run live (0.11.4)").all(|f| f.measured.is_empty()));+        new_0114.sort_unstable();+        assert_eq!(new_0114, ["cut.one.throughAll", "extrude.regions", "sketch.offsetEntities.face"]);         // 0.11.0's CSWA ops: every one of them NOT YET RUN LIVE, and listed.         let mut new_ops: Vec<&str> = OP_FACTS.iter().filter(|f| f.checks == "not run live (0.11.0)").map(|f| f.id).collect();         assert!(OP_FACTS.iter().filter(|f| f.checks == "not run live (0.11.0)").all(|f| f.measured.is_empty()));@@ -638,21 +718,20 @@ mod tests {         assert_eq!(             new_ops,             [-                "cut.draft", "cut.offsetFromSurface", "cut.upToNext", "cut.upToSurface", "extrude.draft", "extrude.offsetFromSurface",-                "extrude.upToNext", "extrude.upToSurface", "hole.counterbore", "hole.countersink", "hole.simple", "mirror.bodies.face",-                "mirror.bodies.faceOffset", "mirror.bodies.offset", "mirror.bodies.plane", "mirror.features.face",-                "mirror.features.faceOffset", "mirror.features.offset", "mirror.features.plane",-                "revolve.360", "revolve.angle", "revolve.midPlane", "revolve_cut.360", "revolve_cut.angle", "revolve_cut.midPlane",-                "set_material.density", "sketch.arc", "sketch.construction", "sketch.faceOffset", "sketch.line",+                // (the 2026-10-16 canary measured eight of 0.11.0's and caught five; see by_rc1 below)+                "cut.upToNext", "extrude.offsetFromSurface", "extrude.upToNext", "hole.counterbore", "mirror.bodies.face",+                "mirror.bodies.faceOffset", "mirror.bodies.offset", "mirror.features.face", "mirror.features.faceOffset",+                "revolve.angle", "revolve.midPlane", "revolve_cut.angle",             ]         );         assert_eq!(             unmeasured,             [-                "chamfer.allOfFeature", "extrude.both.throughAll", "fillet.createDefinition", "new_assembly",+                "chamfer.allOfFeature", "cut.draft", "cut.upToSurface", "extrude.both.throughAll", "extrude.draft",+                "extrude.upToSurface", "fillet.createDefinition", "hole.countersink", "new_assembly",                 "new_assembly.invisible", "new_part.invisible", "rebuild",                 "save_as", "select.entitySelect4", "select.selectByIdAtPoint", "select.selectByRay", "set_appearance.body",-                "sketch.face.front.positive", "sketch.face.right.negative", "sketch.offset.front.negative",+                "sketch.face.right.negative", "sketch.offset.front.negative",                 "sketch.offset.named", "sketch.offset.right.negative", "sketch.offset.right.positive", "sketch.plane.named",                 "zoom_fit",             ]@@ -725,13 +804,42 @@ mod tests {         assert_eq!(ids(&o[16], serde_json::json!({"appearanceReapplied": [{"target": "Part"}]})), ["set_material", "set_material.reappliesAppearance"]);     } +    /// 0.11.4: an offset is classified by what was SELECTED for SOLIDWORKS (the+    /// outer loop's edges, or the face); a region pick is its own variant, on+    /// top of the end condition; an offset and a circle are two profiles.+    #[test]+    fn offsets_and_regions_are_their_own_variants() {+        let o = ops(serde_json::json!([+            {"op": "sketch", "plane": "Front Plane", "entities": [+                {"offsetEntities": {"fromFace": {"atPointMm": [0, 0, 10]}, "offsetMm": -1}},+                {"circle": {"radiusMm": 4}}]},+            {"op": "cut", "regionsAtMm": [[1, 1]], "offsetFromSurface": {"face": {"atPointMm": [0, 0, 0]}, "distanceMm": 2}},+            {"op": "sketch", "plane": "Front Plane", "entities": [{"offsetEntities": {"fromFace": {"atPointMm": [0, 0, 10]}, "offsetMm": 1, "loops": "all"}}]},+            {"op": "extrude", "depthMm": 2, "regionAtMm": [1, 1]},+            {"op": "sketch_rect", "plane": "Front Plane", "widthMm": 2, "heightMm": 2},+            {"op": "cut", "throughAll": true}+        ]));+        assert_eq!(ids(&o[0], serde_json::json!({})), ["sketch.plane.front", "sketch.circle", "sketch.multiProfile", "sketch.offsetEntities.outer"]);+        assert_eq!(ids(&o[1], serde_json::json!({})), ["cut.offsetFromSurface", "cut.regions"]);+        assert_eq!(ids(&o[2], serde_json::json!({})), ["sketch.plane.front", "sketch.offsetEntities.face"], "one offset alone is one profile");+        assert_eq!(ids(&o[3], serde_json::json!({})), ["extrude.one", "extrude.regions"]);+        assert_eq!(ids(&o[5], serde_json::json!({"dir": {"value": false}})), ["cut.one.throughAll"]);+        // The canary of 2026-10-16 measured the offset cut and its regions (cswa-08); a step+        // using the unrun ones (a boss of regions) is live:false and names it.+        let p = proof(&ids(&o[1], serde_json::json!({})), Some(34));+        assert_eq!(p["live"], true, "{p}");+        let p = proof(&ids(&o[3], serde_json::json!({})), Some(34));+        assert_eq!(p["live"], false);+        assert_eq!(p["unmeasured"].as_array().map(|a| a.len()), Some(1), "{p}");+    }+     #[test]     fn proven_is_live_only_where_every_variant_was_measured_on_this_release() {         let v = |ids: &[&str]| ids.iter().map(|s| s.to_string()).collect::<Vec<_>>();         // The coordinator's shape, on SOLIDWORKS 2026.         let p = proof(&v(&["sketch.face.top.positive", "sketch.circle", "select.multiSelectTyped"]), Some(34));         assert_eq!(p["live"], true);-        assert_eq!(p["measuredOn"], serde_json::json!([LIVE_2026_10_14.to_json(), LIVE_2021_10_15.to_json()]));+        assert_eq!(p["measuredOn"], serde_json::json!([LIVE_2026_10_14.to_json(), LIVE_2021_10_15.to_json(), LIVE_2026_10_15_CSWA.to_json()]));         assert!(p.get("why").is_none() && p.get("unmeasured").is_none());         // ...and on SOLIDWORKS 2021 too, by the community run (0.10.10).         assert_eq!(proof(&v(&["sketch.face.top.positive", "sketch.circle"]), Some(29))["live"], true);@@ -739,7 +847,7 @@ mod tests {         // elsewhere, not live here.         let p = proof(&v(&["sketch.face.right.positive", "sketch.circle"]), Some(29));         assert_eq!(p["live"], false);-        assert_eq!(p["measuredOn"].as_array().map(|a| a.len()), Some(2));+        assert_eq!(p["measuredOn"], serde_json::json!([LIVE_2026_10_14_B.to_json(), LIVE_2026_10_14.to_json(), LIVE_2026_10_15_CSWA.to_json()]));         assert!(p["why"].as_str().unwrap_or("").contains("this is SOLIDWORKS 2021"), "{p}");         // A version that could not be read is never live.         assert_eq!(proof(&v(&["new_part"]), None)["live"], false);@@ -749,10 +857,10 @@ mod tests {         assert_eq!(p["measuredOn"], serde_json::json!([]));         assert_eq!(p["unmeasured"][0]["variant"], "fillet.createDefinition");         // Variants measured in DIFFERENT runs on the same release cover the step,-        // and both runs are listed.+        // and every run is listed (0.10.4's, 0.10.3's, and the CSWA run's).         let p = proof(&v(&["sketch.face.right.positive", "sketch.circle", "select.multiSelectTyped"]), Some(34));         assert_eq!(p["live"], true, "{p}");-        assert_eq!(p["measuredOn"], serde_json::json!([LIVE_2026_10_14_B.to_json(), LIVE_2026_10_14.to_json()]));+        assert_eq!(p["measuredOn"], serde_json::json!([LIVE_2026_10_14_B.to_json(), LIVE_2026_10_14.to_json(), LIVE_2026_10_15_CSWA.to_json()]));         // A variant the table does not know has never been built live.         let p = proof(&v(&["linear_pattern.x+y"]), Some(34));         assert_eq!(p["live"], false);
src/cswa.rs+158−4
@@ -27,6 +27,11 @@ pub const SPECS: &[(&str, &str)] = &[     ("cswa-06-tool-block-step2.json", include_str!("../resources/cswa/cswa-06-tool-block-step2.json")),     ("cswa-07-tool-block-step3.json", include_str!("../resources/cswa/cswa-07-tool-block-step3.json")),     ("cswa-08-tool-block-step4.json", include_str!("../resources/cswa/cswa-08-tool-block-step4.json")),+    ("cswa-08b-tool-block-step4-explicit.json", include_str!("../resources/cswa/cswa-08b-tool-block-step4-explicit.json")),+    ("cswa-09-community-stepped-shaft.json", include_str!("../resources/cswa/cswa-09-community-stepped-shaft.json")),+    ("cswa-10-community-mirrored-block.json", include_str!("../resources/cswa/cswa-10-community-mirrored-block.json")),+    ("cswa-11-community-slotted-plate.json", include_str!("../resources/cswa/cswa-11-community-slotted-plate.json")),+    ("cswa-12-community-up-to-plates.json", include_str!("../resources/cswa/cswa-12-community-up-to-plates.json")), ];  // ── SPEC VARIABLES (0.11.0) ────────────────────────────────────────────────@@ -187,13 +192,27 @@ fn resolve_extends(v: &Value, all: &[Value], depth: usize) -> Result<Value, Stri         }     }     if let (Value::Object(m), Value::Object(o)) = (&mut merged, v) {+        // What is TRUE OF THE BASE PART ONLY is not inherited: the ops it+        // lacked, the derivation of ITS key, why IT is skipped in the simulator.         m.remove("needsOps");+        m.remove("derivation");+        m.remove("simulatorSkips");         for (k, x) in o {             if k != "extends" && k != "variables" && k != "scriptAppend" && k != "derivedAppend" {                 m.insert(k.clone(), x.clone());             }         }         m.insert("variables".into(), vars);+        // A derivedAppend name the base already derives would SHADOW it — and+        // every "=name" in the base's script would silently take the new value+        // (0.11.4: Step 4's tangent point `tpx` redrew Step 1's R5 fillet).+        // Refused: an appended value gets a name of its own.+        if let (Some(Value::Array(extra)), Some(Value::Array(base))) = (o.get("derivedAppend"), m.get("derived")) {+            let taken: Vec<&str> = base.iter().filter_map(|p| p.get(0).and_then(|n| n.as_str())).collect();+            if let Some(clash) = extra.iter().filter_map(|p| p.get(0).and_then(|n| n.as_str())).find(|n| taken.contains(n)) {+                return Err(format!("{id}: derivedAppend redefines {clash:?}, which {base_id} already derives — name it differently"));+            }+        }         // More steps after the base part's (the Tool Block's Steps 3 and 4         // cut the Step 2 part), and more derived values for them.         for (key, into) in [("scriptAppend", "script"), ("derivedAppend", "derived")] {@@ -275,6 +294,16 @@ pub struct Spec {     /// Ops the part needs that the bridge does not have yet: the part is     /// SKIPPED (and said so), never half-built.     pub needs_ops: Vec<String>,+    /// Why the SIMULATOR cannot build this part (0.11.4) — e.g. Offset+    /// Entities needs SOLIDWORKS' own face outline. Skipped there, said so;+    /// run live as any other part.+    pub simulator_skips: Option<String>,+    /// HOW A DERIVED KEY IS REPRODUCED (0.11.4): `[name, Python expression]`+    /// pairs evaluated in order (math's functions, the spec's variables and+    /// derived values in scope); `massG`, and `volumeMm3` / `centerOfMassMm`+    /// where the key has them, must come out as the key says.+    /// `tools/cswa-check.py --derivations` checks every one.+    pub derivation: Vec<(String, String)>, }  pub fn parse_spec(v: &Value) -> Result<Spec, String> {@@ -302,6 +331,12 @@ pub fn parse_spec(v: &Value) -> Result<Spec, String> {     };     let script = v.get("script").cloned().ok_or_else(|| format!("{id}: script is required"))?;     let needs_ops: Vec<String> = v.get("needsOps").and_then(|n| n.as_array()).map(|a| a.iter().filter_map(|x| x.as_str().map(String::from)).collect()).unwrap_or_default();+    let simulator_skips = match v.get("simulatorSkips") {+        None | Some(Value::Null) => None,+        Some(Value::String(why)) if !why.trim().is_empty() => Some(why.clone()),+        Some(_) => return Err(format!("{id}: simulatorSkips is the reason the simulator cannot build the part (a sentence)")),+    };+    let derivation = derivation_pairs(v).map_err(|m| format!("{id}: {m}"))?;     if needs_ops.is_empty() {         // A runnable spec must PARSE: a typo is caught here, not on a live run.         crate::script::parse(&script).map_err(|m| format!("{id}: its script does not parse: {m}"))?;@@ -318,10 +353,36 @@ pub fn parse_spec(v: &Value) -> Result<Spec, String> {         tol_pct,         script,         needs_ops,+        simulator_skips,+        derivation,         id,     }) } +/// `derivation`: a list of `[name, expression]` pairs; a name is an+/// identifier (it becomes a Python variable), the last ones the key's+/// quantities.+fn derivation_pairs(v: &Value) -> Result<Vec<(String, String)>, String> {+    let Some(d) = v.get("derivation").filter(|d| !d.is_null()) else { return Ok(Vec::new()) };+    let bad = || "derivation is a list of [name, Python expression] pairs".to_string();+    let mut out = Vec::new();+    for pair in d.as_array().ok_or_else(bad)? {+        match pair.as_array().map(|a| a.as_slice()) {+            Some([Value::String(n), Value::String(e)])+                if !n.is_empty() && n.chars().next().map(|c| c.is_ascii_alphabetic() || c == '_').unwrap_or(false)+                    && n.chars().all(|c| c.is_ascii_alphanumeric() || c == '_') && !e.trim().is_empty() =>+            {+                out.push((n.clone(), e.clone()))+            }+            _ => return Err(bad()),+        }+    }+    if !out.iter().any(|(n, _)| n == "massG") {+        return Err("a derivation must end in massG (the key)".into());+    }+    Ok(out)+}+ /// Every shipped spec, parsed. pub fn specs() -> Vec<Result<Spec, String>> {     let raw: Vec<Result<Value, String>> = SPECS.iter().map(|(name, text)| serde_json::from_str::<Value>(text).map_err(|e| format!("{name}: {e}"))).collect();@@ -387,11 +448,20 @@ pub fn compare(spec: &Spec, mp: &Value) -> (bool, Value) {     (pass, Value::Array(checks)) } -/// The one-line verdict: "N of M CSWA parts within tolerance".-pub fn summary(passed: usize, ran: usize, skipped: usize) -> String {+/// The one-line verdict: "N of M CSWA parts within tolerance", and what was+/// skipped and why — parts needing ops the bridge lacks, and (in the+/// simulator) parts only SOLIDWORKS can build.+pub fn summary(passed: usize, ran: usize, skipped: usize, simulator_only: usize) -> String {     let mut s = format!("{passed} of {ran} CSWA parts within tolerance");+    let mut why = Vec::new();     if skipped > 0 {-        s.push_str(&format!(" ({skipped} skipped: they need ops the bridge does not have yet)"));+        why.push(format!("{skipped} skipped: they need ops the bridge does not have yet"));+    }+    if simulator_only > 0 {+        why.push(format!("{simulator_only} skipped in the simulator: only SOLIDWORKS can build them"));+    }+    if !why.is_empty() {+        s.push_str(&format!(" ({})", why.join("; ")));     }     s }@@ -472,6 +542,34 @@ mod tests {         }     } +    #[test]+    fn an_appended_derived_value_may_not_shadow_the_base_s() {+        let base = json!({"id": "b", "expected": {"massG": 1}, "variables": {"A": 2}, "derived": [["k", "A*2"]],+                          "script": [{"op": "new_part"}, {"op": "sketch_rect", "widthMm": "=k", "heightMm": 1}]});+        let child = json!({"id": "c", "extends": "b", "derivedAppend": [["k", "A*3"]], "scriptAppend": []});+        let all = vec![base.clone(), child.clone()];+        let e = expand(&child, &all).unwrap_err();+        assert!(e.contains("redefines \"k\"") && e.contains("b already derives"), "{e}");+        // ...a new name is fine, and the base's script keeps its value.+        let ok = json!({"id": "c", "extends": "b", "derivedAppend": [["k2", "A*3"]], "scriptAppend": [{"op": "sketch_rect", "widthMm": "=k2", "heightMm": 1}]});+        let all = vec![base, ok.clone()];+        let x = expand(&ok, &all).unwrap();+        assert_eq!(x["script"][1]["widthMm"], 4.0);+        assert_eq!(x["script"][2]["widthMm"], 6.0);+        // The Python twin refuses it too.+        let dir = std::env::temp_dir().join(format!("swx-cswa-shadow-{}", std::process::id()));+        let _ = std::fs::remove_dir_all(&dir);+        std::fs::create_dir_all(dir.join("resources/cswa")).unwrap();+        std::fs::create_dir_all(dir.join("tools")).unwrap();+        std::fs::copy(std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("tools/cswa-check.py"), dir.join("tools/cswa-check.py")).unwrap();+        std::fs::write(dir.join("resources/cswa/b.json"), json!({"id": "b", "expected": {"massG": 1}, "variables": {"A": 2}, "derived": [["k", "A*2"]], "script": []}).to_string()).unwrap();+        std::fs::write(dir.join("resources/cswa/c.json"), json!({"id": "c", "extends": "b", "derivedAppend": [["k", "A*3"]]}).to_string()).unwrap();+        if let Ok(o) = std::process::Command::new("python3").arg(dir.join("tools/cswa-check.py")).arg("--expand-only").output() {+            assert!(!o.status.success() && String::from_utf8_lossy(&o.stderr).contains("redefines 'k'"), "{}", String::from_utf8_lossy(&o.stderr));+        }+        let _ = std::fs::remove_dir_all(&dir);+    }+     #[test]     fn a_reply_is_compared_within_the_tolerance() {         let spec = parse_spec(&json!({"id": "t", "expected": {"massG": 100.0, "volumeMm3": 1000.0, "centerOfMassMm": [10.0, 0.0, -5.0], "surfaceAreaMm2": 500.0},@@ -492,7 +590,10 @@ mod tests {         let col = json!({"massG": 100.0, "volumeMm3": 1000.0, "simulated": "mock", "simulatedBy": {"volume": "column integration"}, "centerOfMassMm": [0, 0, 0], "surfaceAreaMm2": 1.0});         assert!(!compare(&spec, &col).0, "a wrong centre of mass from the column model fails");         assert!(!compare(&spec, &json!({})).0, "nothing measured is not a pass");-        assert_eq!(summary(3, 4, 1), "3 of 4 CSWA parts within tolerance (1 skipped: they need ops the bridge does not have yet)");+        assert_eq!(summary(3, 4, 1, 0), "3 of 4 CSWA parts within tolerance (1 skipped: they need ops the bridge does not have yet)");+        assert_eq!(summary(4, 4, 0, 1), "4 of 4 CSWA parts within tolerance (1 skipped in the simulator: only SOLIDWORKS can build them)");+        assert_eq!(summary(2, 2, 1, 2), "2 of 2 CSWA parts within tolerance (1 skipped: they need ops the bridge does not have yet; 2 skipped in the simulator: only SOLIDWORKS can build them)");+        assert_eq!(summary(5, 5, 0, 0), "5 of 5 CSWA parts within tolerance");     }      #[test]@@ -503,5 +604,58 @@ mod tests {         // A spec that needs a missing op is not parsed as a script: it is skipped.         assert!(parse_spec(&json!({"id": "a", "expected": {"massG": 1}, "needsOps": ["loft"], "script": [{"op": "loft"}]})).is_ok());         assert!(parse_spec(&json!({"id": "a", "expected": {"massG": 1, "tolerancePct": 9}, "script": [{"op": "new_part"}]})).unwrap_err().contains("tolerancePct"));+        // A derivation must be [name, expression] pairs and end in the key's mass (0.11.4).+        let with = |d: Value| parse_spec(&json!({"id": "a", "expected": {"massG": 1}, "script": [{"op": "new_part"}], "derivation": d}));+        assert!(with(json!([["V", "1"]])).unwrap_err().contains("must end in massG"));+        assert!(with(json!([["massG"]])).unwrap_err().contains("[name, Python expression]"));+        assert!(with(json!([["1x", "1"], ["massG", "1"]])).unwrap_err().contains("[name, Python expression]"), "a name is an identifier");+        assert!(with(json!({"massG": "1"})).unwrap_err().contains("[name, Python expression]"));+        assert_eq!(with(json!([["V", "2*3"], ["massG", "V*1e-3"]])).unwrap().derivation, vec![("V".to_string(), "2*3".to_string()), ("massG".to_string(), "V*1e-3".to_string())]);+        assert!(parse_spec(&json!({"id": "a", "expected": {"massG": 1}, "script": [], "simulatorSkips": 3})).unwrap_err().contains("simulatorSkips"));+    }++    /// What is true of the BASE part only — the derivation of ITS key, why IT+    /// is skipped in the simulator, the ops it lacked — is not inherited by a+    /// spec that extends it (0.11.4).+    #[test]+    fn a_spec_that_extends_another_does_not_inherit_its_derivation_or_its_skips() {+        let base = json!({"id": "b", "expected": {"massG": 2}, "script": [{"op": "new_part"}], "derivation": [["massG", "2"]],+                          "simulatorSkips": "only SOLIDWORKS", "needsOps": ["loft"]});+        let child = json!({"id": "c", "extends": "b", "expected": {"massG": 3}});+        let all = vec![base, child.clone()];+        let x = expand(&child, &all).unwrap();+        assert!(x.get("derivation").is_none() && x.get("simulatorSkips").is_none() && x.get("needsOps").is_none(), "{x}");+        let s = parse_spec(&x).unwrap();+        assert!(s.derivation.is_empty() && s.simulator_skips.is_none() && s.needs_ops.is_empty());+        // ...while its own are its own.+        let own = json!({"id": "c", "extends": "b", "expected": {"massG": 3}, "simulatorSkips": "mine"});+        let all = vec![all[0].clone(), own.clone()];+        assert_eq!(parse_spec(&expand(&own, &all).unwrap()).unwrap().simulator_skips.as_deref(), Some("mine"));+    }++    /// The Python checker REFUSES a derivation that does not reproduce its+    /// key (0.11.4) — run on a scratch copy holding one wrong spec.+    #[test]+    fn a_derivation_that_misses_its_key_is_reported() {+        let dir = std::env::temp_dir().join(format!("swx-cswa-derivation-{}", std::process::id()));+        let _ = std::fs::remove_dir_all(&dir);+        std::fs::create_dir_all(dir.join("resources/cswa")).unwrap();+        std::fs::create_dir_all(dir.join("tools")).unwrap();+        std::fs::copy(std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("tools/cswa-check.py"), dir.join("tools/cswa-check.py")).unwrap();+        let spec = |mass: f64, com: Value| json!({"id": "d", "expected": {"massG": mass, "volumeMm3": 1000.0, "centerOfMassMm": com},+            "derivation": [["volumeMm3", "10**3"], ["massG", "volumeMm3*2.7e-3"], ["centerOfMassMm", "[5, 5, 5]"]], "script": []});+        let run = |v: &Value| -> Option<(bool, String)> {+            std::fs::write(dir.join("resources/cswa/d.json"), v.to_string()).unwrap();+            let o = std::process::Command::new("python3").arg(dir.join("tools/cswa-check.py")).arg("--derivations").output().ok()?;+            Some((o.status.success(), String::from_utf8_lossy(&o.stdout).to_string()))+        };+        if let Some((ok, out)) = run(&spec(2.7, json!([5.0, 5.0, 5.0]))) {+            assert!(ok, "the exact key is reproduced: {out}");+            let (ok, out) = run(&spec(2.7001, json!([5.0, 5.0, 5.0]))).unwrap();+            assert!(!ok && out.contains("massG: the derivation gives"), "a mass 1e-4 g off is reported: {out}");+            let (ok, out) = run(&spec(2.7, json!([5.0, 5.0, 5.01]))).unwrap();+            assert!(!ok && out.contains("centerOfMassMm"), "a centre of mass 0.01 mm off is reported: {out}");+        }+        let _ = std::fs::remove_dir_all(&dir);     } }
src/modeling.rs+38−2
@@ -293,11 +293,33 @@ pub fn dir_flag(sketch_normal: Option<V3>, reference: Option<V3>, reverse: bool) pub fn end_condition_id(u: &crate::script::UpTo) -> i32 {     match u {         crate::script::UpTo::Next => 11,-        crate::script::UpTo::Surface { .. } => 10,+        // swEndCondUpToSurface 4, the id the macro recorder writes, NOT+        // swEndCondUpToSelection 10 (the help's current name for it).+        // MEASURED 2026-10-16 (SOLIDWORKS 2026, canary 0.11.4-rc1, cswa-12):+        // with 10 and the face at mark 1, a boss and a cut both built with an+        // EMPTY direction box and stopped at the NEXT face (the boss 3392.9 mm3+        // short, the cut 1005.3 mm3 short, both exactly one face early);+        // OffsetFromSurface 5 with the same selection went to the face (the+        // pillar at x 68 was right). A forum report says the same of 10+        // (3dswym, "FeatureCut4 Method": the recorder writes 4, 10 leaves the+        // direction box empty).+        crate::script::UpTo::Surface { .. } => 4,         crate::script::UpTo::OffsetFrom { .. } => 5,     } } +/// The `Ddir1` / `Ddir2` flag `FeatureExtrusion3` and `FeatureCut4` take for a+/// draft. MEASURED 2026-10-16 (SOLIDWORKS 2026, canary 0.11.4-rc1): the flag+/// TRUE made the profile GROW along the extrude - a 5 deg boss widened (cswa-12)+/// and a 45 deg countersink cut widened into exactly the outward frustum, 804.25+/// mm3 more than the inward one (cswa-11, 1273.4 vs 469.1 mm3). The 2024 help+/// for FeatureExtrusion3 says "True for first draft angle to be inward"; its+/// sibling FeatureExtruRefSurface3 says the opposite, and SOLIDWORKS itself+/// did the opposite. So: TRUE = OUTWARD, and the bridge passes `outward` as is.+pub fn draft_outward_flag(d: &crate::script::Draft) -> bool {+    d.outward+}+ /// Why a geometric pick found no single entity. #[derive(Clone, Debug, PartialEq)] pub enum PickError {@@ -767,7 +789,7 @@ mod tests {      #[test]     fn spans_follow_the_ops_own_direction() {-        let e = |depth: f64, depth2: f64, direction: Direction, through_all: bool| Extent { depth, depth2, through_all, reverse: false, direction , up_to: None, draft: None };+        let e = |depth: f64, depth2: f64, direction: Direction, through_all: bool| Extent { depth, depth2, through_all, reverse: false, direction , up_to: None, draft: None, regions: Vec::new() };         assert_eq!(extent_span(0.0, 1.0, &e(5.0, 5.0, Direction::One, false), (0.0, 10.0)), (0.0, 5.0));         assert_eq!(extent_span(0.0, -1.0, &e(5.0, 5.0, Direction::One, false), (0.0, 10.0)), (-5.0, 0.0));         // The audit's T27: a cut on Front Plane (own direction −Z), both 6 / 2.@@ -949,4 +971,18 @@ mod tests {         let line = Entity::Line { x0: 1.0, y0: 2.0, x1: 3.0, y1: 4.0, construction: true };         assert_eq!(entity_to_sketch(&front, 0.0, &line, &flip).0, Entity::Line { x0: -1.0, y0: 2.0, x1: -3.0, y1: 4.0, construction: true });     }++    /// MEASURED 2026-10-16 on SOLIDWORKS 2026 (canary 0.11.4-rc1): "up to surface" is+    /// swEndCondUpToSurface 4 (10, the help's UpToSelection, left the direction box+    /// empty and stopped at the next face), and Ddir1 TRUE drafts OUTWARD (the help+    /// says inward; a 5 deg boss and a 45 deg countersink both widened with TRUE).+    #[test]+    fn end_condition_ids_and_the_draft_flag_as_solidworks_measured_them() {+        use crate::script::{Draft, UpTo};+        assert_eq!(end_condition_id(&UpTo::Next), 11);+        assert_eq!(end_condition_id(&UpTo::Surface { point: [0.0, 0.0, 0.0] }), 4, "swEndCondUpToSurface, the macro recorder's id");+        assert_eq!(end_condition_id(&UpTo::OffsetFrom { point: [0.0, 0.0, 0.0], offset: 0.008, reverse_offset: false }), 5);+        assert!(!draft_outward_flag(&Draft { angle: 0.1, outward: false }), "inward (the default, a countersink) = Ddir FALSE");+        assert!(draft_outward_flag(&Draft { angle: 0.1, outward: true }), "outward = Ddir TRUE");+    } }
src/script.rs+213−19
@@ -260,12 +260,60 @@ pub struct Extent {     /// A taper (0.11.0): `angle` radians from the extrude direction; inward     /// (the profile shrinks as it goes) unless `outward`.     pub draft: Option<Draft>,+    /// SKETCH REGIONS (0.11.4): extrude only the regions of the sketch that+    /// hold these points ((u, v) metres, the sketch's own coordinates) —+    /// SOLIDWORKS' "Selected Contours", for a sketch whose contours CROSS+    /// (an offset outline and a circle). Empty: the whole sketch.+    pub regions: Vec<[f64; 2]>, }  impl Extent {     /// A plain blind extent `depth` one way.     pub fn blind(depth: f64) -> Extent {-        Extent { depth, depth2: depth, through_all: false, reverse: false, direction: Direction::One, up_to: None, draft: None }+        Extent { depth, depth2: depth, through_all: false, reverse: false, direction: Direction::One, up_to: None, draft: None, regions: Vec::new() }+    }+}++/// OFFSET ENTITIES (0.11.4): a model face's edges offset into the sketch by+/// SOLIDWORKS itself (IModelDoc2::SketchOffsetEntities2) — an outline the DSL+/// cannot draw, because it is the MODEL's (the CSWA Tool Block's Step 4+/// pocket: the front face's outline 1 mm in).+#[derive(Debug, Clone, PartialEq)]+pub struct OffsetFace {+    /// A point ON the face (metres), picked geometrically.+    pub point: [f64; 3],+    /// Metres, never 0: NEGATIVE = INWARD (the new outline lies inside the+    /// face), positive = outward. SOLIDWORKS' own sign does not decide the+    /// side (it varies by face): the bridge checks where the new entities+    /// landed and offsets the other way if they landed outside.+    pub offset: f64,+    /// Which of the face's edges.+    pub loops: OffsetLoops,+    /// SketchOffsetEntities2's `Chain`: carry the offset along every edge+    /// contiguous with the selected ones.+    pub chain: bool,+}++/// The edges of a face that Offset Entities takes.+#[derive(Debug, Clone, Copy, PartialEq, Eq)]+pub enum OffsetLoops {+    /// The face's OUTER loop only (its edges selected): holes in the face are+    /// left out of the sketch.+    Outer,+    /// The whole FACE selected: every loop, a hole's edge offset away from+    /// the face's material too.+    All,+}++impl OffsetFace {+    pub fn describe(&self) -> serde_json::Value {+        serde_json::json!({"offsetEntities": {+            "fromFace": {"atPointMm": [self.point[0] / MM, self.point[1] / MM, self.point[2] / MM]},+            "offsetMm": self.offset / MM,+            "side": if self.offset < 0.0 { "inward" } else { "outward" },+            "loops": match self.loops { OffsetLoops::Outer => "outer", OffsetLoops::All => "all" },+            "chain": self.chain,+        }})     } } @@ -373,7 +421,7 @@ pub enum Op {     /// profiles in one sketch extrude into rings, walls or hole patterns in ONE     /// feature. `shorthand` is the op the caller wrote: "sketch", "sketch_rect"     /// or "sketch_circle" (the last two are one-entity shorthands).-    Sketch { shorthand: &'static str, plane: PlaneRef, entities: Vec<Entity> },+    Sketch { shorthand: &'static str, plane: PlaneRef, entities: Vec<Entity>, offsets: Vec<OffsetFace> },     /// Extrude the sketch just closed.     Extrude(Extent),     /// Cut-extrude through the sketch just closed.@@ -797,6 +845,11 @@ fn resolve_axis(ops: &mut [Op], j: usize, r: usize, sketch_step: &Value) -> Resu         Op::Revolve(rv) | Op::RevolveCut(rv) => rv.axis_spec.clone(),         _ => return Ok(()),     };+    if let Op::Sketch { offsets, .. } = &ops[j] {+        if !offsets.is_empty() {+            return Err("a sketch with offsetEntities cannot be revolved: its profile is SOLIDWORKS' own, so no side of an axis can be checked — extrude or cut it".into());+        }+    }     let Op::Sketch { entities, .. } = &mut ops[j] else { return Ok(()) };     let line_from = |a: (f64, f64), b: (f64, f64)| Entity::Line { x0: a.0, y0: a.1, x1: b.0, y1: b.1, construction: true };     let span = |ents: &[Entity], a: f64, b: f64| {@@ -1376,6 +1429,57 @@ fn face_point(v: &Value, what: &str) -> Result<[f64; 3], String> {     point3(p, &format!("{what}.atPointMm")) } +/// `{"offsetEntities": {"fromFace": {"atPointMm": [x, y, z]}, "offsetMm": -1,+/// "loops": "outer" | "all", "chain": true}}` (0.11.4).+fn offset_entities(v: &Value) -> Result<OffsetFace, String> {+    if !v.is_object() {+        return Err("offsetEntities is {\"fromFace\": {\"atPointMm\": [x, y, z]}, \"offsetMm\": -1 (negative = inward)}".into());+    }+    let from = v.get("fromFace").filter(|f| !f.is_null()).ok_or_else(|| "offsetEntities needs fromFace: {\"atPointMm\": [x, y, z]} (mm, a point ON the face)".to_string())?;+    let point = face_point(from, "fromFace")?;+    let offset = mm(v, "offsetMm", None)?;+    if offset == 0.0 {+        return Err("offsetMm must not be 0 (negative offsets INTO the face, positive away from it)".into());+    }+    if offset.abs() > 1.0 {+        return Err("offsetMm must be within ±1000 mm".into());+    }+    let loops = match v.get("loops").and_then(|l| l.as_str()) {+        None | Some("outer") => OffsetLoops::Outer,+        Some("all") => OffsetLoops::All,+        Some(other) => return Err(format!("loops is \"outer\" (the face's outer loop, the default) or \"all\" (every loop: the face selected), got {other:?}")),+    };+    Ok(OffsetFace { point, offset, loops, chain: flag(v, "chain", true) })+}++/// "entity N …" from `sketch_entities` over the DRAWN entities, renumbered+/// as the caller wrote the list (the offsets taken out of it).+fn renumber_entity(m: &str, written_at: &[usize]) -> String {+    let Some(rest) = m.strip_prefix("entity ") else { return m.to_string() };+    let digits: String = rest.chars().take_while(|c| c.is_ascii_digit()).collect();+    match digits.parse::<usize>().ok().and_then(|n| n.checked_sub(1)).and_then(|k| written_at.get(k)) {+        Some(at) => format!("entity {}{}", at + 1, &rest[digits.len()..]),+        None => m.to_string(),+    }+}++/// `regionsAtMm: [[u, v], ...]` (or one `regionAtMm: [u, v]`): the sketch+/// regions to extrude, by a point inside each (0.11.4).+fn regions(step: &Value) -> Result<Vec<[f64; 2]>, String> {+    let list: Vec<Value> = match (step.get("regionsAtMm").filter(|r| !r.is_null()), step.get("regionAtMm").filter(|r| !r.is_null())) {+        (None, None) => return Ok(Vec::new()),+        (Some(_), Some(_)) => return Err("give regionsAtMm OR regionAtMm, not both".into()),+        (Some(r), None) => r.as_array().filter(|a| !a.is_empty()).cloned().ok_or_else(|| "regionsAtMm must be a non-empty list of [u, v] points (mm, the sketch's coordinates)".to_string())?,+        (None, Some(r)) => vec![r.clone()],+    };+    if list.len() > 32 {+        return Err("at most 32 regions".into());+    }+    list.iter()+        .map(|p| need_pt2(&serde_json::json!({"p": p}), &["p"]).map(|(u, v)| [u, v]).map_err(|_| "each region is a point [u, v] (mm) inside it, in the sketch's coordinates".to_string()))+        .collect()+}+ /// The end condition other than a depth, if one is given. fn up_to(step: &Value) -> Result<Option<UpTo>, String> {     let mut found: Vec<UpTo> = Vec::new();@@ -1433,7 +1537,7 @@ fn extent(step: &Value, is_cut: bool) -> Result<Extent, String> {             return Err("an up-to end condition goes ONE way (the bridge does not build two-direction up-to extents)".into());         }         let depth = if let UpTo::OffsetFrom { offset, .. } = u { offset } else { 0.0 };-        return Ok(Extent { depth, depth2: depth, through_all: false, reverse: flag(step, "reverse", false), direction: Direction::One, up_to: Some(u), draft });+        return Ok(Extent { depth, depth2: depth, through_all: false, reverse: flag(step, "reverse", false), direction: Direction::One, up_to: Some(u), draft, regions: regions(step)? });     }     let through_all = flag(step, "throughAll", false);     let mid = flag(step, "midPlane", false);@@ -1462,7 +1566,7 @@ fn extent(step: &Value, is_cut: bool) -> Result<Extent, String> {         Some(_) => positive_mm(step, "depth2Mm")?,         None => depth,     };-    Ok(Extent { depth, depth2, through_all, reverse: flag(step, "reverse", false), direction, up_to: None, draft })+    Ok(Extent { depth, depth2, through_all, reverse: flag(step, "reverse", false), direction, up_to: None, draft, regions: regions(step)? }) }  fn edges(step: &Value) -> Result<EdgeSel, String> {@@ -1632,7 +1736,7 @@ pub fn hole_plan(     let reverse = !outward_is_normal;     let inward = if outward_is_normal { -1.0 } else { 1.0 };     let plane_at = |hh: f64| if hh.abs() < 1e-12 { PlaneRef::Named(base.to_string()) } else { PlaneRef::Offset { from: base.to_string(), offset: hh } };-    let sketch = |hh: f64, r: f64| Op::Sketch { shorthand: "sketch", plane: plane_at(hh), entities: vec![Entity::Circle { cx: u, cy: v, r }] };+    let sketch = |hh: f64, r: f64| Op::Sketch { shorthand: "sketch", plane: plane_at(hh), entities: vec![Entity::Circle { cx: u, cy: v, r }], offsets: Vec::new() };     let blind = |t: f64| Extent { reverse, ..Extent::blind(t) };     let mut ops = Vec::new();     let mut start = h;@@ -1673,19 +1777,42 @@ fn parse_step(step: &Value) -> Result<Op, String> {         "new_part" => Op::NewPart { visible: visible_arg(step)? },         "new_assembly" => Op::NewAssembly { visible: visible_arg(step)? },         "clear_part" => Op::ClearPart,-        "sketch_rect" => Op::Sketch { shorthand: "sketch_rect", plane: plane_ref(step)?, entities: rect_entities(step)? },-        "sketch_circle" => Op::Sketch { shorthand: "sketch_circle", plane: plane_ref(step)?, entities: vec![circle(step)?] },+        "sketch_rect" => Op::Sketch { shorthand: "sketch_rect", plane: plane_ref(step)?, entities: rect_entities(step)?, offsets: Vec::new() },+        "sketch_circle" => Op::Sketch { shorthand: "sketch_circle", plane: plane_ref(step)?, entities: vec![circle(step)?], offsets: Vec::new() },         "sketch" => {             let list = step.get("entities").and_then(|e| e.as_array()).filter(|a| !a.is_empty())-                .ok_or_else(|| format!("sketch needs entities: a non-empty list, each one of {}", ENTITY_KINDS.join(", ")))?;+                .ok_or_else(|| format!("sketch needs entities: a non-empty list, each one of {}, or offsetEntities", ENTITY_KINDS.join(", ")))?;             if list.len() > 500 {                 return Err("a sketch may hold at most 500 entities".into());             }-            let (entities, _) = sketch_entities(list)?;-            if !entities.iter().any(|e| !e.is_construction()) {+            // OFFSET ENTITIES (0.11.4) are the MODEL's edges, drawn by+            // SOLIDWORKS: kept apart from the entities the bridge draws.+            let mut offsets = Vec::new();+            let mut drawn: Vec<Value> = Vec::new();+            // Where each drawn entity stands in the caller's list, so an error+            // names the entity the caller wrote (offsets are taken out first).+            let mut written_at: Vec<usize> = Vec::new();+            for (i, e) in list.iter().enumerate() {+                match e.get("offsetEntities") {+                    Some(o) => offsets.push(offset_entities(o).map_err(|m| format!("entity {} (offsetEntities): {m}", i + 1))?),+                    None => {+                        drawn.push(e.clone());+                        written_at.push(i);+                    }+                }+            }+            if offsets.len() > 8 {+                return Err("a sketch may hold at most 8 offsetEntities".into());+            }+            let entities = if drawn.is_empty() {+                Vec::new()+            } else {+                sketch_entities(&drawn).map_err(|m| renumber_entity(&m, &written_at))?.0+            };+            if offsets.is_empty() && !entities.iter().any(|e| !e.is_construction()) {                 return Err("the sketch has only construction geometry — there is no profile".into());             }-            Op::Sketch { shorthand: "sketch", plane: plane_ref(step)?, entities }+            Op::Sketch { shorthand: "sketch", plane: plane_ref(step)?, entities, offsets }         }         "extrude" => Op::Extrude(extent(step, false)?),         "cut" => Op::Cut(extent(step, true)?),@@ -1910,12 +2037,13 @@ mod tests {             Op::Sketch {                 shorthand: "sketch_rect",                 plane: PlaneRef::Named("Top Plane".into()),-                entities: vec![Entity::Rect { x0: 0.0, y0: 0.0, x1: 0.05, y1: 0.03 }]+                entities: vec![Entity::Rect { x0: 0.0, y0: 0.0, x1: 0.05, y1: 0.03 }],+                offsets: vec![]             }         );         assert_eq!(             ops[2],-            Op::Extrude(Extent { depth: 0.02, depth2: 0.02, through_all: false, reverse: false, direction: Direction::One , up_to: None, draft: None })+            Op::Extrude(Extent { depth: 0.02, depth2: 0.02, through_all: false, reverse: false, direction: Direction::One , up_to: None, draft: None, regions: Vec::new() })         );         assert_eq!(             ops[3],@@ -1934,7 +2062,8 @@ mod tests {             Op::Sketch {                 shorthand: "sketch_circle",                 plane: PlaneRef::Named("Front Plane".into()),-                entities: vec![Entity::Circle { cx: 0.0, cy: 0.0, r: 0.005 }]+                entities: vec![Entity::Circle { cx: 0.0, cy: 0.0, r: 0.005 }],+                offsets: vec![]             }         );     }@@ -2217,8 +2346,8 @@ mod tests {         ]))         .unwrap();         assert!(matches!(&ops[0], Op::Sketch { shorthand: "sketch", entities, .. } if entities.len() == 3));-        assert_eq!(ops[1], Op::Extrude(Extent { depth: 0.0086, depth2: 0.002, through_all: false, reverse: false, direction: Direction::Both , up_to: None, draft: None }));-        assert_eq!(ops[2], Op::Cut(Extent { depth: 0.0, depth2: 0.0, through_all: true, reverse: true, direction: Direction::One , up_to: None, draft: None }));+        assert_eq!(ops[1], Op::Extrude(Extent { depth: 0.0086, depth2: 0.002, through_all: false, reverse: false, direction: Direction::Both , up_to: None, draft: None, regions: Vec::new() }));+        assert_eq!(ops[2], Op::Cut(Extent { depth: 0.0, depth2: 0.0, through_all: true, reverse: true, direction: Direction::One , up_to: None, draft: None, regions: Vec::new() }));         assert!(matches!(&ops[3], Op::Cut(e) if e.direction == Direction::MidPlane && near(e.depth, 0.004)));         // through all + mid plane is SOLIDWORKS' "Through All - Both"         assert!(matches!(&ops[4], Op::Extrude(e) if e.direction == Direction::Both && e.through_all));@@ -2269,6 +2398,71 @@ mod tests {         }     } +    /// OFFSET ENTITIES AND SKETCH REGIONS (0.11.4): parsed, defaulted, and+    /// refused for what would make them meaningless.+    #[test]+    fn offset_entities_and_regions_parse_and_refuse_what_they_must() {+        let ops = parse(&json!([+            {"op": "sketch", "face": {"atPointMm": [70, 10, 44]}, "entities": [+                {"offsetEntities": {"fromFace": {"atPointMm": [70, 10, 44]}, "offsetMm": -1}},+                {"circle": {"centerMm": [72, 28.7], "radiusMm": 42}}]},+            {"op": "cut", "regionsAtMm": [[25, 0], [30, 1]], "offsetFromSurface": {"face": {"atPointMm": [30, 0, 0]}, "distanceMm": 12}},+            {"op": "sketch", "plane": "Top Plane", "entities": [+                {"offsetEntities": {"fromFace": {"atPointMm": [0, 10, 0]}, "offsetMm": 2, "loops": "all", "chain": false}}]},+            {"op": "extrude", "depthMm": 3, "regionAtMm": [1, 2]}+        ]))+        .unwrap();+        let Op::Sketch { entities, offsets, .. } = &ops[0] else { panic!() };+        assert_eq!(entities.len(), 1, "the circle is drawn by the bridge; the offset is not an entity");+        assert_eq!(offsets, &vec![OffsetFace { point: [0.07, 0.01, 0.044], offset: -0.001, loops: OffsetLoops::Outer, chain: true }], "defaults: the outer loop, chained");+        assert_eq!(offsets[0].describe()["offsetEntities"]["side"], "inward");+        let Op::Cut(e) = &ops[1] else { panic!() };+        assert_eq!(e.regions, vec![[0.025, 0.0], [0.03, 0.001]]);+        assert!(matches!(e.up_to, Some(UpTo::OffsetFrom { .. })), "regions go with any end condition");+        let Op::Sketch { entities, offsets, .. } = &ops[2] else { panic!() };+        assert!(entities.is_empty(), "a sketch may hold nothing but an offset");+        assert_eq!((offsets[0].loops, offsets[0].chain, offsets[0].offset), (OffsetLoops::All, false, 0.002));+        assert_eq!(offsets[0].describe()["offsetEntities"]["side"], "outward");+        let Op::Extrude(e) = &ops[3] else { panic!() };+        assert_eq!(e.regions, vec![[0.001, 0.002]], "regionAtMm is one region");+        // Refusals.+        let one = |ent: Value| parse(&json!([{"op": "sketch", "entities": [ent]}])).unwrap_err();+        assert!(one(json!({"offsetEntities": {"offsetMm": -1}})).contains("needs fromFace"));+        assert!(one(json!({"offsetEntities": {"fromFace": {"atPointMm": [0, 0, 0]}, "offsetMm": 0}})).contains("must not be 0"));+        assert!(one(json!({"offsetEntities": {"fromFace": {"atPointMm": [0, 0, 0]}}})).contains("offsetMm"));+        assert!(one(json!({"offsetEntities": {"fromFace": {"atPointMm": [0, 0, 0]}, "offsetMm": -1, "loops": "inner"}})).contains("loops is"));+        assert!(one(json!({"offsetEntities": {"fromFace": {"atPointMm": [0, 0, 0]}, "offsetMm": 2000}})).contains("1000"));+        assert!(one(json!({"offsetEntities": 5})).starts_with("step 1: entity 1 (offsetEntities):"));+        // An entity after an offset is numbered as the caller wrote it.+        let e = parse(&json!([{"op": "sketch", "entities": [+            {"offsetEntities": {"fromFace": {"atPointMm": [0, 0, 0]}, "offsetMm": -1}},+            {"circle": {"radiusMm": 2}},+            {"polyline": {"points": [[0, 0], [10, 0], [10, 10]]}}]}]))+        .unwrap_err();+        assert!(e.starts_with("step 1: entity 3"), "{e}");+        assert_eq!(renumber_entity("entity 2 (polyline): a gap", &[1, 2]), "entity 3 (polyline): a gap");+        assert_eq!(renumber_entity("entity 9: x", &[1]), "entity 9: x", "out of range: as it was");+        assert_eq!(renumber_entity("no entity", &[1]), "no entity");+        let cut = |extra: Value| {+            let mut c = json!({"op": "cut", "depthMm": 1});+            for (k, v) in extra.as_object().unwrap() {+                c[k] = v.clone();+            }+            parse(&json!([{"op": "sketch_rect", "widthMm": 1, "heightMm": 1}, c])).unwrap_err()+        };+        assert!(cut(json!({"regionsAtMm": []})).contains("non-empty"));+        assert!(cut(json!({"regionsAtMm": [[1, 2, 3]]})).contains("[u, v]"));+        assert!(cut(json!({"regionsAtMm": [[1, 2]], "regionAtMm": [1, 2]})).contains("not both"));+        // A sketch whose profile is SOLIDWORKS' own cannot be revolved: no side+        // of an axis can be checked.+        let e = parse(&json!([+            {"op": "sketch", "entities": [{"offsetEntities": {"fromFace": {"atPointMm": [0, 0, 0]}, "offsetMm": -1}}]},+            {"op": "revolve", "axis": "x"}+        ]))+        .unwrap_err();+        assert!(e.contains("cannot be revolved"), "{e}");+    }+     #[test]     fn an_open_contour_is_refused_naming_the_gap() {         let e = sketch_of(json!([{"polyline": {"points": [[0, 0], [10, 0], [10, 10], [0, 10]]}}])).unwrap_err();@@ -2395,7 +2589,7 @@ mod tests {         assert_eq!(e(json!({"op": "extrude", "depthMm": 5, "draftDeg": 3})).unwrap(), Op::Extrude(Extent { draft: Some(Draft { angle: 3f64.to_radians(), outward: false }), ..Extent::blind(0.005) }));         assert!(e(json!({"op": "extrude", "depthMm": 5, "draftDeg": 90})).unwrap_err().contains("draftDeg"));         assert_eq!(crate::modeling::end_condition_id(&UpTo::Next), 11);-        assert_eq!(crate::modeling::end_condition_id(&UpTo::Surface { point: [0.0; 3] }), 10);+        assert_eq!(crate::modeling::end_condition_id(&UpTo::Surface { point: [0.0; 3] }), 4, "swEndCondUpToSurface (measured 2026-10-16; 10 stops at the next face)");         assert_eq!(crate::modeling::end_condition_id(&UpTo::OffsetFrom { point: [0.0; 3], offset: 0.0, reverse_offset: false }), 5);     } @@ -2435,13 +2629,13 @@ mod tests {         let plan = hole_plan(&top, "Top Plane", 0.02, true, [0.005, 0.02, -0.003], 0.006, None, Some((0.011, 0.004)), None);         assert_eq!(plan.iter().map(|o| o.name()).collect::<Vec<_>>(), ["sketch", "cut", "sketch", "cut"]);         // Top Plane: sketch +y = model −Z, so model z −3 is sketch v +3.-        assert_eq!(plan[0], Op::Sketch { shorthand: "sketch", plane: PlaneRef::Offset { from: "Top Plane".into(), offset: 0.02 }, entities: vec![Entity::Circle { cx: 0.005, cy: 0.003, r: 0.0055 }] });+        assert_eq!(plan[0], Op::Sketch { shorthand: "sketch", plane: PlaneRef::Offset { from: "Top Plane".into(), offset: 0.02 }, entities: vec![Entity::Circle { cx: 0.005, cy: 0.003, r: 0.0055 }], offsets: vec![] });         assert_eq!(plan[1], Op::Cut(Extent::blind(0.004)));         assert!(matches!(&plan[2], Op::Sketch { plane: PlaneRef::Offset { offset, .. }, .. } if (offset - 0.016).abs() < 1e-15));         assert_eq!(plan[3], Op::Cut(Extent { through_all: true, ..Extent::blind(0.0) }));         // From a face looking down (−normal) at height 0: Top Plane itself, reversed.         let plan = hole_plan(&top, "Top Plane", 0.0, false, [0.0; 3], 0.006, Some(0.005), None, Some((0.012, std::f64::consts::FRAC_PI_2)));-        assert_eq!(plan[0], Op::Sketch { shorthand: "sketch", plane: PlaneRef::Named("Top Plane".into()), entities: vec![Entity::Circle { cx: 0.0, cy: 0.0, r: 0.006 }] });+        assert_eq!(plan[0], Op::Sketch { shorthand: "sketch", plane: PlaneRef::Named("Top Plane".into()), entities: vec![Entity::Circle { cx: 0.0, cy: 0.0, r: 0.006 }], offsets: vec![] });         let Op::Cut(cs) = &plan[1] else { panic!() };         assert!(cs.reverse && (cs.depth - 0.003).abs() < 1e-15 && cs.draft == Some(Draft { angle: std::f64::consts::FRAC_PI_4, outward: false }));         let Op::Cut(main) = &plan[3] else { panic!() };
src/selftest.rs+11−3
@@ -467,7 +467,7 @@ fn cswa_level(ctx: &Ctx, args: &Value, sw: &Value, ready: bool, started: Instant     let mut memory_log = MemoryLog::default();     let mut none: Option<String> = None;     let mut last: Option<String> = None;-    let (mut passed, mut ran, mut skipped) = (0usize, 0usize, 0usize);+    let (mut passed, mut ran, mut skipped, mut simulator_only) = (0usize, 0usize, 0usize, 0usize);     let mut parts: Vec<Value> = Vec::new();     for spec in crate::cswa::specs() {         let spec = match spec {@@ -486,6 +486,14 @@ fn cswa_level(ctx: &Ctx, args: &Value, sw: &Value, ready: bool, started: Instant             run.skip(&name, "swx_run_script", &format!("needs ops the bridge does not have yet: {}", spec.needs_ops.join(", ")));             continue;         }+        // A part only SOLIDWORKS can build (0.11.4: Offset Entities reads the+        // face's own outline) is skipped in the SIMULATOR, saying why — and+        // built like any other on a real install.+        if let (true, Some(why)) = (crate::is_mock(), &spec.simulator_skips) {+            simulator_only += 1;+            run.skip(&name, "swx_run_script", &format!("skipped in the simulator: {why}"));+            continue;+        }         let id = spec.id.as_str();         if let Err(stop) = presence_between(ctx, last.as_deref(), id, idle_wait, &mut none) {             memory_log.stopped_for = Some("userPresent");@@ -534,9 +542,9 @@ fn cswa_level(ctx: &Ctx, args: &Value, sw: &Value, ready: bool, started: Instant     if let Some(prev) = &active {         run.call(ctx, "re-activate the document that was active before", "swx_activate_document", json!({"name": prev}));     }-    let verdict = crate::cswa::summary(passed, ran, skipped);+    let verdict = crate::cswa::summary(passed, ran, skipped, simulator_only);     let mut extra = memory_log.to_json(memory_override.as_deref());-    extra["cswa"] = json!({"summary": verdict, "passed": passed, "ran": ran, "skipped": skipped, "parts": parts,+    extra["cswa"] = json!({"summary": verdict, "passed": passed, "ran": ran, "skipped": skipped + simulator_only, "skippedInSimulator": simulator_only, "parts": parts,                            "allPassed": ran > 0 && passed == ran && memory_log.stopped.is_none()});     finish_with("cswa", sw, ready, true, started, run, Some(format!("{verdict}.")), extra) }
src/verbs3.rs+2−1
@@ -5195,12 +5195,13 @@ fn script_help(message: impl Into<String>) -> Value {                 "new_part": {"visible": "true (default) | false — created HIDDEN (ISldWorks::DocumentVisible). A hidden part CANNOT BE MODELLED (SOLIDWORKS selects only in the active document, and a hidden one cannot be activated — measured): a script that models it is refused document_hidden. Use reuseDocument, not hiding, to keep memory flat"},                 "new_assembly": {"visible": "as new_part"},                 "clear_part": {"(none)": "deletes EVERY feature after the origin of a part the BRIDGE created — never anyone else's; N checks then cost one document"},-                "sketch": {"plane": "Front Plane|Top Plane|Right Plane|<any plane name> | {offsetFrom, offsetMm} | {offsetFrom: {face: {atPointMm:[x,y,z]}}, offsetMm} (offsetMm along the face's OUTWARD normal; negative = into the part)", "face": "{atPointMm:[x,y,z]} instead of plane", "entities": "[{rect:{widthMm, heightMm, xMm, yMm, anchor:corner|center, centerMm:[x,y], cornerRadiusMm?}}, {circle:{radiusMm|diameterMm, xMm, yMm | centerMm}}, {line:{from:[x,y], to:[x,y]}}, {centerline:{from, to}}, {polyline:{points:[[x,y],...], close:bool}}, {arc:{center:[x,y], radiusMm, startDeg, endDeg, ccw:true}}, {arc3:{start, mid, end}}, {tangentArc:{to:[x,y], radiusMm?}} (continues the entity before it), {slot:{center, lengthMm (centre to centre), widthMm, angleDeg}}, {polygon:{center, sides, circumradiusMm | inscribedRadiusMm, angleDeg (first vertex)}}, {sketchFillet:{at:[x,y], radiusMm}} / {sketchChamfer:{at:[x,y], distanceMm}} (round or cut the corner where two LINES drawn before it meet)] — ALL in one sketch: concentric circles make a ring, a rect with circles inside makes a plate with holes. Lines and arcs must CLOSE (each end meets exactly one other within 1e-6 mm — an open contour is refused naming the gap); several closed contours are several regions. Any entity takes construction:true (never part of a profile). 0.11.0, not yet run live"},+                "sketch": {"plane": "Front Plane|Top Plane|Right Plane|<any plane name> | {offsetFrom, offsetMm} | {offsetFrom: {face: {atPointMm:[x,y,z]}}, offsetMm} (offsetMm along the face's OUTWARD normal; negative = into the part)", "face": "{atPointMm:[x,y,z]} instead of plane", "entities": "[{rect:{widthMm, heightMm, xMm, yMm, anchor:corner|center, centerMm:[x,y], cornerRadiusMm?}}, {circle:{radiusMm|diameterMm, xMm, yMm | centerMm}}, {line:{from:[x,y], to:[x,y]}}, {centerline:{from, to}}, {polyline:{points:[[x,y],...], close:bool}}, {arc:{center:[x,y], radiusMm, startDeg, endDeg, ccw:true}}, {arc3:{start, mid, end}}, {tangentArc:{to:[x,y], radiusMm?}} (continues the entity before it), {slot:{center, lengthMm (centre to centre), widthMm, angleDeg}}, {polygon:{center, sides, circumradiusMm | inscribedRadiusMm, angleDeg (first vertex)}}, {sketchFillet:{at:[x,y], radiusMm}} / {sketchChamfer:{at:[x,y], distanceMm}} (round or cut the corner where two LINES drawn before it meet), {offsetEntities:{fromFace:{atPointMm:[x,y,z]}, offsetMm (NEGATIVE = into the face), loops:outer|all, chain:true}} (0.11.4: a model face's outline offset into the sketch by SOLIDWORKS, the side checked; not yet run live)] — ALL in one sketch: concentric circles make a ring, a rect with circles inside makes a plate with holes. Lines and arcs must CLOSE (each end meets exactly one other within 1e-6 mm — an open contour is refused naming the gap); several closed contours are several regions. Any entity takes construction:true (never part of a profile). 0.11.0, not yet run live"},                 "sketch_rect": {"plane": "as sketch", "face": "as sketch", "widthMm": "required", "heightMm": "required", "xMm": 0, "yMm": 0, "anchor": "corner (default: xMm/yMm is the CORNER) | center", "centerMm": "[x, y] (implies center)"},                 "sketch_circle": {"plane": "as sketch", "face": "as sketch", "radiusMm": "required (or diameterMm)", "xMm": 0, "yMm": 0, "centerMm": "[x, y]"},                 "extrude": {"depthMm": "required unless throughAll", "reverse": false, "direction": "one|both|midPlane", "depth2Mm": "direction both: the other side (default = depthMm)", "midPlane": false, "throughAll": false},                 "cut": {"depthMm": "required unless throughAll", "throughAll": false, "reverse": false, "direction": "one|both|midPlane", "depth2Mm": "as extrude", "midPlane": false},                 "extrude / cut end conditions (0.11.0, not yet run live)": {"upToNext": "true — to the next face (swEndCondUpToNext 11)", "upToSurface": "{face:{atPointMm:[x,y,z]}} — to that face (swEndCondUpToSelection 10)", "offsetFromSurface": "{face:{atPointMm}, distanceMm, reverseOffset:false} — distanceMm short of that face (swEndCondOffsetFromSurface 5)", "draftDeg": "a taper, 0..90", "draftOutward": "false (default: the profile shrinks as it goes)"},+                "extrude / cut regions (0.11.4, not yet run live)": {"regionsAtMm": "[[u, v], ...] — only the sketch regions holding these points (the sketch's own coordinates): SOLIDWORKS' Selected Contours, for contours that CROSS (an offset outline and a circle). regionAtMm: [u, v] for one"},                 "revolve": {"axis": "\"x\" | \"y\" (the sketch's own axes) | {entity: i} (the sketch's i-th entity as written, 0-based: a line or centerline) | {line: [[x,y],[x,y]]} (added as a centerline)", "angleDeg": 360, "midPlane": false, "reverse": false, "_": "the profile must lie on ONE side of the axis; FeatureRevolve2. 0.11.0, not yet run live"},                 "revolve_cut": {"_": "as revolve, removing material (FeatureRevolve2 IsCut)"},                 "mirror": {"plane": "a plane name | {offsetFrom, offsetMm}", "face": "{atPointMm:[x,y,z]} — a planar face, instead of plane", "features": "\"last\" (default) | a name | [names] | \"all\" (= mirrorBody)", "mirrorBody": "true: every solid body", "_": "InsertMirrorFeature2 (features mark 1, plane mark 2, bodies mark 256). 0.11.0, not yet run live"},
tests/cswa.rs+147−4
@@ -51,12 +51,29 @@ fn a_flanged_bushing_revolved_holed_and_mirrored_weighs_what_the_closed_forms_sa     let steps = r["steps"].as_array().cloned().unwrap_or_default();     let ops: Vec<&str> = steps.iter().map(|x| x["op"].as_str().unwrap_or("")).collect();     check!(b, "revolve, hole, mirror, set_material ran in order", ops == ["new_part", "sketch", "revolve", "hole", "mirror", "set_material"], format!("{ops:?}"));-    for (i, op) in [(2, "revolve"), (3, "hole"), (4, "mirror"), (5, "set_material")] {+    // The 360 revolve and the mirror about a named plane were measured by the first+    // canary (2026-10-16, 0.11.4-rc1, cswa-09 and cswa-10 on SOLIDWORKS 2026) — so on+    // this simulated 2025 they are not live, and nothing is unmeasured.+    for (i, op) in [(2, "revolve"), (4, "mirror")] {+        let p = &steps[i]["result"]["proven"];         check!(             b,-            &format!("{op} says proven.live:false, naming its unmeasured variant"),-            steps[i]["result"]["proven"]["live"] == false && steps[i]["result"]["proven"]["unmeasured"].as_array().map(|a| !a.is_empty()).unwrap_or(false),-            s(&steps[i]["result"]["proven"])+            &format!("{op}: measured on 2026 by the canary, so not live on this simulated 2025, and nothing unmeasured"),+            p["live"] == false && p.get("unmeasured").is_none()+                && p["measuredOn"].as_array().map(|a| a.iter().any(|m| m["bridge"] == "0.11.4-rc1" && m["solidworks"] == 2026)).unwrap_or(false),+            s(p)+        );+    }+    // The plain hole and the density were measured by the first live CSWA run+    // (2026-10-15, SOLIDWORKS 2026) — not on the simulated release (2025).+    for (i, op) in [(3, "hole"), (5, "set_material")] {+        let p = &steps[i]["result"]["proven"];+        check!(+            b,+            &format!("{op}: measured on 2026 by the CSWA run, so not live on this simulated 2025, and nothing unmeasured"),+            p["live"] == false && p.get("unmeasured").is_none()+                && p["measuredOn"].as_array().map(|a| a.iter().any(|m| m["bridge"] == "0.11.2" && m["solidworks"] == 2026)).unwrap_or(false),+            s(p)         );     }     check!(b, "the sketch's lines are named as sketch.line", steps[1]["result"]["proven"]["variants"].as_array().map(|a| a.iter().any(|v| v == "sketch.line")).unwrap_or(false), s(&steps[1]["result"]["proven"]));@@ -160,3 +177,129 @@ fn the_script_help_teaches_the_cswa_ops() {         s(&r["opArgs"]["sketch"])     ); }++/// THE SPECS DO WHAT THEY SAY (0.11.4). Every spec's `exercises` list is a+/// subset of the variants its steps report — run in the simulator (which+/// classifies each step exactly as the COM host does), or, for a part only+/// SOLIDWORKS can build, classified from its parsed script. Every DERIVED key+/// is reproduced by its `derivation` (tools/cswa-check.py --derivations,+/// where python3 is installed). And a part the simulator cannot build is+/// skipped there, saying why, while the live checker runs it.+#[test]+fn every_spec_exercises_what_it_names_and_every_derived_key_reproduces() {+    let (b, _m) = boot("cswa-exercises");+    let all: Vec<Value> = swx_bridge::cswa::SPECS.iter().map(|(_, t)| serde_json::from_str(t).unwrap()).collect();+    let mut checked = 0;+    for raw in &all {+        let id = raw["id"].as_str().unwrap().to_string();+        let Some(ex) = raw.get("exercises").and_then(|e| e.as_array()) else { continue };+        let spec = swx_bridge::cswa::expand(raw, &all).unwrap();+        let mut seen: Vec<String> = Vec::new();+        if raw.get("simulatorSkips").is_some() {+            let ops = swx_bridge::script::parse(&spec["script"]).unwrap();+            for op in &ops {+                seen.extend(swx_bridge::compat::op_variants(op, &json!({})));+            }+            // A face sketch's side needs the face SOLIDWORKS picked: not claimed here.+            seen.retain(|v| !v.starts_with("sketch.face."));+            for e in ex.iter().filter_map(|e| e.as_str()).filter(|e| !e.starts_with("sketch.face.")) {+                check!(b, &format!("{id} exercises {e} (from its parsed script)"), seen.iter().any(|v| v == e), format!("{seen:?}"));+            }+        } else {+            let r = b.call("swx_run_script", json!({"script": spec["script"]}));+            check!(b, &format!("{id} builds in the simulator"), r["success"] == true, s(&r));+            for st in r["steps"].as_array().cloned().unwrap_or_default() {+                for v in st["result"]["proven"]["variants"].as_array().cloned().unwrap_or_default() {+                    seen.push(v.as_str().unwrap_or("").to_string());+                }+            }+            for e in ex.iter().filter_map(|e| e.as_str()) {+                check!(b, &format!("{id} exercises {e}"), seen.iter().any(|v| v == e), format!("{seen:?}"));+            }+            let _ = b.call("swx_close_doc", json!({"targetDocument": r["documentName"], "save": false}));+        }+        checked += 1;+    }+    check!(b, "the community specs and both Step 4 variants name what they exercise", checked >= 6, format!("{checked}"));+    // Every community spec carries a derivation, and every derivation reproduces its key.+    for raw in &all {+        if raw["id"].as_str().unwrap_or("").contains("community") {+            check!(b, "a community spec derives its key", raw["official"] == false && raw["derivation"].as_array().map(|d| !d.is_empty()).unwrap_or(false), s(raw));+        }+    }+    let out = std::process::Command::new("python3")+        .arg(std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("tools/cswa-check.py"))+        .arg("--derivations")+        .output();+    if let Ok(o) = out {+        let report: Value = serde_json::from_slice(&o.stdout).unwrap_or(Value::Null);+        check!(+            b,+            "tools/cswa-check.py --derivations reproduces every derived key (massG, volume, centre of mass)",+            o.status.success() && report.as_object().map(|m| m.len() >= 4 && m.values().all(|v| v["ok"] == true)).unwrap_or(false),+            format!("{}\n{}", String::from_utf8_lossy(&o.stdout), String::from_utf8_lossy(&o.stderr))+        );+    }+    // The part only SOLIDWORKS builds: skipped in the simulator, the reason given.+    let r = b.call("swx_selftest", json!({"level": "cswa", "only": ["cswa-08-tool-block-step4", "cswa-08b-tool-block-step4-explicit"]}));+    let rows = r["results"].as_array().cloned().unwrap_or_default();+    let main = rows.iter().find(|x| x["name"].as_str().unwrap_or("").contains("cswa-08-tool-block-step4:")).cloned().unwrap_or(Value::Null);+    check!(+        b,+        "Step 4 by Offset Entities is skipped in the simulator, saying why; the explicit variant runs and lands within the exam's 1 %",+        main["skipped"].as_str().unwrap_or("").starts_with("skipped in the simulator: Offset Entities")+            && r["cswa"]["ran"] == 1 && r["cswa"]["passed"] == 1 && r["cswa"]["skippedInSimulator"] == 1+            && r["cswa"]["summary"] == "1 of 1 CSWA parts within tolerance (1 skipped in the simulator: only SOLIDWORKS can build them)",+        s(&r["cswa"])+    );+}++/// WHICH BUILD RAN (the canary gate): tools/cswa-check.py reads the INSTALLED+/// exe back through ab's read_file in ranges and hashes it, finds the manifest+/// ab installed from (a map or a list in ~/.adom/bridge-install-urls.json), and+/// names its own report (`--report auto`) — checked here against a fake ab, in+/// python3 (skipped where it is not installed).+#[test]+fn the_live_checker_records_which_build_ran() {+    let script = r#"+import base64, hashlib, importlib.util, json, os, sys+spec = importlib.util.spec_from_file_location("cc", sys.argv[1]); cc = importlib.util.module_from_spec(spec); spec.loader.exec_module(cc)+blob = bytes(range(256)) * 9000+files = {"C:\\ab\\solidworks\\swx-bridge.exe": blob, "C:\\ab\\solidworks\\bridge.json": b'{"version":"9.9.9"}',+         "~/.adom/bridge-install-urls.json": json.dumps({"solidworks": "https://wiki.adom.inc/api/v1/pages/solidworks-bridge/files/manifests/canary.json"}).encode()}+def fake(verb, args, timeout=300):+    if verb == "bridge_info":+        return {"success": True, "version": "9.9.9", "installPath": "C:\\ab\\solidworks\\", "manifestUrl": "m", "source": "cache"}+    data = files.get(args.get("path"))+    if data is None:+        return {"success": False, "error": "no such file"}+    if args.get("encoding") == "base64":+        off, n = args.get("offset", 0), args.get("length", 1000000)+        part = data[off:off + n]+        return {"success": True, "content": base64.b64encode(part).decode(), "totalSize": len(data), "nextOffset": off + len(part), "eof": off + len(part) >= len(data)}+    return {"success": True, "content": data.decode()}+cc.call = fake+cc.wiki_json = lambda url: {"sha256": "z" * 64, "version": "9.9.9", "canary": {"rc": "9.9.9-rc1"}} if url.endswith("canary.json") else None+f = cc.bridge_facts()+assert f["exeSha256"] == hashlib.sha256(blob).hexdigest(), f+assert f["bridgeJsonSha256"] == hashlib.sha256(b'{"version":"9.9.9"}').hexdigest(), f+assert f["installedFrom"].endswith("manifests/canary.json") and f["zipSha256"] == "z" * 64 and f["canary"]["rc"] == "9.9.9-rc1", f+files["~/.adom/bridge-install-urls.json"] = json.dumps([{"name": "kicad", "manifestUrl": "k"}, {"name": "solidworks", "manifestUrl": "s"}]).encode()+assert cc.installed_from() == "s"+del files["C:\\ab\\solidworks\\swx-bridge.exe"]+f = cc.bridge_facts()+assert f["exeSha256"] is None and "read_file" in f["exeWhy"], f+p = cc.report_path("auto", {"bridgeVersion": "9.9.9"}, {"versionSupport": {"year": 2026}})+assert os.path.basename(p).startswith("cswa-") and p.endswith("-sw2026-9.9.9.json") and "tools/cswa/reports" in p.replace(os.sep, "/"), p+assert cc.report_path("mine.json", {}, {}) == "mine.json"+assert cc.wiki_json("https://example.com/not-the-wiki.json") is None+print("OK")+"#;+    let out = std::process::Command::new("python3")+        .arg("-c")+        .arg(script)+        .arg(std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("tools/cswa-check.py"))+        .output();+    let Ok(o) = out else { return };+    assert!(o.status.success() && String::from_utf8_lossy(&o.stdout).contains("OK"), "{}{}", String::from_utf8_lossy(&o.stdout), String::from_utf8_lossy(&o.stderr));+}
tests/issue1.rs+9−2
@@ -391,10 +391,16 @@ fn steps_say_what_was_measured_live_on_this_release() {     let st = r["steps"].as_array().cloned().unwrap_or_default();     let measured = json!([{"solidworks": 2026, "major": 34, "edition": "connected", "date": "2026-10-14", "bridge": "0.10.3", "by": "adom"},                           {"solidworks": 2021, "major": 29, "edition": "desktop", "date": "2026-10-15", "bridge": "0.10.9", "by": "community"}]);+    // ...and the first live CSWA run (2026-10-15, bridge 0.11.2) re-measured the+    // Top Plane rect, the boss, the circle and the typed selection (the shell's+    // faces are selected that way) — everything here but new_part.+    let mut with_cswa = measured.clone();+    with_cswa.as_array_mut().unwrap().push(json!({"solidworks": 2026, "major": 34, "edition": "connected", "date": "2026-10-15", "bridge": "0.11.2", "by": "adom"}));     check!(         b,         "measured variants are LIVE on 2026, with the measurement: new part, Top Plane rect, boss, face sketch, shell",-        [0usize, 1, 2, 3, 4, 5].iter().all(|i| st[*i]["result"]["proven"]["live"] == true && st[*i]["result"]["proven"]["measuredOn"] == measured),+        [0usize, 1, 2, 3, 4, 5].iter().all(|i| st[*i]["result"]["proven"]["live"] == true+            && st[*i]["result"]["proven"]["measuredOn"] == if *i == 0 { measured.clone() } else { with_cswa.clone() }),         s(&r)     );     check!(@@ -428,7 +434,8 @@ fn steps_say_what_was_measured_live_on_this_release() {         b,         "on 2021 the community-measured steps are live (both measurements listed); the reversed boss is live:false, measured on 2026 only — and says so",         r["success"] == true-            && [0usize, 1, 2, 3, 4, 5].iter().all(|i| st[*i]["result"]["proven"]["live"] == true && st[*i]["result"]["proven"]["measuredOn"] == measured)+            && [0usize, 1, 2, 3, 4, 5].iter().all(|i| st[*i]["result"]["proven"]["live"] == true+                && st[*i]["result"]["proven"]["measuredOn"] == if *i == 0 { measured.clone() } else { with_cswa.clone() })             && st[9]["result"]["proven"]["live"] == false             && st[9]["result"]["proven"]["why"].as_str().unwrap_or("").contains("this is SOLIDWORKS 2021"),         s(&r)
tests/regions.rsadded+132
@@ -0,0 +1,132 @@+//! OFFSET ENTITIES AND SKETCH REGIONS (0.11.4) through the whole bridge, in the+//! SIMULATOR. What the simulator can honestly model it models exactly: the+//! offset of a plain block's face (a rectangle moved in or out) and the+//! regions of profiles that nest or stand apart. Anything else — a face whose+//! outline only SOLIDWORKS knows, contours that CROSS — it refuses, saying so;+//! the CSWA Step 4 spec runs those live. Every step says proven.live:false+//! until a live run measures it.++mod common;++use common::{Bridge, TempDir};+use serde_json::{json, Value};++const PI: f64 = std::f64::consts::PI;++fn s(v: &Value) -> String {+    serde_json::to_string_pretty(v).unwrap_or_default()+}++fn boot(tag: &str) -> (Bridge, TempDir) {+    let machine = TempDir::new(tag);+    std::fs::write(machine.join("windows.json"), "[]").unwrap();+    let b = Bridge::start_with(&[("SWX_LAUNCH_FAKE_DIR", &machine.path())]);+    b.call("swx_start", json!({}));+    (b, machine)+}++fn near(a: &Value, b: f64, rel: f64) -> bool {+    a.as_f64().map(|x| (x - b).abs() <= rel * b.abs().max(1e-9)).unwrap_or(false)+}++fn volume(b: &Bridge) -> Value {+    b.call("swx_mass_properties", json!({}))["volumeMm3"].clone()+}++#[test]+fn an_offset_of_a_plain_blocks_face_is_its_rectangle_moved_in_or_out() {+    let (b, _m) = boot("regions-offset");+    let block = json!([+        {"op": "new_part"},+        {"op": "sketch_rect", "plane": "Top Plane", "widthMm": 60, "heightMm": 40, "anchor": "center"},+        {"op": "extrude", "depthMm": 20}+    ]);+    // INWARD: the top face's outline 2 mm in, cut 5 deep — a pocket 56 x 36.+    let mut script = block.as_array().unwrap().clone();+    script.push(json!({"op": "sketch", "face": {"atPointMm": [0, 20, 0]}, "entities": [{"offsetEntities": {"fromFace": {"atPointMm": [0, 20, 0]}, "offsetMm": -2}}]}));+    script.push(json!({"op": "cut", "depthMm": 5}));+    let r = b.call("swx_run_script", json!({"script": script}));+    check!(b, "the inward offset of a block's top face pockets it", r["success"] == true, s(&r));+    let sk = &r["steps"][3]["result"];+    check!(+        b,+        "the step names the offset, the side it landed on, and that the simulator drew a rectangle",+        sk["offsets"][0]["offsetEntities"]["side"] == "inward" && sk["offsets"][0]["drawn"]["side"] == "inward"+            && [(0usize, 0usize, -28.0), (0, 1, -18.0), (1, 0, 28.0), (1, 1, 18.0)].iter().all(|(i, j, want)| near(&sk["offsets"][0]["drawn"]["rectMm"][*i][*j], *want, 1e-12))+            && near(&sk["profileAreaMm2"], 56.0 * 36.0, 1e-12),+        s(sk)+    );+    check!(+        b,+        "...and is classified as an outer-loop offset, not yet measured live",+        sk["proven"]["variants"].as_array().map(|a| a.iter().any(|v| v == "sketch.offsetEntities.outer")).unwrap_or(false)+            && sk["proven"]["live"] == false,+        s(&sk["proven"])+    );+    check!(b, "the pocket removed 56 x 36 x 5 (swx_mass_properties)", near(&volume(&b), 60.0 * 40.0 * 20.0 - 56.0 * 36.0 * 5.0, 1e-6), s(&volume(&b)));+    // OUTWARD, every loop: the bottom face's outline 3 mm out, a 4-deep boss below.+    let mut script = block.as_array().unwrap().clone();+    script.push(json!({"op": "sketch", "face": {"atPointMm": [0, 0, 0]}, "entities": [{"offsetEntities": {"fromFace": {"atPointMm": [0, 0, 0]}, "offsetMm": 3, "loops": "all"}}]}));+    script.push(json!({"op": "extrude", "depthMm": 4}));+    let r = b.call("swx_run_script", json!({"script": script}));+    check!(+        b,+        "the outward offset of the bottom face is a 66 x 46 boss below it, classified as a face offset",+        r["success"] == true && near(&volume(&b), 60.0 * 40.0 * 20.0 + 66.0 * 46.0 * 4.0, 1e-6)+            && r["steps"][3]["result"]["proven"]["variants"].as_array().map(|a| a.iter().any(|v| v == "sketch.offsetEntities.face")).unwrap_or(false),+        format!("{}\n{}", s(&r), s(&volume(&b)))+    );+    // A face whose outline is SOLIDWORKS' own (a cylinder's end, a cut block)+    // is refused — the simulator never invents an outline.+    let r = b.call("swx_run_script", json!({"script": [+        {"op": "new_part"},+        {"op": "sketch_circle", "plane": "Top Plane", "radiusMm": 10},+        {"op": "extrude", "depthMm": 5},+        {"op": "sketch", "face": {"atPointMm": [0, 5, 0]}, "entities": [{"offsetEntities": {"fromFace": {"atPointMm": [0, 5, 0]}, "offsetMm": -1}}]},+        {"op": "cut", "depthMm": 1}+    ]}));+    check!(+        b,+        "an offset of a face that is not a plain block's is refused, naming why (and saying it runs live)",+        r["success"] == false && r["error"].as_str().unwrap_or("").contains("plain block") && r["error"].as_str().unwrap_or("").contains("run it live"),+        s(&r)+    );+}++#[test]+fn a_region_pick_extrudes_only_the_regions_that_hold_its_points() {+    let (b, _m) = boot("regions-pick");+    let run = |b: &Bridge, entities: Value, extrude: Value| -> Value {+        b.call("swx_run_script", json!({"script": [+            {"op": "new_part"},+            {"op": "sketch", "plane": "Front Plane", "entities": entities},+            extrude+        ]}))+    };+    let two = json!([{"rect": {"xMm": 0, "yMm": 0, "widthMm": 10, "heightMm": 10}}, {"rect": {"xMm": 20, "yMm": 0, "widthMm": 10, "heightMm": 10}}]);+    let r = run(&b, two.clone(), json!({"op": "extrude", "depthMm": 5, "regionsAtMm": [[25, 5]]}));+    check!(b, "one of two rectangles picked: only it is extruded", r["success"] == true && near(&volume(&b), 500.0, 1e-9), format!("{}\n{}", s(&r), s(&volume(&b))));+    check!(+        b,+        "the extrude is classified as a region pick (not yet measured live)",+        r["steps"][2]["result"]["proven"]["variants"] == json!(["extrude.one", "extrude.regions"]) && r["steps"][2]["result"]["proven"]["live"] == false,+        s(&r["steps"][2])+    );+    let r = run(&b, two, json!({"op": "extrude", "depthMm": 5, "regionsAtMm": [[25, 5], [5, 5]]}));+    check!(b, "both picked: both", r["success"] == true && near(&volume(&b), 1000.0, 1e-9), s(&volume(&b)));+    let ring = json!([{"circle": {"radiusMm": 10}}, {"circle": {"radiusMm": 5}}]);+    let r = run(&b, ring.clone(), json!({"op": "extrude", "depthMm": 2, "regionAtMm": [0, 0]}));+    check!(b, "a point inside the inner circle picks the DISC", r["success"] == true && near(&volume(&b), PI * 25.0 * 2.0, 1e-6), s(&volume(&b)));+    let r = run(&b, ring, json!({"op": "extrude", "depthMm": 2, "regionAtMm": [7, 0]}));+    check!(b, "a point between the circles picks the RING", r["success"] == true && near(&volume(&b), PI * 75.0 * 2.0, 1e-6), s(&volume(&b)));+    let r = run(&b, json!([{"rect": {"xMm": 0, "yMm": 0, "widthMm": 10, "heightMm": 10}}]), json!({"op": "extrude", "depthMm": 2, "regionAtMm": [50, 50]}));+    check!(b, "a point in no profile is refused, naming it", r["success"] == false && r["error"].as_str().unwrap_or("").contains("in no closed profile"), s(&r));+    let crossing = json!([{"rect": {"xMm": 0, "yMm": 0, "widthMm": 10, "heightMm": 10}}, {"circle": {"centerMm": [10, 5], "radiusMm": 4}}]);+    let r = run(&b, crossing, json!({"op": "extrude", "depthMm": 2, "regionAtMm": [2, 2]}));+    check!(+        b,+        "CROSSING contours are SOLIDWORKS' to resolve: refused in the simulator, saying so",+        r["success"] == false && r["error"].as_str().unwrap_or("").contains("CROSS") && r["error"].as_str().unwrap_or("").contains("run it live"),+        s(&r)+    );+}
tests/wiring.rs+357−2
@@ -1271,8 +1271,17 @@ fn the_live_gate_accepts_only_a_complete_passing_report_newer_than_the_code() {     let root = Path::new(env!("CARGO_MANIFEST_DIR"));     let dir = std::env::temp_dir().join(format!("swx-live-gate-{}", std::process::id()));     std::fs::create_dir_all(&dir).unwrap();-    let good = serde_json::json!({"tool": "cswa-check", "bridgeVersion": "9.9.9", "ran": 8, "passed": 8, "allPassed": true,-                                  "stopped": null, "whenEpoch": 2000, "when": "t", "summary": "8 of 8 CSWA parts within tolerance"});+    // EVERY shipped part (0.11.4): the report lists one row per spec in resources/cswa.+    let mut ids: Vec<String> = std::fs::read_dir(root.join("resources/cswa")).unwrap().filter_map(|e| e.ok())+        .filter(|e| e.file_name().to_string_lossy().ends_with(".json"))+        .map(|e| serde_json::from_str::<serde_json::Value>(&std::fs::read_to_string(e.path()).unwrap()).unwrap()["id"].as_str().unwrap().to_string())+        .collect();+    ids.sort();+    let parts: Vec<serde_json::Value> = ids.iter().map(|i| serde_json::json!({"id": i, "pass": true})).collect();+    let n = parts.len();+    let good = serde_json::json!({"tool": "cswa-check", "bridgeVersion": "9.9.9", "ran": n, "passed": n, "allPassed": true,+                                  "stopped": null, "whenEpoch": 2000, "when": "t", "summary": format!("{n} of {n} CSWA parts within tolerance"),+                                  "parts": parts});     let run = |name: &str, report: &serde_json::Value, ver: &str, code_at: &str| -> Option<bool> {         let p = dir.join(name);         std::fs::write(&p, report.to_string()).unwrap();@@ -1296,7 +1305,353 @@ fn the_live_gate_accepts_only_a_complete_passing_report_newer_than_the_code() {     assert_eq!(run("none.json", &with("ran", serde_json::json!(0)), "9.9.9", "1000"), Some(false), "a run of nothing is refused");     assert_eq!(run("stop.json", &with("stopped", serde_json::json!("user_present")), "9.9.9", "1000"), Some(false), "a stopped run is refused");     assert_eq!(run("tool.json", &with("tool", serde_json::json!("dsl-live-check")), "9.9.9", "1000"), Some(false), "another tool's report is refused");+    // A PARTIAL run (--only) proves nothing about the parts it left out (0.11.4)...+    let mut partial = good.clone();+    partial["parts"].as_array_mut().unwrap().pop();+    partial["ran"] = serde_json::json!(n - 1);+    partial["passed"] = serde_json::json!(n - 1);+    assert_eq!(run("partial.json", &partial, "9.9.9", "1000"), Some(false), "a run that left a shipped part out is refused");+    // ...and a part may be skipped only for an op the bridge lacks.+    let mut skipped = good.clone();+    skipped["parts"][0] = serde_json::json!({"id": ids[0], "skipped": "skipped in the simulator: only SOLIDWORKS can build it"});+    skipped["ran"] = serde_json::json!(n - 1);+    skipped["passed"] = serde_json::json!(n - 1);+    assert_eq!(run("skipped.json", &skipped, "9.9.9", "1000"), Some(false), "a part skipped for any other reason is refused");+    skipped["parts"][0] = serde_json::json!({"id": ids[0], "skipped": "needs ops the bridge does not have yet: loft"});+    assert_eq!(run("needs.json", &skipped, "9.9.9", "1000"), Some(true), "a part needing an op the bridge lacks may be skipped");     let missing = std::process::Command::new("python3").arg(root.join("tools/check-live-report.py")).args([dir.join("nope.json").to_string_lossy().as_ref(), "9.9.9", "0"]).output().unwrap();     assert!(!missing.status.success(), "no report, no release");     let _ = std::fs::remove_dir_all(&dir); }++/// EVERY PUBLISH IS PROVEN LIVE (0.11.4): `release.sh --publish` REFUSES+/// without `--require-live <report>` unless `--docs-only`, which+/// tools/check-docs-only.py allows only when nothing the bridge runs changed+/// since the last publish (src/, resources/ — untracked files included — and+/// Cargo.toml / Cargo.lock beyond the package's own version); the changelog+/// of a docs-only release says the live gate was skipped. Run for real in a+/// scratch copy, with a stub `adom-wiki` that fails if it is ever reached and+/// no exe to ship. (Skipped where bash, git or python3 is missing.)+#[test]+fn a_publish_without_a_live_report_is_refused_unless_it_is_docs_only() {+    let root = Path::new(env!("CARGO_MANIFEST_DIR"));+    let sh = std::fs::read_to_string(root.join("tools/release.sh")).unwrap();+    let refuse = sh.find("--publish needs --require-live").expect("the refusal");+    let docs = sh.find("tools/check-docs-only.py").expect("the docs-only gate");+    let build = sh.find("zip -qr").unwrap();+    let publish = sh.find("if [ \"$PUBLISH\" = 1 ]; then").unwrap();+    assert!(refuse < build && docs < build && refuse < publish && docs < publish, "both gates run before anything is built or published");+    let block = &sh[publish..];+    assert!(block.contains("Docs-only release: no code changed since $LAST_VER") && block.find("Docs-only release").unwrap() < block.find("adom-wiki release create").unwrap(),+            "a docs-only release says so in its changelog, before the release is created");+    let have = |tool: &str| std::process::Command::new(tool).arg("--version").output().map(|o| o.status.success()).unwrap_or(false);+    if !(have("bash") && have("git") && have("python3")) {+        return;+    }+    let dir = std::env::temp_dir().join(format!("swx-release-gate-{}", std::process::id()));+    let _ = std::fs::remove_dir_all(&dir);+    std::fs::create_dir_all(dir.join("tools")).unwrap();+    std::fs::create_dir_all(dir.join("bin")).unwrap();+    std::fs::create_dir_all(dir.join("src")).unwrap();+    std::fs::create_dir_all(dir.join("resources")).unwrap();+    for t in ["release.sh", "check-docs-only.py", "check-live-report.py"] {+        std::fs::copy(root.join("tools").join(t), dir.join("tools").join(t)).unwrap();+    }+    let stub = dir.join("bin/adom-wiki");+    std::fs::write(&stub, "#!/bin/sh\necho STUB-ADOM-WIKI-REACHED; exit 99\n").unwrap();+    #[cfg(unix)]+    {+        use std::os::unix::fs::PermissionsExt;+        std::fs::set_permissions(&stub, std::fs::Permissions::from_mode(0o755)).unwrap();+    }+    std::fs::write(dir.join("BRIDGE_VERSION"), "9.9.9\n").unwrap();+    std::fs::write(dir.join("src/a.rs"), "fn a() {}\n").unwrap();+    std::fs::write(dir.join("resources/r.txt"), "r\n").unwrap();+    std::fs::write(dir.join("adom-bridge-solidworks-manifest.json"), "{\"version\": \"9.9.8\"}\n").unwrap();+    std::fs::write(dir.join("Cargo.toml"), "[package]\nname = \"swx-bridge\"\nversion = \"9.9.8\"\n\n[dependencies]\nserde = \"1\"\n").unwrap();+    let git = |args: &[&str]| {+        let o = std::process::Command::new("git").args(args).current_dir(&dir).output().unwrap();+        assert!(o.status.success(), "git {args:?}: {}", String::from_utf8_lossy(&o.stderr));+    };+    git(&["init", "-q"]);+    git(&["config", "user.email", "[email protected]"]);+    git(&["config", "user.name", "t"]);+    git(&["add", "-A"]);+    git(&["commit", "-qm", "manifest: 9.9.8 as published"]);+    let path = format!("{}:{}", dir.join("bin").display(), std::env::var("PATH").unwrap_or_default());+    let run = |args: &[&str]| -> (bool, String) {+        let o = std::process::Command::new("bash").arg("tools/release.sh").args(args).current_dir(&dir).env("PATH", &path).output().unwrap();+        let text = format!("{}{}", String::from_utf8_lossy(&o.stdout), String::from_utf8_lossy(&o.stderr));+        assert!(!text.contains("STUB-ADOM-WIKI-REACHED"), "release.sh {args:?} reached the wiki:\n{text}");+        (o.status.success(), text)+    };+    let (ok, out) = run(&["--publish"]);+    assert!(!ok && out.contains("--publish needs --require-live") && out.contains("Nothing was built or published"), "a bare --publish is refused:\n{out}");+    let (ok, out) = run(&["--publish", "--docs-only", "--require-live", "r.json"]);+    assert!(!ok && out.contains("pick one"), "docs-only with a live report is a contradiction:\n{out}");+    // A plain build passes the gate (and stops at the missing exe).+    let (ok, out) = run(&[]);+    assert!(!ok && out.contains("swx-bridge.exe missing") && !out.contains("--require-live <report.json>"), "a plain build needs no live report:\n{out}");+    // A version bump and a doc are docs-only; the gate passes (and the build stops at the exe).+    std::fs::write(dir.join("Cargo.toml"), "[package]\nname = \"swx-bridge\"\nversion = \"9.9.9\"\n\n[dependencies]\nserde = \"1\"\n").unwrap();+    std::fs::write(dir.join("README.md"), "docs\n").unwrap();+    let (ok, out) = run(&["--publish", "--docs-only"]);+    assert!(!ok && out.contains("docs-only OK") && out.contains("swx-bridge.exe missing"), "a version bump and a doc are docs-only:\n{out}");+    // Code is not docs: a source edit, a new resource, a dependency.+    let refused = |what: &str, out: &str| assert!(out.contains("NOT docs-only") && out.contains("publish with --require-live") && !out.contains("swx-bridge.exe missing"), "{what} must be refused:\n{out}");+    std::fs::write(dir.join("src/a.rs"), "fn a() { let _ = 1; }\n").unwrap();+    let (ok, out) = run(&["--publish", "--docs-only"]);+    assert!(!ok && out.contains("src/a.rs changed"));+    refused("a source edit", &out);+    git(&["checkout", "-q", "src/a.rs"]);+    std::fs::write(dir.join("resources/new.json"), "{}\n").unwrap();+    let (ok, out) = run(&["--publish", "--docs-only"]);+    assert!(!ok && out.contains("resources/new.json is new"));+    refused("an untracked resource (it would ship)", &out);+    std::fs::remove_file(dir.join("resources/new.json")).unwrap();+    std::fs::write(dir.join("Cargo.toml"), "[package]\nname = \"swx-bridge\"\nversion = \"9.9.9\"\n\n[dependencies]\nserde = \"2\"\n").unwrap();+    let (ok, out) = run(&["--publish", "--docs-only"]);+    assert!(!ok && out.contains("Cargo.toml changed beyond the package's own version"));+    refused("a dependency change", &out);+    let _ = std::fs::remove_dir_all(&dir);+}++/// THE CANARY IS WHAT SHIPS (the canary flow, after 0.11.4). Only a PUBLISHED+/// build reaches the test machine, so `release.sh --canary` publishes the build+/// as a release CANDIDATE no one else gets: a release `<ver>-rc<N>` and the+/// page file `manifests/canary.json`, committed, which records the code commit+/// and the exe inside the zip. `--require-live <report> --publish` then+/// publishes THAT zip byte for byte, and only when the report says it ran that+/// exe (read back from the installed copy) and no code changed since. Run for+/// real in a scratch repo whose PATH cannot reach the real `adom-wiki`: a stub+/// records every call and plays the page. (Skipped where bash, git, python3,+/// zip or unzip is missing.)+#[test]+fn a_canary_is_staged_for_the_test_machine_and_the_publish_promotes_exactly_it() {+    use sha2_free::sha256_hex;+    let root = Path::new(env!("CARGO_MANIFEST_DIR"));+    let have = |tool: &str| std::process::Command::new("bash").args(["-c", &format!("PATH=/usr/bin:/bin command -v {tool}")]).output().map(|o| o.status.success()).unwrap_or(false);+    if !(have("bash") && have("git") && have("python3") && have("zip") && have("unzip") && have("sha256sum")) {+        eprintln!("skipped: a tool the release script needs is not in /usr/bin:/bin");+        return;+    }+    let dir = std::env::temp_dir().join(format!("swx-canary-{}", std::process::id()));+    let _ = std::fs::remove_dir_all(&dir);+    for d in ["tools", "bin", "src", "resources", "target/x86_64-pc-windows-gnu/release", "pagefiles", "rc-assets", "out"] {+        std::fs::create_dir_all(dir.join(d)).unwrap();+    }+    for t in ["release.sh", "check-docs-only.py", "check-live-report.py"] {+        std::fs::copy(root.join("tools").join(t), dir.join("tools").join(t)).unwrap();+    }+    let write = |p: &str, s: &str| std::fs::write(dir.join(p), s).unwrap();+    write("tools/sync-page.py", "import sys\nsys.exit(0)\n");+    write("tools/verify-wiki.py", "import sys\nprint('verify stub', sys.argv[1:])\nsys.exit(0)\n");+    // The stub wiki: logs every call; `repo push` of the canary "serves" it;+    // `api` serves it back; `release upload` stores the asset, `release download` hands it out.+    let log = dir.join("wiki.log");+    write(+        "bin/adom-wiki",+        &format!(+            "#!/bin/bash\nD='{d}'\necho \"$*\" >> \"$D/wiki.log\"\ncase \"$1 $2\" in\n\+             'repo push') [ -f \"$D/stale-page\" ] && exit 0; for f in \"$@\"; do [ \"$f\" = manifests/canary.json ] && cp manifests/canary.json \"$D/pagefiles/canary.json\"; done; exit 0 ;;\n\+             'api '*) [ -f \"$D/pagefiles/canary.json\" ] && cat \"$D/pagefiles/canary.json\" && exit 0; exit 1 ;;\n\+             'release upload') cp \"$5\" \"$D/rc-assets/$4.zip\"; exit 0 ;;\n\+             'release download') out=\"\"; prev=\"\"; for a in \"$@\"; do [ \"$prev\" = --out ] && out=\"$a\"; prev=\"$a\"; done; \+             [ -f \"$D/rc-assets/$4.zip\" ] && cp \"$D/rc-assets/$4.zip\" \"$out\"; exit 0 ;;\n\+             *) exit 0 ;;\nesac\n",+            d = dir.display()+        ),+    );+    #[cfg(unix)]+    {+        use std::os::unix::fs::PermissionsExt;+        std::fs::set_permissions(dir.join("bin/adom-wiki"), std::fs::Permissions::from_mode(0o755)).unwrap();+    }+    write("BRIDGE_VERSION", "9.9.9\n");+    write("bridge.json", "{\"name\": \"solidworks\", \"version\": \"9.9.9\"}\n");+    write("LICENSE", "MIT\n");+    write("package.json", "{\"version\": \"9.9.9\"}\n");+    write("page.json", "{}\n");+    write("resources/r.txt", "r\n");+    write("src/a.rs", "fn a() {}\n");+    write("Cargo.toml", "[package]\nname = \"swx-bridge\"\nversion = \"9.9.9\"\n");+    write(".gitignore", "/dist/\n/target/\n/out/\n/pagefiles/\n/rc-assets/\n/bin/\nwiki.log\n");+    let main_url = "https://wiki.adom.inc/api/v1/pages/solidworks-bridge/files/adom-bridge-solidworks-manifest.json";+    write("adom-bridge-solidworks-manifest.json", &format!("{{\"manifest_version\": 1, \"name\": \"solidworks\", \"version\": \"9.9.8\", \"url\": \"u\", \"sha256\": \"s\", \"size\": 1, \"updateManifestUrl\": \"{main_url}\"}}\n"));+    std::thread::sleep(std::time::Duration::from_millis(1100));+    write("target/x86_64-pc-windows-gnu/release/swx-bridge.exe", "EXE-v1");+    let exe_sha = sha256_hex(b"EXE-v1");+    let git = |args: &[&str]| {+        let o = std::process::Command::new("git").args(args).current_dir(&dir).output().unwrap();+        assert!(o.status.success(), "git {args:?}: {}", String::from_utf8_lossy(&o.stderr));+        String::from_utf8_lossy(&o.stdout).trim().to_string()+    };+    git(&["init", "-q"]);+    git(&["config", "user.email", "[email protected]"]);+    git(&["config", "user.name", "t"]);+    git(&["add", "-A"]);+    git(&["commit", "-qm", "manifest: 9.9.8 as published"]);+    let code_commit = git(&["log", "-1", "--format=%H", "--", "src", "resources", "Cargo.toml"]);+    // ONLY the stub can be reached: ~/.local/bin (the real adom-wiki) is not on this PATH.+    let path = format!("{}:/usr/bin:/bin", dir.join("bin").display());+    let which = std::process::Command::new("bash").args(["-c", "command -v adom-wiki"]).env("PATH", &path).output().unwrap();+    assert_eq!(String::from_utf8_lossy(&which.stdout).trim(), dir.join("bin/adom-wiki").display().to_string(), "the stub, and only the stub, is adom-wiki");+    let run = |args: &[&str]| -> (bool, String) {+        let o = std::process::Command::new("bash").arg("tools/release.sh").args(args).current_dir(&dir).env("PATH", &path).output().unwrap();+        (o.status.success(), format!("{}{}", String::from_utf8_lossy(&o.stdout), String::from_utf8_lossy(&o.stderr)))+    };+    let wiki = || std::fs::read_to_string(&log).unwrap_or_default();+    // ── THE CANARY ──+    let (ok, out) = run(&["--canary"]);+    assert!(ok, "--canary stages the candidate:\n{out}\n{}", wiki());+    let calls = wiki();+    let at = |needle: &str| calls.find(needle).unwrap_or_else(|| panic!("no {needle:?} in the wiki calls:\n{calls}"));+    assert!(at("release create adom/solidworks-bridge 9.9.9-rc1") < at("release upload adom/solidworks-bridge 9.9.9-rc1 dist/swx-bridge-v9.9.9.zip --platform any"));+    assert!(at("release upload adom/solidworks-bridge 9.9.9-rc1") < at("release verify adom/solidworks-bridge 9.9.9-rc1"));+    assert!(at("release verify") < at("repo push adom/solidworks-bridge --files manifests/canary.json"));+    let canary: serde_json::Value = serde_json::from_str(&std::fs::read_to_string(dir.join("manifests/canary.json")).unwrap()).unwrap();+    let zip_sha = sha256_hex(&std::fs::read(dir.join("dist/swx-bridge-v9.9.9.zip")).unwrap());+    assert_eq!(canary["version"], "9.9.9");+    assert_eq!(canary["url"], "https://wiki.adom.inc/download/adom/solidworks-bridge/9.9.9-rc1/swx-bridge-v9.9.9.zip");+    assert_eq!(canary["sha256"], zip_sha.as_str());+    assert_eq!(canary["updateManifestUrl"], main_url, "the canary never pins the test machine: it points at the main manifest");+    assert_eq!(canary["canary"]["rc"], "9.9.9-rc1");+    assert_eq!(canary["canary"]["codeCommit"], code_commit.as_str());+    assert_eq!(canary["canary"]["exeSha256"], exe_sha.as_str());+    assert_eq!(git(&["log", "-1", "--format=%s"]), format!("canary: 9.9.9-rc1 (sha256 {}…, {} bytes)", &zip_sha[..8], canary["size"]), "the canary is committed");+    assert!(git(&["status", "--porcelain"]).is_empty(), "and leaves the tree clean: the main manifest untouched");+    assert!(out.contains("bridge_install '{\"manifestUrl\":\"https://wiki.adom.inc/api/v1/pages/solidworks-bridge/files/manifests/canary.json\"}'")+        && out.contains("python3 tools/cswa-check.py --target adom_drew2 --report auto")+        && out.contains("tools/release.sh --require-live"), "it prints the install, the live check and the publish:\n{out}");+    // A second canary of the same version is the next candidate.+    std::fs::write(&log, "").unwrap();+    let (ok, out) = run(&["--canary"]);+    assert!(ok && wiki().contains("release create adom/solidworks-bridge 9.9.9-rc2"), "the next candidate is rc2:\n{out}\n{}", wiki());+    let canary: serde_json::Value = serde_json::from_str(&std::fs::read_to_string(dir.join("manifests/canary.json")).unwrap()).unwrap();+    assert_eq!(canary["canary"]["rc"], "9.9.9-rc2");+    // --canary publishes nothing else, and records only what is committed.+    let (ok, out) = run(&["--canary", "--publish"]);+    assert!(!ok && out.contains("run it alone"), "{out}");+    std::fs::write(dir.join("resources/r.txt"), "r2\n").unwrap();+    std::fs::write(&log, "").unwrap();+    let (ok, out) = run(&["--canary"]);+    assert!(!ok && out.contains("uncommitted changes to what the canary would hold") && !wiki().contains("release create"), "{out}");+    git(&["checkout", "-q", "resources/r.txt"]);+    // ── THE PUBLISH PROMOTES IT ──+    let report = |exe: Option<&str>, zip: Option<&str>| {+        let mut r = serde_json::json!({"tool": "cswa-check", "bridgeVersion": "9.9.9", "ran": 1, "passed": 1, "allPassed": true, "stopped": null,+                                       "whenEpoch": 4_000_000_000u64, "when": "later", "summary": "1 of 1 CSWA parts within tolerance", "parts": []});+        if let Some(e) = exe {+            r["bridge"] = serde_json::json!({"exeSha256": e, "zipSha256": zip});+        }+        let p = dir.join("out").join(format!("report-{}.json", exe.map(|e| &e[..6]).unwrap_or("none")));+        std::fs::write(&p, r.to_string()).unwrap();+        p.display().to_string()+    };+    let rc2_sha = canary["sha256"].as_str().unwrap().to_string();+    let refused = |what: &str, args: &[&str], needle: &str| {+        std::fs::write(&log, "").unwrap();+        let (ok, out) = run(args);+        assert!(!ok && out.contains(needle), "{what} must be refused ({needle:?}):\n{out}");+        assert!(!wiki().contains("release create adom/solidworks-bridge 9.9.9 "), "{what}: nothing was published:\n{}", wiki());+    };+    refused("a report of another exe", &["--require-live", &report(Some(&"0".repeat(64)), None), "--publish"], "not the one being published");+    refused("a report that does not say which build it ran", &["--require-live", &report(None, None), "--publish"], "does not say which build it ran");+    refused("a report installed from another zip", &["--require-live", &report(Some(&exe_sha), Some(&"1".repeat(64))), "--publish"], "not the canary being published");+    // Code committed after the canary: the canary is stale.+    std::fs::write(dir.join("src/a.rs"), "fn a() { let _ = 2; }\n").unwrap();+    git(&["commit", "-qam", "a code change after the canary"]);+    refused("a canary older than the code", &["--require-live", &report(Some(&exe_sha), Some(&rc2_sha)), "--publish"], "the code changed since the canary 9.9.9-rc2");+    git(&["reset", "-q", "--hard", "HEAD~1"]);+    // A canary of another version, and a canary whose record names another exe.+    std::fs::write(dir.join("BRIDGE_VERSION"), "9.9.10\n").unwrap();+    refused("a canary of another version", &["--require-live", &report(Some(&exe_sha), Some(&rc2_sha)), "--publish"], "the canary is 9.9.9-rc2 (version 9.9.9), not 9.9.10");+    std::fs::write(dir.join("BRIDGE_VERSION"), "9.9.9\n").unwrap();+    let real = std::fs::read_to_string(dir.join("manifests/canary.json")).unwrap();+    std::fs::write(dir.join("manifests/canary.json"), real.replace(&exe_sha, &"2".repeat(64))).unwrap();+    refused("a canary record that names another exe", &["--require-live", &report(Some(&exe_sha), Some(&rc2_sha)), "--publish"], "the canary record names exe");+    std::fs::write(dir.join("manifests/canary.json"), &real).unwrap();+    // The zip on disk is not the canary's, and the wiki cannot hand it back.+    let good_zip = std::fs::read(dir.join("rc-assets/9.9.9-rc2.zip")).unwrap();+    assert_eq!(sha256_hex(&good_zip), rc2_sha, "the stub kept the uploaded candidate");+    std::fs::write(dir.join("dist/swx-bridge-v9.9.9.zip"), b"tampered").unwrap();+    std::fs::remove_file(dir.join("rc-assets/9.9.9-rc2.zip")).unwrap();+    refused("a zip that is not the canary's", &["--require-live", &report(Some(&exe_sha), Some(&rc2_sha)), "--publish"], "neither in dist/ nor downloadable intact");+    // ...but the canary's own asset, downloaded, is.+    std::fs::write(dir.join("rc-assets/9.9.9-rc2.zip"), &good_zip).unwrap();+    std::fs::write(&log, "").unwrap();+    let (ok, out) = run(&["--require-live", &report(Some(&exe_sha), Some(&rc2_sha)), "--publish"]);+    assert!(ok, "a passing live report of the canary publishes it:\n{out}\n{}", wiki());+    assert!(out.contains("PROMOTING the canary 9.9.9-rc2") && out.contains("downloading 9.9.9-rc2"), "{out}");+    assert_eq!(sha256_hex(&std::fs::read(dir.join("dist/swx-bridge-v9.9.9.zip")).unwrap()), rc2_sha, "NO REBUILD: the zip that ships is the canary's, byte for byte");+    let calls = wiki();+    assert!(calls.contains("release create adom/solidworks-bridge 9.9.9 ") && calls.contains("release upload adom/solidworks-bridge 9.9.9 dist/swx-bridge-v9.9.9.zip --platform any"), "{calls}");+    let man: serde_json::Value = serde_json::from_str(&std::fs::read_to_string(dir.join("adom-bridge-solidworks-manifest.json")).unwrap()).unwrap();+    assert_eq!(man["sha256"], rc2_sha.as_str(), "the main manifest names the canary's bytes");+    assert_eq!(man["url"], "https://wiki.adom.inc/download/adom/solidworks-bridge/9.9.9/swx-bridge-v9.9.9.zip");+    assert_eq!(git(&["log", "-1", "--format=%s"]), format!("manifest: 9.9.9 as published (sha256 {}…, {} bytes)", &rc2_sha[..8], good_zip.len()));+    assert!(out.contains(&format!("bridge_install '{{\"manifestUrl\":\"{main_url}\"}}'")), "it says how to re-point the test machine if it is still on the canary:\n{out}");+    // A page that does not serve the canary just pushed is caught on the read-back.+    // (The exe is rebuilt first: the reset above rewrote src/a.rs, newer than it.)+    std::thread::sleep(std::time::Duration::from_millis(1100));+    std::fs::write(dir.join("target/x86_64-pc-windows-gnu/release/swx-bridge.exe"), "EXE-v1").unwrap();+    std::fs::write(dir.join("stale-page"), "").unwrap();+    std::fs::write(&log, "").unwrap();+    let (ok, out) = run(&["--canary"]);+    assert!(!ok && out.contains("ERROR: the page does not serve this canary"), "a stale page must fail the canary:\n{out}");+    let _ = std::fs::remove_dir_all(&dir);+}++/// A small, dependency-free sha256 for the canary test (the crate has no+/// sha2 dependency): the reference algorithm, FIPS 180-4.+mod sha2_free {+    pub fn sha256_hex(data: &[u8]) -> String {+        const K: [u32; 64] = [+            0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be,+            0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa,+            0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85,+            0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,+            0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,+            0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,+        ];+        let mut h: [u32; 8] = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19];+        let mut msg = data.to_vec();+        let bits = (data.len() as u64).wrapping_mul(8);+        msg.push(0x80);+        while msg.len() % 64 != 56 {+            msg.push(0);+        }+        msg.extend_from_slice(&bits.to_be_bytes());+        for chunk in msg.chunks(64) {+            let mut w = [0u32; 64];+            for i in 0..16 {+                w[i] = u32::from_be_bytes([chunk[4 * i], chunk[4 * i + 1], chunk[4 * i + 2], chunk[4 * i + 3]]);+            }+            for i in 16..64 {+                let s0 = w[i - 15].rotate_right(7) ^ w[i - 15].rotate_right(18) ^ (w[i - 15] >> 3);+                let s1 = w[i - 2].rotate_right(17) ^ w[i - 2].rotate_right(19) ^ (w[i - 2] >> 10);+                w[i] = w[i - 16].wrapping_add(s0).wrapping_add(w[i - 7]).wrapping_add(s1);+            }+            let mut v = h;+            for i in 0..64 {+                let s1 = v[4].rotate_right(6) ^ v[4].rotate_right(11) ^ v[4].rotate_right(25);+                let ch = (v[4] & v[5]) ^ (!v[4] & v[6]);+                let t1 = v[7].wrapping_add(s1).wrapping_add(ch).wrapping_add(K[i]).wrapping_add(w[i]);+                let s0 = v[0].rotate_right(2) ^ v[0].rotate_right(13) ^ v[0].rotate_right(22);+                let maj = (v[0] & v[1]) ^ (v[0] & v[2]) ^ (v[1] & v[2]);+                let t2 = s0.wrapping_add(maj);+                v = [t1.wrapping_add(t2), v[0], v[1], v[2], v[3].wrapping_add(t1), v[4], v[5], v[6]];+            }+            for i in 0..8 {+                h[i] = h[i].wrapping_add(v[i]);+            }+        }+        h.iter().map(|x| format!("{x:08x}")).collect()+    }++    #[test]+    fn the_test_sha256_is_the_real_one() {+        assert_eq!(sha256_hex(b""), "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");+        assert_eq!(sha256_hex(b"abc"), "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad");+    }+}
tools/check-docs-only.pyadded+80
@@ -0,0 +1,80 @@+#!/usr/bin/env python3+"""check-docs-only.py [<since>] - the gate behind tools/release.sh --publish --docs-only (0.11.4).++A docs-only release skips the live CSWA gate, so it may change NOTHING the bridge runs. Exit 0 only when,+since <since> (default: the last commit that touched the release manifest = the last publish), nothing+changed in src/ or resources/ (committed, uncommitted or untracked: resources/ ships in the zip as it is+on disk), and Cargo.toml / Cargo.lock changed in nothing but THIS package's own version (the bump every+release makes; a dependency's version is code). Prints every offending path.+"""+import re, subprocess, sys++MAN = "adom-bridge-solidworks-manifest.json"+CODE = ["src", "resources"]+++def git(*args, ok=False):+    r = subprocess.run(["git", *args], capture_output=True, text=True)+    if r.returncode != 0:+        if ok:+            return None+        raise SystemExit(f"  git {' '.join(args)} failed: {r.stderr.strip()}")+    return r.stdout+++def package_name(toml):+    m = re.search(r'^\[package\]\s*$(.*?)(?=^\[|\Z)', toml, re.M | re.S)+    n = m and re.search(r'^name\s*=\s*"([^"]*)"', m.group(1), re.M)+    return n.group(1) if n else None+++def without_own_version(name, text, pkg):+    """The file with this package's own version line blanked out."""+    if name == "Cargo.toml":+        def blank(m):+            return re.sub(r'^version\s*=\s*"[^"]*"\s*$', 'version = "<own>"', m.group(0), count=1, flags=re.M)+        return re.sub(r'^\[package\]\s*$.*?(?=^\[|\Z)', blank, text, count=1, flags=re.M | re.S)+    # Cargo.lock: the version line right after `name = "<pkg>"`.+    return re.sub(r'(^name = "' + re.escape(pkg or "") + r'"\nversion = )"[^"]*"', r'\1"<own>"', text, count=1, flags=re.M)+++def offending(since):+    bad = []+    # Working tree against <since>: committed AND uncommitted changes.+    for path in git("diff", "--name-only", since, "--", *CODE).split():+        bad.append(f"{path} changed since {since[:8]}")+    for path in git("ls-files", "--others", "--exclude-standard", "--", *CODE).split():+        bad.append(f"{path} is new (untracked) - resources/ ships in the zip as it is on disk")+    pkg = package_name(open("Cargo.toml").read()) if __import__("os").path.isfile("Cargo.toml") else None+    for name in ("Cargo.toml", "Cargo.lock"):+        old = git("show", f"{since}:{name}", ok=True)+        try:+            new = open(name).read()+        except OSError:+            new = None+        if old is None and new is None:+            continue+        if old is None or new is None:+            bad.append(f"{name} was {'added' if old is None else 'removed'} since {since[:8]}")+        elif without_own_version(name, old, pkg) != without_own_version(name, new, pkg):+            bad.append(f"{name} changed beyond the package's own version since {since[:8]}")+    return bad+++def main(argv):+    since = argv[1] if len(argv) > 1 else git("log", "-1", "--format=%H", "--", MAN).strip()+    if not since:+        print(f"  no commit has touched {MAN} - nothing was ever published to compare with")+        return 1+    bad = offending(since)+    for b in bad:+        print("  " + b)+    if bad:+        print(f"NOT docs-only: the bridge's code changed since {since[:8]} - publish with --require-live <cswa-check report>")+        return 1+    print(f"docs-only OK: nothing in src/ or resources/, and nothing in Cargo.toml / Cargo.lock but the version, changed since {since[:8]}")+    return 0+++if __name__ == "__main__":+    sys.exit(main(sys.argv))
tools/check-live-report.py+53−10
@@ -1,12 +1,26 @@ #!/usr/bin/env python3-"""check-live-report.py <report.json> <version> <last-code-commit-epoch> - the gate behind-tools/release.sh --require-live (0.11.0). Exit 0 only for a tools/cswa-check.py report that ran every-CSWA part and passed them all, was made by THIS bridge version, did not stop, and is NEWER than the-last commit that touched code."""-import json, os, sys+"""check-live-report.py <report.json> <version> <last-code-commit-epoch> [--exe-sha <sha256>] [--zip-sha <sha256>]+- the gate behind tools/release.sh --require-live (0.11.0). +Exit 0 only for a tools/cswa-check.py report that ran every CSWA part and passed them all, was made by THIS+bridge version, did not stop, and is NEWER than the last commit that touched code. EVERY part means every spec+shipped in resources/cswa/ (0.11.4): a run narrowed with --only proves nothing about the parts it left out, and a+part may be skipped only for the reason the checker gives a part that needs an op the bridge lacks. -def problems(r, ver, code_at):+WHICH BUILD RAN (the canary gate): with --exe-sha, the report must say (report.bridge.exeSha256, read back from the+test machine's INSTALLED exe by cswa-check) that it ran exactly that exe - the one inside the zip being published.+With --zip-sha, a report that names the zip it was installed from (report.bridge.zipSha256) must name that zip.+"""+import glob, json, os, sys++ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))+++def shipped_ids(root=ROOT):+    return sorted(json.load(open(p))["id"] for p in glob.glob(os.path.join(root, "resources", "cswa", "*.json")))+++def problems(r, ver, code_at, shipped=None, exe_sha=None, zip_sha=None):     bad = []     if r.get("tool") != "cswa-check":         bad.append(f"it is not a cswa-check report (tool={r.get('tool')!r})")@@ -20,24 +34,53 @@ def problems(r, ver, code_at):         bad.append(f"the run STOPPED ({r.get('stopped')})")     if int(r.get("whenEpoch") or 0) <= code_at:         bad.append(f"it is OLDER than the last code commit ({r.get('when')} vs epoch {code_at})")+    if shipped is not None:+        parts = {p.get("id"): p for p in r.get("parts") or [] if isinstance(p, dict)}+        missing = [i for i in shipped if i not in parts]+        if missing:+            bad.append(f"it did not run {len(missing)} of the {len(shipped)} shipped parts ({', '.join(missing)}): a partial run (--only?) proves nothing about them")+        for i, p in parts.items():+            why = p.get("skipped")+            if why and not str(why).startswith("needs ops the bridge does not have yet"):+                bad.append(f"{i} was skipped ({why}) - only a part needing an op the bridge lacks may be")+    b = r.get("bridge") if isinstance(r.get("bridge"), dict) else {}+    if exe_sha:+        got = b.get("exeSha256")+        if not got:+            bad.append("it does not say which build it ran (no bridge.exeSha256: a cswa-check older than the canary gate, or ab "+                       f"could not read the installed exe back: {b.get('exeWhy') or b.get('why') or 'no bridge facts'}) - re-run tools/cswa-check.py")+        elif got.lower() != exe_sha.lower():+            bad.append(f"it ran exe {got[:12]}…, not the one being published ({exe_sha[:12]}…): install the canary on the test machine and run it again")+    if zip_sha and b.get("zipSha256") and b["zipSha256"].lower() != zip_sha.lower():+        bad.append(f"it was installed from zip {b['zipSha256'][:12]}…, not the canary being published ({zip_sha[:12]}…)")     return bad   def main(argv):-    if len(argv) != 4:+    args, opts = [], {}+    it = iter(argv[1:])+    for a in it:+        if a in ("--exe-sha", "--zip-sha"):+            opts[a] = next(it, "")+        else:+            args.append(a)+    if len(args) != 3:         print(__doc__)         return 2-    path, ver, code_at = argv[1], argv[2], int(argv[3] or 0)+    path, ver, code_at = args[0], args[1], int(args[2] or 0)     if not os.path.isfile(path):         print(f"  the report {path} does not exist")         return 1     r = json.load(open(path))-    bad = problems(r, ver, code_at)+    bad = problems(r, ver, code_at, shipped_ids(), opts.get("--exe-sha") or None, opts.get("--zip-sha") or None)     for b in bad:         print("  " + b)     if bad:         return 1-    print(f"live CSWA report OK: {r.get('summary')} on SOLIDWORKS {(r.get('solidworks') or {}).get('majorVersion')}, {r.get('when')}")+    which = ""+    if opts.get("--exe-sha"):+        which = f"; it ran exe {opts['--exe-sha'][:12]}…, the one being published"+    print(f"live CSWA report OK: {r.get('summary')} on SOLIDWORKS {(r.get('solidworks') or {}).get('majorVersion')}, {r.get('when')}{which}")     return 0  
tools/cswa-check.py+183−7
@@ -6,16 +6,19 @@ sometimes volume / centre of mass / surface area), the material, and the swx_run it. Each part is built through the bridge, weighed with swx_mass_properties, and compared with the key within the spec's tolerance (CSWA accepts about 1 %). Nothing is trusted that was not measured. -    python3 tools/cswa-check.py [--target adom_drew2] [--only cswa-00-lego-2x4] [--fresh] [--keep]+    python3 tools/cswa-check.py [--target adom_drew2] [--report auto|<path>] [--only cswa-00-lego-2x4] [--fresh] [--keep]+    python3 tools/cswa-check.py --derivations      # re-derive every derived key (no bridge call)  Same rules as tools/dsl-live-check.py: every creation says purpose:"bridge"; by default the parts are built in ONE bridge-made part (reuseDocument: its leading new_part becomes clear_part), so N parts cost one document; the run STOPS on a user_present / low_commit_memory / dialog refusal and never creates another part after one. The report (every reply, every expectation, pass/fail) is written-to cswa-report.json; tools/release.sh --require-live <report> refuses to publish without a passing-one newer than the last code commit.+to cswa-report.json (--report auto: tools/cswa/reports/cswa-<date>-sw<year>-<version>.json);+tools/release.sh --require-live <report> refuses to publish without a passing one newer than the last code+commit. The report also says WHICH BUILD ran (`bridge`: the installed exe's sha256, read back through ab), and+the publish ships only the canary zip holding that exe (README, "Live validation"). """-import argparse, glob, json, math, os, subprocess, sys, time+import argparse, base64, glob, hashlib, json, math, os, re, subprocess, sys, time  TARGET = "adom_drew2" THREAD = "SolidWorks Bridge"@@ -152,13 +155,20 @@ def resolve_extends(spec, by_id, depth=0):     if depth > 8:         raise ValueError(f"{spec['id']}: extends goes more than 8 deep")     merged = resolve_extends(by_id[base_id], by_id, depth + 1)-    merged.pop("needsOps", None)+    # What is true of the BASE part only is not inherited (src/cswa.rs::resolve_extends).+    for k in ("needsOps", "derivation", "simulatorSkips"):+        merged.pop(k, None)     variables = dict(merged.get("variables") or {})     variables.update(spec.get("variables") or {})     for k, v in spec.items():         if k not in ("extends", "variables", "scriptAppend", "derivedAppend"):             merged[k] = v     merged["variables"] = variables+    # A derivedAppend name the base already derives would shadow it (src/cswa.rs::resolve_extends).+    taken = {p[0] for p in merged.get("derived") or []}+    for name, _ in spec.get("derivedAppend") or []:+        if name in taken:+            raise ValueError(f"{spec['id']}: derivedAppend redefines {name!r}, which {base_id} already derives - name it differently")     for key, into in (("scriptAppend", "script"), ("derivedAppend", "derived")):         if key in spec:             merged.setdefault(into, []).extend(spec[key])@@ -186,6 +196,156 @@ def expand(spec, by_id):     return spec  +def spec_vars(spec):+    """The spec's variables and derived values, by the spec grammar (as expand() computes them)."""+    vars_ = {k: float(v) for k, v in (spec.get("variables") or {}).items()}+    for name, ex in spec.get("derived") or []:+        vars_[name] = evaluate(ex, vars_)+    return vars_+++QUANTITIES = ("massG", "volumeMm3", "centerOfMassMm", "surfaceAreaMm2")+++def check_derivation(spec, raw):+    """0.11.4: a DERIVED key must be reproducible. Evaluate the spec's `derivation` ([name, Python+    expression] pairs, in order; math's functions and the spec's variables in scope) and compare every+    quantity it yields with the key: within 1e-6 (relative, or absolute below 1). Returns (values, problems)."""+    import math as _m+    ns = {k: getattr(_m, k) for k in dir(_m) if not k.startswith("_")}+    ns.update({"abs": abs, "min": min, "max": max, "sum": sum, "len": len, "round": round, "range": range})+    ns.update(spec_vars(raw))+    problems, values = [], {}+    for name, ex in spec.get("derivation") or []:+        try:+            ns[name] = eval(ex, {"__builtins__": {}}, ns)  # noqa: S307 - the repo's own spec files, a reviewer's tool+        except Exception as e:  # pragma: no cover - reported+            problems.append(f"{name} = {ex}: {type(e).__name__}: {e}")+            return values, problems+        if name in QUANTITIES:+            values[name] = ns[name]+    exp = spec.get("expected") or {}+    if "massG" not in values:+        problems.append("the derivation does not yield massG")+    for q in QUANTITIES:+        if exp.get(q) is None:+            continue+        if q not in values:+            problems.append(f"the key has {q} but the derivation does not yield it")+            continue+        got, want = values[q], exp[q]+        pairs = list(zip(got, want)) if isinstance(want, list) else [(got, want)]+        if isinstance(want, list) and (not isinstance(got, (list, tuple)) or len(got) != len(want)):+            problems.append(f"{q}: the derivation gives {got}, the key {want}")+            continue+        for g, w in pairs:+            if abs(g - w) > 1e-6 * max(1.0, abs(w)):+                problems.append(f"{q}: the derivation gives {got}, the key says {want}")+                break+    return values, problems+++# ── WHICH BUILD RAN (the canary gate) ─────────────────────────────────────────+# tools/release.sh --publish ships the exact zip a live run tested (the canary), and refuses a report that does+# not say which build it ran. The bridge cannot hash the zip it came in (ab unzips it), so the facts come from+# ab, read-only: bridge_info (the install path), the INSTALLED exe read back through read_file (base64, in+# ranges) and hashed here, and - best effort - the manifest ab installed it from (its zip sha256, which ab+# checked before extracting).+WIKI = "https://wiki.adom.inc"+++def remote_sha256(path, chunk=1_000_000):+    """sha256 of a file on the target, read back through ab's read_file in ranges. (hex, None) or (None, why)."""+    h, off, total = hashlib.sha256(), 0, None+    for _ in range(64):+        r = call("read_file", {"path": path, "encoding": "base64", "offset": off, "length": chunk}, timeout=120)+        if not isinstance(r, dict) or r.get("success") is False or r.get("content") is None:+            return None, f"read_file {path}: {str(r)[:200]}"+        data = base64.b64decode(r["content"])+        h.update(data)+        total = r.get("totalSize", r.get("size"))+        off = r.get("nextOffset", off + len(data))+        if r.get("eof") or not data or (total is not None and off >= total):+            return h.hexdigest(), None+    return None, f"read_file {path}: more than 64 ranges"+++def installed_from():+    """The manifest URL ab installed the bridge from (~/.adom/bridge-install-urls.json on the target), or None."""+    r = call("read_file", {"path": "~/.adom/bridge-install-urls.json"}, timeout=60)+    try:+        d = json.loads(r.get("content") or "")+    except (AttributeError, ValueError):+        return None+    if isinstance(d, dict):+        for k in ("bridges", "urls"):+            if isinstance(d.get(k), (dict, list)):+                d = d[k]+                break+    entries = d.items() if isinstance(d, dict) else [((e or {}).get("name"), e) for e in d if isinstance(e, dict)] if isinstance(d, list) else []+    for name, v in entries:+        if name == "solidworks":+            return v if isinstance(v, str) else (v or {}).get("manifestUrl") or (v or {}).get("url")+    return None+++def wiki_json(url):+    """A wiki page file as JSON: https://wiki.adom.inc/api/v1/pages/<slug>/files/<path>, or the page form+    https://wiki.adom.inc/<owner>/<slug>/files/<path>, read with adom-wiki api (authenticated)."""+    m = re.match(r"^https://wiki\.adom\.inc(/api/v1/pages/[^/]+/files/.+)$", url or "")+    if not m:+        m2 = re.match(r"^https://wiki\.adom\.inc/[^/]+/([^/]+)/files/(.+)$", url or "")+        if not m2:+            return None+        api = f"/api/v1/pages/{m2.group(1)}/files/{m2.group(2)}"+    else:+        api = m.group(1)+    try:+        out = subprocess.run(["adom-wiki", "api", api], capture_output=True, text=True, timeout=60).stdout+        return json.loads(out)+    except (OSError, subprocess.TimeoutExpired, ValueError):+        return None+++def bridge_facts():+    facts = {"source": "ab bridge_info + read_file (read-only)"}+    info = call("bridge_info", {"name": "solidworks"}, timeout=60)+    if not isinstance(info, dict) or info.get("success") is False or info.get("status") == "error":+        facts["why"] = f"bridge_info failed: {str(info)[:200]}"+        return facts+    facts.update({"version": info.get("version"), "installPath": info.get("installPath"), "manifestUrl": info.get("manifestUrl"),+                  "installSource": info.get("source")})+    path = (info.get("installPath") or "").rstrip("\\/")+    if path:+        facts["exeSha256"], why = remote_sha256(path + "\\swx-bridge.exe")+        if why:+            facts["exeWhy"] = why+        facts["bridgeJsonSha256"], _ = remote_sha256(path + "\\bridge.json")+    else:+        facts["exeSha256"], facts["exeWhy"] = None, "bridge_info gave no installPath"+    src = installed_from()+    facts["installedFrom"] = src+    m = wiki_json(src) if src else None+    if isinstance(m, dict):+        facts["zipSha256"] = m.get("sha256")+        facts["installedManifestVersion"] = m.get("version")+        if m.get("canary"):+            facts["canary"] = m.get("canary")+    return facts+++def report_path(arg, st, sw):+    """--report auto: tools/cswa/reports/cswa-<UTC date>-sw<year>-<bridge version>.json (never overwriting one)."""+    if arg != "auto":+        return arg+    year = (sw.get("versionSupport") or {}).get("year") or (sw.get("majorVersion") or 0) + 1992+    base = os.path.join(ROOT, "tools", "cswa", "reports", f"cswa-{time.strftime('%Y-%m-%d', time.gmtime())}-sw{year}-{st.get('bridgeVersion')}")+    path, n = base + ".json", 2+    while os.path.exists(path):+        path, n = f"{base}-{n}.json", n + 1+    return path++ def ok(r):     return isinstance(r, dict) and r.get("success") is not False and r.get("status") != "error" @@ -236,8 +396,9 @@ def main():     ap.add_argument("--only", default="")     ap.add_argument("--fresh", action="store_true", help="a fresh part per spec instead of one reused part")     ap.add_argument("--keep", action="store_true", help="leave the parts open")-    ap.add_argument("--report", default="cswa-report.json")+    ap.add_argument("--report", default="cswa-report.json", help="the report path, or auto: tools/cswa/reports/cswa-<date>-sw<year>-<version>.json")     ap.add_argument("--expand-only", action="store_true", help="print every spec's script with its variables substituted, and stop (no bridge call)")+    ap.add_argument("--derivations", action="store_true", help="re-derive every derived key from its spec's `derivation` and compare (no bridge call)")     a = ap.parse_args()     TARGET = a.target     raw = [json.load(open(p)) for p in sorted(glob.glob(os.path.join(ROOT, "resources", "cswa", "*.json")))]@@ -246,6 +407,17 @@ def main():     if a.expand_only:         print(json.dumps({s["id"]: {"script": s.get("script"), "expected": s.get("expected"), "needsOps": s.get("needsOps") or []} for s in specs}))         return 0+    if a.derivations:+        out, bad = {}, 0+        for spec in specs:+            if not spec.get("derivation"):+                continue+            values, problems = check_derivation(spec, resolve_extends(by_id[spec["id"]], by_id))+            out[spec["id"]] = {"derived": values, "expected": spec.get("expected"), "problems": problems, "ok": not problems}+            bad += bool(problems)+        print(json.dumps(out, indent=1))+        print(f"{len(out) - bad} of {len(out)} derived keys reproduced", file=sys.stderr)+        return 1 if bad else 0     only = {x.strip() for x in a.only.split(",") if x.strip()}     st = call("swx_status", {"reason": "cswa-check: is SOLIDWORKS ready"})     sw = st.get("solidworks") or {}@@ -254,6 +426,10 @@ def main():     if not sw.get("running"):         print("SOLIDWORKS is not running on the target: start it (swx_start) and run again. Nothing was done.")         return 2+    a.report = report_path(a.report, st, sw)+    facts = bridge_facts()+    print(f"bridge build: exe sha256 {(facts.get('exeSha256') or 'UNREAD - ' + str(facts.get('exeWhy') or facts.get('why')))[:76]}"+          f" | installed from {facts.get('installedFrom') or '?'}")     shared = None     if not a.fresh:         nd = call("swx_new_document", {"type": "part", "purpose": "bridge", "reason": "cswa-check: the one part every CSWA spec is built in"})@@ -309,7 +485,7 @@ def main():     ran = [r for r in results if "skipped" not in r]     passed = sum(1 for r in ran if r.get("pass"))     report = {"tool": "cswa-check", "when": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()), "whenEpoch": int(time.time()),-              "target": TARGET, "bridgeVersion": st.get("bridgeVersion"),+              "target": TARGET, "bridgeVersion": st.get("bridgeVersion"), "bridge": facts,               "solidworks": {k: sw.get(k) for k in ("majorVersion", "edition", "versionSupport")},               "summary": f"{passed} of {len(ran)} CSWA parts within tolerance", "passed": passed, "ran": len(ran),               "skipped": len(results) - len(ran), "stopped": stopped, "allPassed": bool(ran) and passed == len(ran) and not stopped,
tools/cswa/README.md+60−16
@@ -1,4 +1,4 @@-# The CSWA benchmark (0.11.0)+# The CSWA benchmark (0.11.0; community parts, Step 4 and the live gate 0.11.4)  > "Pull 3-5 random parts from CSWA exams as part of our e2e testing/validation for > each release. We can also use those as benchmarks for new feature developments."@@ -14,7 +14,8 @@ ship in the release zip (`resources/cswa/`) and are embedded in the exe. |---|---|---| | Live, from a dev container | `python3 tools/cswa-check.py [--target adom_drew2] [--only <id>] [--fresh] [--keep]` | mass, and volume / surface area / centre of mass when the key has them; writes `cswa-report.json` | | On the desktop, through the bridge | `swx_selftest {"level":"cswa"}` (`only:[ids]`) | the same, with the same presence and memory rules as `level:"write"`; summary `"N of M CSWA parts within tolerance"` |-| In the simulator | `cargo test --test cswa` | mass and volume only (the arithmetic model's surface area and centre of mass are not exact for every shape) |+| In the simulator | `cargo test --test cswa` | mass and volume, and the centre of mass where the column model made it (never the surface area); a part only SOLIDWORKS can build (`simulatorSkips`) is skipped there, saying why |+| Re-deriving the keys | `python3 tools/cswa-check.py --derivations` | every derived key against its spec's `derivation` (no bridge call) |  `cswa-check.py` follows `tools/dsl-live-check.py`'s rules: @@ -27,17 +28,34 @@ ship in the release zip (`resources/cswa/`) and are embedded in the exe. ## The release gate  ```bash-python3 tools/cswa-check.py --report /tmp/cswa-report.json      # on the live target, with THIS build-tools/release.sh --require-live /tmp/cswa-report.json --publish+tools/release.sh --canary                                          # release candidate <ver>-rc<N> + manifests/canary.json+adom-bridge --target adom_drew2 bridge_install '{"manifestUrl":"https://wiki.adom.inc/api/v1/pages/solidworks-bridge/files/manifests/canary.json"}'+python3 tools/cswa-check.py --target adom_drew2 --report auto      # live, on THAT build; names its report+tools/release.sh --require-live tools/cswa/reports/<that report> --publish   # promotes the candidate's exact zip ``` +`cswa-check` records WHICH BUILD it ran in `bridge` (read-only, through ab): `exeSha256`, the+installed exe read back with `read_file` and hashed; `installedFrom` and `zipSha256`, the manifest+ab installed from and the zip it named; `installPath`, `version`. The publish ships the canary's zip+without rebuilding it, and only when `bridge.exeSha256` is the exe inside it.++Since 0.11.4 EVERY publish goes through it: `--publish` alone is refused before anything is built. `--require-live` refuses to go on unless the report (`tools/check-live-report.py`):  - comes from `cswa-check`; - was made by THIS bridge version;-- ran at least one part and passed every part it ran;+- ran EVERY spec shipped in `resources/cswa/` (0.11.4: a part may be skipped only for an op the+  bridge lacks; a run narrowed with `--only` is refused) and passed every part it ran; - did not stop;-- is newer than the last commit that touched `src/`, `resources/` or `Cargo.toml`.+- is newer than the last commit that touched `src/`, `resources/` or `Cargo.toml`;+- ran the exe being published (`bridge.exeSha256`), from the canary's zip if it says+  (`bridge.zipSha256`).++The one exception is `--docs-only --publish`, for a release that changes no code+(`tools/check-docs-only.py`: nothing in `src/` or `resources/`, and nothing in Cargo.toml or+Cargo.lock beyond the package's version, since the last publish). Its changelog says the live gate+was skipped. The ritual is in the main README, under "Live validation". Commit each live report in+`reports/` beside the earlier ones.  ## Spec schema @@ -57,6 +75,10 @@ tools/release.sh --require-live /tmp/cswa-report.json --publish     "tolerancePct": 1.0                    // CSWA accepts about 1 %   },   "keyBasis": "where the numbers came from, when it is not simply the published key",+  "derivation": [["V", "120*80*12 - ..."], ["volumeMm3", "V"], ["massG", "V*2.7e-3"]],  // a DERIVED key, re-derivable (0.11.4)+  "exercises": ["revolve.360", "cut.regions"],   // the op variants it builds (a test holds the simulator to it)+  "simulatorSkips": "why only SOLIDWORKS can build it",  // optional: skipped in the simulator, run live+  "prediction": {"massG": 434.715, "how": "..."},        // optional: what the rebuild should weigh, when it is not the key   "needsOps": [],                          // ops the bridge lacks: the part is SKIPPED, never half-built   "variables": {"A": 81}, "derived": [["xR", "A-14"]],   // optional, see below   "extends": "<another spec's id>",        // optional, see below@@ -69,6 +91,16 @@ Rules: - **The key is the PUBLISHED number,** never one the bridge computed. A spec whose key was   derived (spec 0's mass is Michael's measured volume times the density of ABS) says so   in `keyBasis`.+- **A COMMUNITY part's key is derived analytically, and the derivation ships with it**+  (0.11.4). `derivation` is a list of `[name, Python expression]` pairs, evaluated in order with+  math's functions and the spec's variables in scope. It must yield `massG`, plus `volumeMm3` and+  `centerOfMassMm` where the key has them, each within 1e-6 of the key:+  `python3 tools/cswa-check.py --derivations` checks every one, and so does `cargo test`.+  Such a key is exact, so the spec holds SOLIDWORKS to 0.1 %, not 1 %. Each spec states that+  0.1 % tells its readings apart.+- **A `derivedAppend` name may not shadow one the base derives.** If it did, every `"=name"`+  in the base's script would silently take the new value: Step 4's `tpx` once redrew Step 1's+  R5 fillet. Both expanders refuse it. - **A runnable spec must parse** — `cargo test` parses every one (`src/cswa.rs`). - **A spec that needs a missing op** lists it in `needsOps`. That is the backlog: when the   op lands, the spec runs.@@ -95,21 +127,33 @@ the two to the same numbers); the bridge itself is only ever sent numbers. | `cswa-05-tool-block-step1` | official sample exam, Q3 | 939.54 g | `line`, `tangentArc` (R19), `polyline`, `arc3` (R29, R5), `sketchChamfer`, a hole in the profile; variables A B C | | `cswa-06-tool-block-step2` | official, Q4 | 1032.32 g | the same script, `extends` with A 84, B 59, C 45 | | `cswa-07-tool-block-step3` | official, Q5 | 628.18 g | a plane offset 12 inside the BACK face, the R41 slot, two face cuts, an Ø11 `hole` |-| `cswa-08-tool-block-step4` | official, Q6 | 432.58 g | SKIPPED: `needsOps: ["offsetEntities"]` (the pocket is the front face's outline offset 1 mm) |+| `cswa-08-tool-block-step4` | official, Q6 | 432.58 g (predicted 434.72, +0.49 %) | `offsetEntities` of the front face's outer loop (−1 mm), sketch regions (`regionsAtMm`) with the R42 / R41 circles, two `offsetFromSurface` cuts (12 from the back face; 1 short of the slot's front wall). LIVE ONLY (`simulatorSkips`) |+| `cswa-08b-tool-block-step4-explicit` | official, Q6 | 432.58 g (predicted 434.72) | the same pocket DRAWN: the inset outline's lines, its R20 arc and the R42 / R41 arcs, every intersection derived in the spec; blind cuts 32 and 7 (the fallback if Offset Entities misbehaves live) |+| `cswa-09-community-stepped-shaft` | community, derived | 103.5689 g, CoM (46.8315, −0.1142, 0) | `revolve` 360, `revolve_cut` 360 (a groove) and 180° mid-plane (a half-depth flat), the sketch's x axis as a construction line |+| `cswa-10-community-mirrored-block` | community, derived | 722.9129 g, CoM (−0.0824, 16.0273, 0) | `mirror` features about Front Plane, bodies about Right Plane, a boss about an offset plane |+| `cswa-11-community-slotted-plate` | community, derived | 276.3593 g, CoM (1.3753, 5.9074, 0.0358) | two `slot`s through all, a hexagon `polygon` pocket, a counterbored and a countersunk `hole` |+| `cswa-12-community-up-to-plates` | community, derived | 369.6875 g, CoM (40.5252, 24.7232, 45.8697) | `upToNext`, `upToSurface` and `offsetFromSurface` bosses, a cut up to a face, a drafted boss and a drafted pocket |  The recipes, ambiguities and the reviewer's numeric rebuilds are in [`SOURCES.md`](SOURCES.md) (`tb2.py`, `tb3b.py`, `tb4c.py` beside it). In the simulator every runnable part lands within-0.01 % of its key (`cargo test --test cswa`, `CSWA_PRINT=1` prints the table).+0.01 % of its key, or of its prediction (`cargo test --test cswa`, `CSWA_PRINT=1` prints the table). -## Roadmap (drawings only — not transcribed yet)+**Step 4's reading.** SOURCES.md Part 4, read literally, gives 434.72 g (+0.49 %). The front face's+outer loop is offset 1 mm in. A 1-mm wall stays outside the slot's R41 silhouette (R42). The pocket+outside that wall goes to 12 from the back face. The ear inside R41 is recessed to 1 mm short of the+slot's front wall, leaving a 1-mm skin. The reviewer's best case, 432.86 g, cuts the ear through to+the slot instead, and keeps a 1-mm ring round the Ø11. The drawing cannot tell the two apart+(ambiguity 4), and both are within the exam's 1 %. -| Candidate | Key | Needs |-|---|---|---|-| 2007 sample Q1 (copper, A 63 B 50 C 100) | 1280 g | multi-sketch, angled cuts, concentric bores — a human must read the drawing |-| 2007 sample Q6 (6061, A 100) | 2040.57 g | counterbored hole, R50 saddle, lugs — a human must read the drawing |-| Planchard 3-3 (6061, A 50 B 50 C 120) | 302.40 g, CoM (0, 19.20, 0) | `mirror`, mid-plane extrude, a through-all cut |-| Official chain-link assembly (2017 sample) | CoM (348.66, −88.48, −91.40) at A 25° B 125° C 130° | assemblies with mates (not in the DSL) |-| Tool Block step 4 | 432.58 g | `offsetEntities` (Offset Entities of a face's loop) |+## Roadmap: placeholders (drawings only, not transcribed)++These are one line each: the source and its published key. The geometry stays in the source; no+exam or book content is copied here.++- 2007 sample exam, Q1: https://cdn.goengineer.com/cswasampleexam2007.pdf (key 1280 g).+- 2007 sample exam, Q6: https://cdn.goengineer.com/cswasampleexam2007.pdf (key 2040.57 g).+- Planchard, Official CSWA Examination Guide, 3-3: https://static.sdcpublications.com/pdfsample/978-1-58503-656-1-3.pdf (key 302.40 g, CoM (0, 19.20, 0)).+- Official chain-link assembly, 2017 sample exam: https://www.solidworks.com/sites/default/files/2017-12/CSWASampleExam.pdf (key CoM (348.66, −88.48, −91.40) at A 25° B 125° C 130°; it needs assemblies with mates, which the DSL lacks).  ## Spec 0 
tools/cswa/SOURCES.md+6−11
@@ -101,18 +101,13 @@ Material 6061, 2700 kg/m³ (0.0027 g/mm³), MMGS, corner at origin, +X +Y +Z. - Q9 L-bracket, AISI 1020 0.0079: base 80 (X) × 10 (Y) × 40 (Z) at the origin corner; upright 10 thick (X) at the   left end, 50 above the base, 40 deep: **410.80 g**, CoM **(26.54, 16.54, 20.00)**. -## Further official candidates (drawings only; NOT rebuilt or verified)+## Further official candidates (placeholders: URL and key only) -- 2007 Q1 (p.1–2): MMGS, Copper 0.0089, A = 63 (height), B = 50 (depth), C = 100 (length); key **1280 g**.-  Callouts: 100, 63, 50, 40, 40, 20, 15, 15, 10, 35, 20°, 45°, 9, 12, 5, 13, 18, 30, 8, Ø20, Ø10 (×3), Ø50, R25 (×2),-  R20, R10, R30. Multi-sketch, angled cuts, concentric bores; a human must read the drawing.-- 2007 Q6 (p.6): 6061 0.0027, A = 100; key **2040.57 g**. Base 200 × A × 25 with steps 50/37.5/100/25/15/5, boss-  Ø25 with Ø12 through on an R25/20° lug at 40/15, raised block 60/40/30/10, R50 saddle, 30° face, 10-wide slot,-  Ø15 hole with ⌴Ø25 ⌵5 counterbore, R35. Needs human reading.-- Planchard 3-3 (SDC p.3-7/3-8): A = 50, B = 50, C = 120, 6061 0.0027; key **302.40 g, volume 112,000 mm²,-  surface 26,200 mm², CoM (0, 19.20, 0)**; mirrored stepped sketch on Front → Boss-Extrude mid-plane 50 →-  Cut-Extrude through-all of a 30×20 rectangle on the right face. Figure dims 120, 70, 40, 30, 20, 10, 50; the-  reviewer reproduced the volume but not the CoM, so the figure needs a human read. Fills the "mirror" slot.+One line each. Nothing from these drawings is transcribed here: the geometry stays in the source.++- 2007 sample exam, Q1: https://cdn.goengineer.com/cswasampleexam2007.pdf (key 1280 g).+- 2007 sample exam, Q6: https://cdn.goengineer.com/cswasampleexam2007.pdf (key 2040.57 g).+- Planchard, Official CSWA Examination Guide, 3-3: https://static.sdcpublications.com/pdfsample/978-1-58503-656-1-3.pdf (key 302.40 g, CoM (0, 19.20, 0)).  ## Assembly targets (future) 
tools/cswa/reports/cswa-2026-10-16-sw2026-0.11.4-rc1-FAILED.jsonadded+11993
@@ -0,0 +1,11993 @@+{+ "tool": "cswa-check",+ "when": "2026-10-16T22:55:11Z",+ "whenEpoch": 1792191311,+ "target": "adom_drew2",+ "bridgeVersion": "0.11.4",+ "bridge": {+  "source": "ab bridge_info + read_file (read-only)",+  "version": "0.11.4",+  "installPath": "C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/solidworks",+  "manifestUrl": "https://wiki.adom.inc/api/v1/pages/solidworks-bridge/files/adom-bridge-solidworks-manifest.json",+  "installSource": "cache",+  "exeSha256": "35f04d753e8757ee6c30c19a3ad652b1de0d61915b91a0a9324eed982dbd90ae",+  "bridgeJsonSha256": "af4d848ed8676c05b8bdcec089b1af3698c789b8977d3128f5332d859af98243",+  "installedFrom": "https://wiki.adom.inc/api/v1/pages/adom/solidworks-bridge/files/manifests/canary.json"+ },+ "solidworks": {+  "majorVersion": 34,+  "edition": "connected",+  "versionSupport": {+   "lacks": [],+   "majorVersion": 34,+   "revision": "34.3.0",+   "supported": true,+   "supportedFrom": 2021,+   "tested": true,+   "testedOn": [+    2026,+    2021+   ],+   "year": 2026+  }+ },+ "summary": "12 of 14 CSWA parts within tolerance",+ "passed": 12,+ "ran": 14,+ "skipped": 0,+ "stopped": null,+ "allPassed": false,+ "parts": [+  {+   "id": "cswa-00-lego-2x4",+   "title": "LEGO 2x4 brick (spec 0: the acceptance brick, not an exam part)",+   "official": false,+   "source": "adom/solidworks-bridge issue #1 (Michael, SOLIDWORKS 2021: volumeM3 2.0733615208e-6 from swx_mass_properties); examples/lego-2x4.json",+   "expected": {+    "massG": 2.114829,+    "volumeMm3": 2073.3615208,+    "tolerancePct": 1.0+   },+   "material": {+    "name": "ABS",+    "densityKgM3": 1020+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792190208004.SLDPRT",+    "durationMs": 41319,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792190208004.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":37.4,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 10 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"add-ins are still loading: the last LOAD_ADDIN is newer than the last <3DXLOAD_TIME>, and the startup lines last changed 6s ago\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":10,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792190208004.SLDPRT\",\"deleted\":[],\"featuresDeleted\":0,\"passes\":0,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch_rect\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[-15.9,-7.9],[15.9,7.9]]}}],\"heightMm\":15.8,\"mapped\":false,\"plane\":\"Top Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.top\",\"sketch.rect\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch1\",\"sketchNormal\":[0.0,1.0,0.0],\"sketchedOn\":\"Top Plane\",\"transformInverted\":false,\"widthMm\":31.8},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":9.6,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,1.0,0.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude1\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch1\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"sketch_rect\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[-14.7,-6.7],[14.7,6.7]]}}],\"heightMm\":13.4,\"mapped\":false,\"plane\":\"Top Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.top\",\"sketch.rect\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch2\",\"sketchNormal\":[0.0,1.0,0.0],\"sketchedOn\":\"Top Plane\",\"transformInverted\":false,\"widthMm\":29.4},\"step\":4},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":8.6,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,1.0,0.0],\"value\":true},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude1\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one.reversed\"]},\"regions\":null,\"reverse\":true,\"sketch\":\"Sketch2\",\"throughAll\":false,\"upToFace\":null},\"step\":5},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"circle\":{\"centerMm\":[-8.0,0.0],\"radiusMm\":3.255}},{\"circle\":{\"centerMm\":[-8.0,0.0],\"radiusMm\":2.4}},{\"circle\":{\"centerMm\":[0.0,0.0],\"radiusMm\":3.255}},{\"circle\":{\"centerMm\":[0.0,0.0],\"radiusMm\":2.4}},{\"circle\":{\"centerMm\":[8.0,0.0],\"radiusMm\":3.255}},{\"circle\":{\"centerMm\":[8.0,0.0],\"radiusMm\":2.4}}],\"mapped\":false,\"plane\":\"Top Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.top\",\"sketch.circle\",\"sketch.multiProfile\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch3\",\"sketchNormal\":[0.0,1.0,0.0],\"sketchedOn\":\"Top Plane\",\"transformInverted\":false},\"step\":6},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":8.6,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,1.0,0.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude2\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch3\",\"throughAll\":false,\"upToFace\":null},\"step\":7},{\"op\":\"sketch\",\"result\":{\"createdPlane\":\"Plane1\",\"entities\":[{\"circle\":{\"centerMm\":[-12.0,-4.0],\"radiusMm\":2.4}},{\"circle\":{\"centerMm\":[-12.0,4.0],\"radiusMm\":2.4}},{\"circle\":{\"centerMm\":[-4.0,-4.0],\"radiusMm\":2.4}},{\"circle\":{\"centerMm\":[-4.0,4.0],\"radiusMm\":2.4}},{\"circle\":{\"centerMm\":[4.0,-4.0],\"radiusMm\":2.4}},{\"circle\":{\"centerMm\":[4.0,4.0],\"radiusMm\":2.4}},{\"circle\":{\"centerMm\":[12.0,-4.0],\"radiusMm\":2.4}},{\"circle\":{\"centerMm\":[12.0,4.0],\"radiusMm\":2.4}}],\"mapped\":true,\"plane\":{\"offsetFrom\":\"Top Plane\",\"offsetMm\":9.6},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.offset.top.positive\",\"sketch.circle\",\"sketch.multiProfile\"]},\"resolvedPlane\":{\"offsetFrom\":\"Top Plane\",\"offsetMm\":9.6,\"plane\":\"Plane1\",\"verified\":true},\"sketch\":\"Sketch4\",\"sketchNormal\":[0.0,1.0,0.0],\"sketchedOn\":\"Plane1\",\"transformInverted\":false},\"step\":8},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":1.7,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,1.0,0.0],\"sketchNormal\":[0.0,1.0,0.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude3\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch4\",\"throughAll\":false,\"upToFace\":null},\"step\":9},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"ABS\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":1020.0,\"densityRequested\":1020.0,\"material\":\"ABS\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":10}],\"success\":true,\"targetDocument\":\"Part1-1792190208004.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 37.4,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 10 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "add-ins are still loading: the last LOAD_ADDIN is newer than the last <3DXLOAD_TIME>, and the startup lines last changed 6s ago"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 10,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792190208004.SLDPRT",+       "deleted": [],+       "featuresDeleted": 0,+       "passes": 0,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch_rect",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            -15.9,+            -7.9+           ],+           [+            15.9,+            7.9+           ]+          ]+         }+        }+       ],+       "heightMm": 15.8,+       "mapped": false,+       "plane": "Top Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.top",+         "sketch.rect"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch1",+       "sketchNormal": [+        0.0,+        1.0,+        0.0+       ],+       "sketchedOn": "Top Plane",+       "transformInverted": false,+       "widthMm": 31.8+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 9.6,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         1.0,+         0.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude1",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch1",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "sketch_rect",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            -14.7,+            -6.7+           ],+           [+            14.7,+            6.7+           ]+          ]+         }+        }+       ],+       "heightMm": 13.4,+       "mapped": false,+       "plane": "Top Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.top",+         "sketch.rect"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch2",+       "sketchNormal": [+        0.0,+        1.0,+        0.0+       ],+       "sketchedOn": "Top Plane",+       "transformInverted": false,+       "widthMm": 29.4+      },+      "step": 4+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 8.6,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         1.0,+         0.0+        ],+        "value": true+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Cut-Extrude1",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.one.reversed"+        ]+       },+       "regions": null,+       "reverse": true,+       "sketch": "Sketch2",+       "throughAll": false,+       "upToFace": null+      },+      "step": 5+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "circle": {+          "centerMm": [+           -8.0,+           0.0+          ],+          "radiusMm": 3.255+         }+        },+        {+         "circle": {+          "centerMm": [+           -8.0,+           0.0+          ],+          "radiusMm": 2.4+         }+        },+        {+         "circle": {+          "centerMm": [+           0.0,+           0.0+          ],+          "radiusMm": 3.255+         }+        },+        {+         "circle": {+          "centerMm": [+           0.0,+           0.0+          ],+          "radiusMm": 2.4+         }+        },+        {+         "circle": {+          "centerMm": [+           8.0,+           0.0+          ],+          "radiusMm": 3.255+         }+        },+        {+         "circle": {+          "centerMm": [+           8.0,+           0.0+          ],+          "radiusMm": 2.4+         }+        }+       ],+       "mapped": false,+       "plane": "Top Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.top",+         "sketch.circle",+         "sketch.multiProfile"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch3",+       "sketchNormal": [+        0.0,+        1.0,+        0.0+       ],+       "sketchedOn": "Top Plane",+       "transformInverted": false+      },+      "step": 6+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 8.6,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         1.0,+         0.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude2",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch3",+       "throughAll": false,+       "upToFace": null+      },+      "step": 7+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": "Plane1",+       "entities": [+        {+         "circle": {+          "centerMm": [+           -12.0,+           -4.0+          ],+          "radiusMm": 2.4+         }+        },+        {+         "circle": {+          "centerMm": [+           -12.0,+           4.0+          ],+          "radiusMm": 2.4+         }+        },+        {+         "circle": {+          "centerMm": [+           -4.0,+           -4.0+          ],+          "radiusMm": 2.4+         }+        },+        {+         "circle": {+          "centerMm": [+           -4.0,+           4.0+          ],+          "radiusMm": 2.4+         }+        },+        {+         "circle": {+          "centerMm": [+           4.0,+           -4.0+          ],+          "radiusMm": 2.4+         }+        },+        {+         "circle": {+          "centerMm": [+           4.0,+           4.0+          ],+          "radiusMm": 2.4+         }+        },+        {+         "circle": {+          "centerMm": [+           12.0,+           -4.0+          ],+          "radiusMm": 2.4+         }+        },+        {+         "circle": {+          "centerMm": [+           12.0,+           4.0+          ],+          "radiusMm": 2.4+         }+        }+       ],+       "mapped": true,+       "plane": {+        "offsetFrom": "Top Plane",+        "offsetMm": 9.6+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.offset.top.positive",+         "sketch.circle",+         "sketch.multiProfile"+        ]+       },+       "resolvedPlane": {+        "offsetFrom": "Top Plane",+        "offsetMm": 9.6,+        "plane": "Plane1",+        "verified": true+       },+       "sketch": "Sketch4",+       "sketchNormal": [+        0.0,+        1.0,+        0.0+       ],+       "sketchedOn": "Plane1",+       "transformInverted": false+      },+      "step": 8+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 1.7,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         1.0,+         0.0+        ],+        "sketchNormal": [+         0.0,+         1.0,+         0.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude3",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch4",+       "throughAll": false,+       "upToFace": null+      },+      "step": 9+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "ABS"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 1020.0,+       "densityRequested": 1020.0,+       "material": "ABS",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 10+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792190208004.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     -0.0159,+     0.0,+     -0.0079,+     0.0159,+     0.0113,+     0.0079+    ],+    "centerOfMass": [+     7.979125726454492e-19,+     0.006193169977140961,+     -1.0997928205986969e-18+    ],+    "centerOfMassMm": [+     0.0,+     6.19317,+     -0.0+    ],+    "density": 1020.0,+    "densityKgM3": 1020.0,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "durationMs": 2238,+    "error": "",+    "massG": 2.114828751242137,+    "massKg": 0.002114828751242137,+    "materialName": "ABS",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[-0.0159,0.0,-0.0079,0.0159,0.0113,0.0079],\"centerOfMass\":[7.979125726454492e-19,0.006193169977140961,-1.0997928205986969e-18],\"centerOfMassMm\":[0.0,6.19317,-0.0],\"density\":1020.0,\"densityKgM3\":1020.0,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"massG\":2.114828751242137,\"massKg\":0.002114828751242137,\"materialName\":\"ABS\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"add-ins are still loading: the last LOAD_ADDIN is newer than the last <3DXLOAD_TIME>, and the startup lines last changed 47s ago\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.003776753621558533,\"surfaceAreaMm2\":3776.753621558533,\"timeoutSeconds\":120,\"volumeM3\":2.0733615208256247e-6,\"volumeMm3\":2073.3615208256247}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "add-ins are still loading: the last LOAD_ADDIN is newer than the last <3DXLOAD_TIME>, and the startup lines last changed 47s ago"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.003776753621558533,+    "surfaceAreaMm2": 3776.753621558533,+    "timeoutSeconds": 120,+    "volumeM3": 2.0733615208256247e-06,+    "volumeMm3": 2073.3615208256247+   },+   "pass": true,+   "checks": [+    {+     "quantity": "massG",+     "expected": 2.114829,+     "measured": 2.114828751242137,+     "offPct": 1.1762552090642981e-05,+     "pass": true+    },+    {+     "quantity": "volumeMm3",+     "expected": 2073.3615208,+     "measured": 2073.3615208256247,+     "offPct": 1.2358943781890103e-09,+     "pass": true+    }+   ],+   "fails": [],+   "seconds": 43.6+  },+  {+   "id": "cswa-01-3dengr-q5-block",+   "title": "3dengr Q5: a 100 x 20 x 60 block in 6061",+   "official": false,+   "source": "https://www.3dengr.com/cswa-practice-questions.html",+   "expected": {+    "massG": 324.0,+    "volumeMm3": 120000.0,+    "centerOfMassMm": [+     50.0,+     10.0,+     30.0+    ],+    "tolerancePct": 1.0+   },+   "material": {+    "name": "6061 Alloy",+    "densityKgM3": 2700+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792190208004.SLDPRT",+    "durationMs": 24925,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792190208004.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":20.8,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 4 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"add-ins are still loading: the last LOAD_ADDIN is newer than the last <3DXLOAD_TIME>, and the startup lines last changed 49s ago\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":4,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792190208004.SLDPRT\",\"deleted\":[\"Sketch1\",\"Boss-Extrude1\",\"Cut-Extrude1\",\"Boss-Extrude2\",\"Plane1\",\"Sketch4\",\"Boss-Extrude3\",\"Sketch2\",\"Sketch3\"],\"featuresDeleted\":9,\"passes\":2,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch_rect\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[0.0,0.0],[100.0,20.0]]}}],\"heightMm\":20.0,\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.front\",\"sketch.rect\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch5\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false,\"widthMm\":100.0},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":60.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude4\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch5\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"6061 Alloy\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":2700.0,\"densityRequested\":2700.0,\"material\":\"6061 Alloy\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":4}],\"success\":true,\"targetDocument\":\"Part1-1792190208004.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 20.8,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 4 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "add-ins are still loading: the last LOAD_ADDIN is newer than the last <3DXLOAD_TIME>, and the startup lines last changed 49s ago"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 4,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792190208004.SLDPRT",+       "deleted": [+        "Sketch1",+        "Boss-Extrude1",+        "Cut-Extrude1",+        "Boss-Extrude2",+        "Plane1",+        "Sketch4",+        "Boss-Extrude3",+        "Sketch2",+        "Sketch3"+       ],+       "featuresDeleted": 9,+       "passes": 2,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch_rect",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            0.0,+            0.0+           ],+           [+            100.0,+            20.0+           ]+          ]+         }+        }+       ],+       "heightMm": 20.0,+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.rect"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch5",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false,+       "widthMm": 100.0+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 60.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude4",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch5",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "6061 Alloy"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 2700.0,+       "densityRequested": 2700.0,+       "material": "6061 Alloy",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 4+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792190208004.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     0.0,+     0.0,+     0.0,+     0.1,+     0.02,+     0.06+    ],+    "centerOfMass": [+     0.05,+     0.01,+     0.03+    ],+    "centerOfMassMm": [+     50.0,+     10.0,+     30.0+    ],+    "density": 2700.0,+    "densityKgM3": 2700.0,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "durationMs": 2816,+    "error": "",+    "massG": 323.99999999999994,+    "massKg": 0.32399999999999995,+    "materialName": "6061 Alloy",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[0.0,0.0,0.0,0.1,0.02,0.06],\"centerOfMass\":[0.05,0.01,0.03],\"centerOfMassMm\":[50.0,10.0,30.0],\"density\":2700.0,\"densityKgM3\":2700.0,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"massG\":323.99999999999994,\"massKg\":0.32399999999999995,\"materialName\":\"6061 Alloy\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 74s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.0184,\"surfaceAreaMm2\":18400.0,\"timeoutSeconds\":120,\"volumeM3\":0.00012,\"volumeMm3\":120000.0}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 74s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.0184,+    "surfaceAreaMm2": 18400.0,+    "timeoutSeconds": 120,+    "volumeM3": 0.00012,+    "volumeMm3": 120000.0+   },+   "pass": true,+   "checks": [+    {+     "quantity": "massG",+     "expected": 324.0,+     "measured": 323.99999999999994,+     "offPct": 1.75442650804963e-14,+     "pass": true+    },+    {+     "quantity": "volumeMm3",+     "expected": 120000.0,+     "measured": 120000.0,+     "offPct": 0.0,+     "pass": true+    },+    {+     "quantity": "centerOfMassMm",+     "expected": [+      50.0,+      10.0,+      30.0+     ],+     "measured": [+      50.0,+      10.0,+      30.0+     ],+     "pass": true+    }+   ],+   "fails": [],+   "seconds": 27.8+  },+  {+   "id": "cswa-02-3dengr-q6-hole",+   "title": "3dengr Q6/Q7: the block with a \u00d820 hole through it along Y at X 25, Z 30",+   "official": false,+   "source": "https://www.3dengr.com/cswa-practice-questions.html",+   "expected": {+    "massG": 307.04,+    "centerOfMassMm": [+     51.38,+     10.0,+     30.0+    ],+    "tolerancePct": 1.0+   },+   "material": {+    "name": "6061 Alloy",+    "densityKgM3": 2700+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792190208004.SLDPRT",+    "durationMs": 151980,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792190208004.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":27.6,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 5 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 77s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":5,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792190208004.SLDPRT\",\"deleted\":[\"Sketch5\",\"Boss-Extrude4\"],\"featuresDeleted\":2,\"passes\":1,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch_rect\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[0.0,0.0],[100.0,20.0]]}}],\"heightMm\":20.0,\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.front\",\"sketch.rect\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch6\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false,\"widthMm\":100.0},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":60.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude5\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch6\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"hole\",\"result\":{\"depthMm\":null,\"diameterMm\":20.0,\"face\":{\"atPointMm\":[25.0,20.0,30.0],\"heightMm\":20.0,\"normal\":[-0.0,1.0,-0.0],\"pickedBy\":\"geometry\",\"plane\":\"Top Plane\"},\"feature\":\"Cut-Extrude2\",\"features\":[\"Cut-Extrude2\"],\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"hole.simple\"]},\"steps\":[{\"op\":\"sketch\",\"result\":{\"createdPlane\":\"Plane2\",\"entities\":[{\"circle\":{\"centerMm\":[25.0,-30.0],\"radiusMm\":10.0}}],\"mapped\":true,\"plane\":{\"offsetFrom\":\"Top Plane\",\"offsetMm\":20.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"radiusMm\":10.0,\"resolvedPlane\":{\"offsetFrom\":\"Top Plane\",\"offsetMm\":20.0,\"plane\":\"Plane2\",\"verified\":true},\"sketch\":\"Sketch7\",\"sketchNormal\":[0.0,1.0,0.0],\"sketchedOn\":\"Plane2\",\"transformInverted\":false}},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":0.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,1.0,0.0],\"sketchNormal\":[0.0,1.0,0.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":1,\"feature\":\"Cut-Extrude2\",\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch7\",\"throughAll\":true,\"upToFace\":null}}],\"throughAll\":true},\"step\":4},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"6061 Alloy\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":2700.0,\"densityRequested\":2700.0,\"material\":\"6061 Alloy\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":5}],\"success\":true,\"targetDocument\":\"Part1-1792190208004.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 27.6,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 5 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 77s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 5,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792190208004.SLDPRT",+       "deleted": [+        "Sketch5",+        "Boss-Extrude4"+       ],+       "featuresDeleted": 2,+       "passes": 1,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch_rect",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            0.0,+            0.0+           ],+           [+            100.0,+            20.0+           ]+          ]+         }+        }+       ],+       "heightMm": 20.0,+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.rect"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch6",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false,+       "widthMm": 100.0+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 60.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude5",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch6",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "hole",+      "result": {+       "depthMm": null,+       "diameterMm": 20.0,+       "face": {+        "atPointMm": [+         25.0,+         20.0,+         30.0+        ],+        "heightMm": 20.0,+        "normal": [+         -0.0,+         1.0,+         -0.0+        ],+        "pickedBy": "geometry",+        "plane": "Top Plane"+       },+       "feature": "Cut-Extrude2",+       "features": [+        "Cut-Extrude2"+       ],+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "hole.simple"+        ]+       },+       "steps": [+        {+         "op": "sketch",+         "result": {+          "createdPlane": "Plane2",+          "entities": [+           {+            "circle": {+             "centerMm": [+              25.0,+              -30.0+             ],+             "radiusMm": 10.0+            }+           }+          ],+          "mapped": true,+          "plane": {+           "offsetFrom": "Top Plane",+           "offsetMm": 20.0+          },+          "planeFrames": "plane transforms (they match the measured Front/Top axes)",+          "radiusMm": 10.0,+          "resolvedPlane": {+           "offsetFrom": "Top Plane",+           "offsetMm": 20.0,+           "plane": "Plane2",+           "verified": true+          },+          "sketch": "Sketch7",+          "sketchNormal": [+           0.0,+           1.0,+           0.0+          ],+          "sketchedOn": "Plane2",+          "transformInverted": false+         }+        },+        {+         "op": "cut",+         "result": {+          "depth2Mm": null,+          "depthMm": 0.0,+          "dir": {+           "flippedToFollowTheReference": false,+           "reference": [+            0.0,+            1.0,+            0.0+           ],+           "sketchNormal": [+            0.0,+            1.0,+            0.0+           ],+           "value": false+          },+          "direction": "one",+          "draftDeg": null,+          "draftInward": null,+          "endCondition": 1,+          "feature": "Cut-Extrude2",+          "regions": null,+          "reverse": false,+          "sketch": "Sketch7",+          "throughAll": true,+          "upToFace": null+         }+        }+       ],+       "throughAll": true+      },+      "step": 4+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "6061 Alloy"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 2700.0,+       "densityRequested": 2700.0,+       "material": "6061 Alloy",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 5+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792190208004.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     0.0,+     0.0,+     0.0,+     0.1,+     0.02,+     0.06+    ],+    "centerOfMass": [+     0.05138132283342444,+     0.009999999999999998,+     0.029999999999999995+    ],+    "centerOfMassMm": [+     51.381323,+     10.0,+     30.0+    ],+    "density": 2700.0,+    "densityKgM3": 2700.0,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "durationMs": 2234,+    "error": "",+    "massG": 307.0353996706151,+    "massKg": 0.3070353996706151,+    "materialName": "6061 Alloy",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[0.0,0.0,0.0,0.1,0.02,0.06],\"centerOfMass\":[0.05138132283342444,0.009999999999999998,0.029999999999999995],\"centerOfMassMm\":[51.381323,10.0,30.0],\"density\":2700.0,\"densityKgM3\":2700.0,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"massG\":307.0353996706151,\"massKg\":0.3070353996706151,\"materialName\":\"6061 Alloy\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 229s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.01902831853071796,\"surfaceAreaMm2\":19028.31853071796,\"timeoutSeconds\":120,\"volumeM3\":0.0001137168146928204,\"volumeMm3\":113716.8146928204}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 229s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.01902831853071796,+    "surfaceAreaMm2": 19028.31853071796,+    "timeoutSeconds": 120,+    "volumeM3": 0.0001137168146928204,+    "volumeMm3": 113716.8146928204+   },+   "pass": true,+   "checks": [+    {+     "quantity": "massG",+     "expected": 307.04,+     "measured": 307.0353996706151,+     "offPct": 0.0014982834109282007,+     "pass": true+    },+    {+     "quantity": "centerOfMassMm",+     "expected": [+      51.38,+      10.0,+      30.0+     ],+     "measured": [+      51.381323,+      10.0,+      30.0+     ],+     "pass": true+    }+   ],+   "fails": [],+   "seconds": 154.2+  },+  {+   "id": "cswa-03-3dengr-q8-hole30",+   "title": "3dengr Q8: the hole changed to \u00d830",+   "official": false,+   "source": "https://www.3dengr.com/cswa-practice-questions.html",+   "expected": {+    "massG": 285.83,+    "tolerancePct": 1.0+   },+   "material": {+    "name": "6061 Alloy",+    "densityKgM3": 2700+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792190208004.SLDPRT",+    "durationMs": 32522,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792190208004.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":28.4,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 5 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 231s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":5,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792190208004.SLDPRT\",\"deleted\":[\"Sketch6\",\"Boss-Extrude5\",\"Plane2\",\"Sketch7\",\"Cut-Extrude2\"],\"featuresDeleted\":5,\"passes\":1,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch_rect\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[0.0,0.0],[100.0,20.0]]}}],\"heightMm\":20.0,\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.front\",\"sketch.rect\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch8\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false,\"widthMm\":100.0},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":60.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude6\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch8\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"hole\",\"result\":{\"depthMm\":null,\"diameterMm\":30.0,\"face\":{\"atPointMm\":[25.0,20.0,30.0],\"heightMm\":20.0,\"normal\":[-0.0,1.0,-0.0],\"pickedBy\":\"geometry\",\"plane\":\"Top Plane\"},\"feature\":\"Cut-Extrude3\",\"features\":[\"Cut-Extrude3\"],\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"hole.simple\"]},\"steps\":[{\"op\":\"sketch\",\"result\":{\"createdPlane\":\"Plane3\",\"entities\":[{\"circle\":{\"centerMm\":[25.0,-30.0],\"radiusMm\":15.0}}],\"mapped\":true,\"plane\":{\"offsetFrom\":\"Top Plane\",\"offsetMm\":20.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"radiusMm\":15.0,\"resolvedPlane\":{\"offsetFrom\":\"Top Plane\",\"offsetMm\":20.0,\"plane\":\"Plane3\",\"verified\":true},\"sketch\":\"Sketch9\",\"sketchNormal\":[0.0,1.0,0.0],\"sketchedOn\":\"Plane3\",\"transformInverted\":false}},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":0.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,1.0,0.0],\"sketchNormal\":[0.0,1.0,0.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":1,\"feature\":\"Cut-Extrude3\",\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch9\",\"throughAll\":true,\"upToFace\":null}}],\"throughAll\":true},\"step\":4},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"6061 Alloy\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":2700.0,\"densityRequested\":2700.0,\"material\":\"6061 Alloy\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":5}],\"success\":true,\"targetDocument\":\"Part1-1792190208004.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 28.4,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 5 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 231s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 5,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792190208004.SLDPRT",+       "deleted": [+        "Sketch6",+        "Boss-Extrude5",+        "Plane2",+        "Sketch7",+        "Cut-Extrude2"+       ],+       "featuresDeleted": 5,+       "passes": 1,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch_rect",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            0.0,+            0.0+           ],+           [+            100.0,+            20.0+           ]+          ]+         }+        }+       ],+       "heightMm": 20.0,+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.rect"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch8",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false,+       "widthMm": 100.0+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 60.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude6",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch8",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "hole",+      "result": {+       "depthMm": null,+       "diameterMm": 30.0,+       "face": {+        "atPointMm": [+         25.0,+         20.0,+         30.0+        ],+        "heightMm": 20.0,+        "normal": [+         -0.0,+         1.0,+         -0.0+        ],+        "pickedBy": "geometry",+        "plane": "Top Plane"+       },+       "feature": "Cut-Extrude3",+       "features": [+        "Cut-Extrude3"+       ],+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "hole.simple"+        ]+       },+       "steps": [+        {+         "op": "sketch",+         "result": {+          "createdPlane": "Plane3",+          "entities": [+           {+            "circle": {+             "centerMm": [+              25.0,+              -30.0+             ],+             "radiusMm": 15.0+            }+           }+          ],+          "mapped": true,+          "plane": {+           "offsetFrom": "Top Plane",+           "offsetMm": 20.0+          },+          "planeFrames": "plane transforms (they match the measured Front/Top axes)",+          "radiusMm": 15.0,+          "resolvedPlane": {+           "offsetFrom": "Top Plane",+           "offsetMm": 20.0,+           "plane": "Plane3",+           "verified": true+          },+          "sketch": "Sketch9",+          "sketchNormal": [+           0.0,+           1.0,+           0.0+          ],+          "sketchedOn": "Plane3",+          "transformInverted": false+         }+        },+        {+         "op": "cut",+         "result": {+          "depth2Mm": null,+          "depthMm": 0.0,+          "dir": {+           "flippedToFollowTheReference": false,+           "reference": [+            0.0,+            1.0,+            0.0+           ],+           "sketchNormal": [+            0.0,+            1.0,+            0.0+           ],+           "value": false+          },+          "direction": "one",+          "draftDeg": null,+          "draftInward": null,+          "endCondition": 1,+          "feature": "Cut-Extrude3",+          "regions": null,+          "reverse": false,+          "sketch": "Sketch9",+          "throughAll": true,+          "upToFace": null+         }+        }+       ],+       "throughAll": true+      },+      "step": 4+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "6061 Alloy"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 2700.0,+       "densityRequested": 2700.0,+       "material": "6061 Alloy",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 5+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792190208004.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     0.0,+     0.0,+     0.0,+     0.1,+     0.02,+     0.06+    ],+    "centerOfMass": [+     0.05333855767238339,+     0.009999999999999998,+     0.03+    ],+    "centerOfMassMm": [+     53.338558,+     10.0,+     30.0+    ],+    "density": 2700.0,+    "densityKgM3": 2700.0,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "durationMs": 2254,+    "error": "",+    "massG": 285.829649258884,+    "massKg": 0.285829649258884,+    "materialName": "6061 Alloy",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[0.0,0.0,0.0,0.1,0.02,0.06],\"centerOfMass\":[0.05333855767238339,0.009999999999999998,0.03],\"centerOfMassMm\":[53.338558,10.0,30.0],\"density\":2700.0,\"densityKgM3\":2700.0,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"massG\":285.829649258884,\"massKg\":0.285829649258884,\"materialName\":\"6061 Alloy\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 264s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.01887123889803847,\"surfaceAreaMm2\":18871.238898038468,\"timeoutSeconds\":120,\"volumeM3\":0.00010586283305884592,\"volumeMm3\":105862.83305884592}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 264s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.01887123889803847,+    "surfaceAreaMm2": 18871.238898038468,+    "timeoutSeconds": 120,+    "volumeM3": 0.00010586283305884592,+    "volumeMm3": 105862.83305884592+   },+   "pass": true,+   "checks": [+    {+     "quantity": "massG",+     "expected": 285.83,+     "measured": 285.829649258884,+     "offPct": 0.00012270969317231364,+     "pass": true+    }+   ],+   "fails": [],+   "seconds": 34.8+  },+  {+   "id": "cswa-04-3dengr-q9-l-bracket",+   "title": "3dengr Q9: an L-bracket in AISI 1020, ONE polyline sketch",+   "official": false,+   "source": "https://www.3dengr.com/cswa-practice-questions.html",+   "expected": {+    "massG": 410.8,+    "centerOfMassMm": [+     26.54,+     16.54,+     20.0+    ],+    "tolerancePct": 1.0+   },+   "material": {+    "name": "AISI 1020",+    "densityKgM3": 7900+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792190208004.SLDPRT",+    "durationMs": 20010,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792190208004.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":15.9,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 4 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 266s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":4,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792190208004.SLDPRT\",\"deleted\":[\"Sketch8\",\"Boss-Extrude6\",\"Plane3\",\"Sketch9\",\"Cut-Extrude3\"],\"featuresDeleted\":5,\"passes\":1,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"line\":{\"fromMm\":[0.0,0.0],\"toMm\":[80.0,0.0]}},{\"line\":{\"fromMm\":[80.0,0.0],\"toMm\":[80.0,10.0]}},{\"line\":{\"fromMm\":[80.0,10.0],\"toMm\":[10.0,10.0]}},{\"line\":{\"fromMm\":[10.0,10.0],\"toMm\":[10.0,60.0]}},{\"line\":{\"fromMm\":[10.0,60.0],\"toMm\":[0.0,60.0]}},{\"line\":{\"fromMm\":[0.0,60.0],\"toMm\":[0.0,0.0]}}],\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.front\",\"sketch.multiProfile\",\"sketch.line\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch10\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":40.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude7\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch10\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"AISI 1020\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":7900.000000000001,\"densityRequested\":7900.0,\"material\":\"AISI 1020\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":4}],\"success\":true,\"targetDocument\":\"Part1-1792190208004.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 15.9,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 4 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 266s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 4,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792190208004.SLDPRT",+       "deleted": [+        "Sketch8",+        "Boss-Extrude6",+        "Plane3",+        "Sketch9",+        "Cut-Extrude3"+       ],+       "featuresDeleted": 5,+       "passes": 1,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "line": {+          "fromMm": [+           0.0,+           0.0+          ],+          "toMm": [+           80.0,+           0.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           80.0,+           0.0+          ],+          "toMm": [+           80.0,+           10.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           80.0,+           10.0+          ],+          "toMm": [+           10.0,+           10.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           10.0,+           10.0+          ],+          "toMm": [+           10.0,+           60.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           10.0,+           60.0+          ],+          "toMm": [+           0.0,+           60.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           0.0,+           60.0+          ],+          "toMm": [+           0.0,+           0.0+          ]+         }+        }+       ],+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.multiProfile",+         "sketch.line"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch10",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 40.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude7",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch10",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "AISI 1020"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 7900.000000000001,+       "densityRequested": 7900.0,+       "material": "AISI 1020",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 4+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792190208004.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     0.0,+     0.0,+     0.0,+     0.08,+     0.06,+     0.04+    ],+    "centerOfMass": [+     0.026538461538461535,+     0.016538461538461537,+     0.019999999999999997+    ],+    "centerOfMassMm": [+     26.538462,+     16.538462,+     20.0+    ],+    "density": 7900.000000000001,+    "densityKgM3": 7900.000000000001,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "durationMs": 2357,+    "error": "",+    "massG": 410.80000000000007,+    "massKg": 0.41080000000000005,+    "materialName": "AISI 1020",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[0.0,0.0,0.0,0.08,0.06,0.04],\"centerOfMass\":[0.026538461538461535,0.016538461538461537,0.019999999999999997],\"centerOfMassMm\":[26.538462,16.538462,20.0],\"density\":7900.000000000001,\"densityKgM3\":7900.000000000001,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"massG\":410.80000000000007,\"massKg\":0.41080000000000005,\"materialName\":\"AISI 1020\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 286s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.0138,\"surfaceAreaMm2\":13800.0,\"timeoutSeconds\":120,\"volumeM3\":0.000052,\"volumeMm3\":52000.0}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 286s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.0138,+    "surfaceAreaMm2": 13800.0,+    "timeoutSeconds": 120,+    "volumeM3": 5.2e-05,+    "volumeMm3": 52000.0+   },+   "pass": true,+   "checks": [+    {+     "quantity": "massG",+     "expected": 410.8,+     "measured": 410.80000000000007,+     "offPct": 1.3837248992407013e-14,+     "pass": true+    },+    {+     "quantity": "centerOfMassMm",+     "expected": [+      26.54,+      16.54,+      20.0+     ],+     "measured": [+      26.538462,+      16.538462,+      20.0+     ],+     "pass": true+    }+   ],+   "fails": [],+   "seconds": 22.4+  },+  {+   "id": "cswa-05-tool-block-step1",+   "title": "Official Tool Block, Step 1 (Q3): A 81, B 57, C 43",+   "official": true,+   "source": "https://www.solidworks.com/sites/default/files/2017-12/CSWASampleExam.pdf (Dassault CSWA Sample Exam, 2017 edition; archive http://web.archive.org/web/20251230104817/https://www.solidworks.com/sites/default/files/2017-12/CSWASampleExam.pdf)",+   "expected": {+    "massG": 939.54,+    "tolerancePct": 1.0+   },+   "material": {+    "name": "AISI 1020",+    "densityKgM3": 7900+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792190208004.SLDPRT",+    "durationMs": 18995,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792190208004.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":14.8,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 4 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 288s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":4,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792190208004.SLDPRT\",\"deleted\":[\"Sketch10\",\"Boss-Extrude7\"],\"featuresDeleted\":2,\"passes\":1,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"line\":{\"fromMm\":[0.0,18.0],\"toMm\":[18.243084987875623,14.783251905279968]}},{\"arc\":{\"ccw\":true,\"centerMm\":[21.5424003635473,33.494599212511915],\"endMm\":[38.0,24.0],\"radiusMm\":19.0,\"startMm\":[18.243084987875623,14.783251905279968]}},{\"line\":{\"fromMm\":[38.0,24.0],\"toMm\":[62.00000000000001,24.0]}},{\"line\":{\"fromMm\":[67.0,19.0],\"toMm\":[67.0,0.0]}},{\"line\":{\"fromMm\":[67.0,0.0],\"toMm\":[38.0,-33.0]}},{\"line\":{\"fromMm\":[38.0,-33.0],\"toMm\":[32.788067396763054,-33.0]}},{\"arc\":{\"ccw\":false,\"centerMm\":[54.69696969696975,-13.999999999999972],\"endMm\":[26.012264996781063,-18.264705882352946],\"radiusMm\":29.000000000000053,\"startMm\":[32.788067396763054,-33.0]}},{\"arc\":{\"ccw\":true,\"centerMm\":[21.066626255369176,-18.999999999999964],\"endMm\":[21.06662625536923,-14.0],\"radiusMm\":5.000000000000048,\"startMm\":[26.012264996781063,-18.264705882352946]}},{\"line\":{\"fromMm\":[21.06662625536923,-14.0],\"toMm\":[-7.0,-14.0]}},{\"line\":{\"fromMm\":[-14.0,-7.0],\"toMm\":[-14.0,11.000000000000002]}},{\"line\":{\"fromMm\":[-7.0,18.0],\"toMm\":[0.0,18.0]}},{\"line\":{\"fromMm\":[-14.0,11.000000000000002],\"toMm\":[-7.0,18.0]}},{\"line\":{\"fromMm\":[-7.0,-14.0],\"toMm\":[-14.0,-7.0]}},{\"line\":{\"fromMm\":[62.00000000000001,24.0],\"toMm\":[67.0,19.0]}},{\"circle\":{\"centerMm\":[0.0,0.0],\"radiusMm\":7.0}}],\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.front\",\"sketch.circle\",\"sketch.multiProfile\",\"sketch.line\",\"sketch.arc\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch11\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":43.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude8\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch11\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"AISI 1020\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":7900.0,\"densityRequested\":7900.0,\"material\":\"AISI 1020\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":4}],\"success\":true,\"targetDocument\":\"Part1-1792190208004.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 14.8,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 4 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 288s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 4,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792190208004.SLDPRT",+       "deleted": [+        "Sketch10",+        "Boss-Extrude7"+       ],+       "featuresDeleted": 2,+       "passes": 1,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "line": {+          "fromMm": [+           0.0,+           18.0+          ],+          "toMm": [+           18.243084987875623,+           14.783251905279968+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           21.5424003635473,+           33.494599212511915+          ],+          "endMm": [+           38.0,+           24.0+          ],+          "radiusMm": 19.0,+          "startMm": [+           18.243084987875623,+           14.783251905279968+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           38.0,+           24.0+          ],+          "toMm": [+           62.00000000000001,+           24.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           67.0,+           19.0+          ],+          "toMm": [+           67.0,+           0.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           67.0,+           0.0+          ],+          "toMm": [+           38.0,+           -33.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           38.0,+           -33.0+          ],+          "toMm": [+           32.788067396763054,+           -33.0+          ]+         }+        },+        {+         "arc": {+          "ccw": false,+          "centerMm": [+           54.69696969696975,+           -13.999999999999972+          ],+          "endMm": [+           26.012264996781063,+           -18.264705882352946+          ],+          "radiusMm": 29.000000000000053,+          "startMm": [+           32.788067396763054,+           -33.0+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           21.066626255369176,+           -18.999999999999964+          ],+          "endMm": [+           21.06662625536923,+           -14.0+          ],+          "radiusMm": 5.000000000000048,+          "startMm": [+           26.012264996781063,+           -18.264705882352946+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           21.06662625536923,+           -14.0+          ],+          "toMm": [+           -7.0,+           -14.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -14.0,+           -7.0+          ],+          "toMm": [+           -14.0,+           11.000000000000002+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -7.0,+           18.0+          ],+          "toMm": [+           0.0,+           18.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -14.0,+           11.000000000000002+          ],+          "toMm": [+           -7.0,+           18.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -7.0,+           -14.0+          ],+          "toMm": [+           -14.0,+           -7.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           62.00000000000001,+           24.0+          ],+          "toMm": [+           67.0,+           19.0+          ]+         }+        },+        {+         "circle": {+          "centerMm": [+           0.0,+           0.0+          ],+          "radiusMm": 7.0+         }+        }+       ],+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.circle",+         "sketch.multiProfile",+         "sketch.line",+         "sketch.arc"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch11",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 43.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude8",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch11",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "AISI 1020"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 7900.0,+       "densityRequested": 7900.0,+       "material": "AISI 1020",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 4+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792190208004.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     -0.014,+     -0.033,+     0.0,+     0.067,+     0.024,+     0.043+    ],+    "centerOfMass": [+     0.03062236692252704,+     0.0003076468646468417,+     0.0215+    ],+    "centerOfMassMm": [+     30.622367,+     0.307647,+     21.5+    ],+    "density": 7900.0,+    "densityKgM3": 7900.0,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "durationMs": 2285,+    "error": "",+    "massG": 939.5395682014016,+    "massKg": 0.9395395682014016,+    "materialName": "AISI 1020",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[-0.014,-0.033,0.0,0.067,0.024,0.043],\"centerOfMass\":[0.03062236692252704,0.0003076468646468417,0.0215],\"centerOfMassMm\":[30.622367,0.307647,21.5],\"density\":7900.0,\"densityKgM3\":7900.0,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"massG\":939.5395682014016,\"massKg\":0.9395395682014016,\"materialName\":\"AISI 1020\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 307s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.01763006429786853,\"surfaceAreaMm2\":17630.06429786853,\"timeoutSeconds\":120,\"volumeM3\":0.0001189290592660002,\"volumeMm3\":118929.0592660002}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 307s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.01763006429786853,+    "surfaceAreaMm2": 17630.06429786853,+    "timeoutSeconds": 120,+    "volumeM3": 0.0001189290592660002,+    "volumeMm3": 118929.0592660002+   },+   "pass": true,+   "checks": [+    {+     "quantity": "massG",+     "expected": 939.54,+     "measured": 939.5395682014016,+     "offPct": 4.595851143710552e-05,+     "pass": true+    }+   ],+   "fails": [],+   "seconds": 21.3+  },+  {+   "id": "cswa-06-tool-block-step2",+   "title": "Official Tool Block, Step 2 (Q4): A 84, B 59, C 45, all other dimensions the same",+   "official": true,+   "source": "https://www.solidworks.com/sites/default/files/2017-12/CSWASampleExam.pdf (Dassault CSWA Sample Exam, 2017 edition; archive http://web.archive.org/web/20251230104817/https://www.solidworks.com/sites/default/files/2017-12/CSWASampleExam.pdf)",+   "expected": {+    "massG": 1032.32,+    "tolerancePct": 1.0+   },+   "material": {+    "name": "AISI 1020",+    "densityKgM3": 7900+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792190208004.SLDPRT",+    "durationMs": 20744,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792190208004.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":16.7,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 4 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 310s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":4,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792190208004.SLDPRT\",\"deleted\":[\"Sketch11\",\"Boss-Extrude8\"],\"featuresDeleted\":2,\"passes\":1,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"line\":{\"fromMm\":[0.0,18.0],\"toMm\":[20.10404235201319,14.455114912034407]}},{\"arc\":{\"ccw\":true,\"centerMm\":[23.40335772768487,33.166462219266364],\"endMm\":[41.0,26.0],\"radiusMm\":19.0,\"startMm\":[20.10404235201319,14.455114912034407]}},{\"line\":{\"fromMm\":[41.0,26.0],\"toMm\":[65.0,26.0]}},{\"line\":{\"fromMm\":[70.0,21.0],\"toMm\":[70.0,2.0]}},{\"line\":{\"fromMm\":[70.0,2.0],\"toMm\":[41.0,-33.0]}},{\"line\":{\"fromMm\":[41.0,-33.0],\"toMm\":[34.8339548426505,-33.0]}},{\"arc\":{\"ccw\":false,\"centerMm\":[56.74285714285731,-14.000000000000036],\"endMm\":[28.0581524426685,-18.264705882352946],\"radiusMm\":29.000000000000107,\"startMm\":[34.8339548426505,-33.0]}},{\"arc\":{\"ccw\":true,\"centerMm\":[23.112513701256617,-18.999999999999982],\"endMm\":[23.112513701256667,-14.0],\"radiusMm\":5.0000000000000515,\"startMm\":[28.0581524426685,-18.264705882352946]}},{\"line\":{\"fromMm\":[23.112513701256667,-14.0],\"toMm\":[-7.0,-14.0]}},{\"line\":{\"fromMm\":[-14.0,-7.0],\"toMm\":[-14.0,11.000000000000002]}},{\"line\":{\"fromMm\":[-7.0,18.0],\"toMm\":[0.0,18.0]}},{\"line\":{\"fromMm\":[-14.0,11.000000000000002],\"toMm\":[-7.0,18.0]}},{\"line\":{\"fromMm\":[-7.0,-14.0],\"toMm\":[-14.0,-7.0]}},{\"line\":{\"fromMm\":[65.0,26.0],\"toMm\":[70.0,21.0]}},{\"circle\":{\"centerMm\":[0.0,0.0],\"radiusMm\":7.0}}],\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.front\",\"sketch.circle\",\"sketch.multiProfile\",\"sketch.line\",\"sketch.arc\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch12\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":45.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude9\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch12\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"AISI 1020\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":7899.999999999999,\"densityRequested\":7900.0,\"material\":\"AISI 1020\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":4}],\"success\":true,\"targetDocument\":\"Part1-1792190208004.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 16.7,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 4 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 310s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 4,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792190208004.SLDPRT",+       "deleted": [+        "Sketch11",+        "Boss-Extrude8"+       ],+       "featuresDeleted": 2,+       "passes": 1,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "line": {+          "fromMm": [+           0.0,+           18.0+          ],+          "toMm": [+           20.10404235201319,+           14.455114912034407+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           23.40335772768487,+           33.166462219266364+          ],+          "endMm": [+           41.0,+           26.0+          ],+          "radiusMm": 19.0,+          "startMm": [+           20.10404235201319,+           14.455114912034407+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           41.0,+           26.0+          ],+          "toMm": [+           65.0,+           26.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           70.0,+           21.0+          ],+          "toMm": [+           70.0,+           2.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           70.0,+           2.0+          ],+          "toMm": [+           41.0,+           -33.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           41.0,+           -33.0+          ],+          "toMm": [+           34.8339548426505,+           -33.0+          ]+         }+        },+        {+         "arc": {+          "ccw": false,+          "centerMm": [+           56.74285714285731,+           -14.000000000000036+          ],+          "endMm": [+           28.0581524426685,+           -18.264705882352946+          ],+          "radiusMm": 29.000000000000107,+          "startMm": [+           34.8339548426505,+           -33.0+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           23.112513701256617,+           -18.999999999999982+          ],+          "endMm": [+           23.112513701256667,+           -14.0+          ],+          "radiusMm": 5.0000000000000515,+          "startMm": [+           28.0581524426685,+           -18.264705882352946+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           23.112513701256667,+           -14.0+          ],+          "toMm": [+           -7.0,+           -14.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -14.0,+           -7.0+          ],+          "toMm": [+           -14.0,+           11.000000000000002+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -7.0,+           18.0+          ],+          "toMm": [+           0.0,+           18.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -14.0,+           11.000000000000002+          ],+          "toMm": [+           -7.0,+           18.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -7.0,+           -14.0+          ],+          "toMm": [+           -14.0,+           -7.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           65.0,+           26.0+          ],+          "toMm": [+           70.0,+           21.0+          ]+         }+        },+        {+         "circle": {+          "centerMm": [+           0.0,+           0.0+          ],+          "radiusMm": 7.0+         }+        }+       ],+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.circle",+         "sketch.multiProfile",+         "sketch.line",+         "sketch.arc"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch12",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 45.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude9",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch12",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "AISI 1020"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 7899.999999999999,+       "densityRequested": 7900.0,+       "material": "AISI 1020",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 4+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792190208004.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     -0.014,+     -0.033,+     0.0,+     0.07,+     0.026,+     0.045+    ],+    "centerOfMass": [+     0.03255336787850931,+     0.0007907183444125474,+     0.0225+    ],+    "centerOfMassMm": [+     32.553368,+     0.790718,+     22.5+    ],+    "density": 7899.999999999999,+    "densityKgM3": 7899.999999999999,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "durationMs": 2621,+    "error": "",+    "massG": 1032.3206766712833,+    "massKg": 1.0323206766712834,+    "materialName": "AISI 1020",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[-0.014,-0.033,0.0,0.07,0.026,0.045],\"centerOfMass\":[0.03255336787850931,0.0007907183444125474,0.0225],\"centerOfMassMm\":[32.553368,0.790718,22.5],\"density\":7899.999999999999,\"densityKgM3\":7899.999999999999,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"massG\":1032.3206766712833,\"massKg\":1.0323206766712834,\"materialName\":\"AISI 1020\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 330s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.0188741376700506,\"surfaceAreaMm2\":18874.137670050597,\"timeoutSeconds\":120,\"volumeM3\":0.00013067350337611183,\"volumeMm3\":130673.50337611182}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 330s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.0188741376700506,+    "surfaceAreaMm2": 18874.137670050597,+    "timeoutSeconds": 120,+    "volumeM3": 0.00013067350337611183,+    "volumeMm3": 130673.50337611182+   },+   "pass": true,+   "checks": [+    {+     "quantity": "massG",+     "expected": 1032.32,+     "measured": 1032.3206766712833,+     "offPct": 6.55485976608361e-05,+     "pass": true+    }+   ],+   "fails": [],+   "seconds": 23.4+  },+  {+   "id": "cswa-07-tool-block-step3",+   "title": "Official Tool Block, Step 3 (Q5): A 86, B 58, C 44, then remove material",+   "official": true,+   "source": "https://www.solidworks.com/sites/default/files/2017-12/CSWASampleExam.pdf (Dassault CSWA Sample Exam, 2017 edition; archive http://web.archive.org/web/20251230104817/https://www.solidworks.com/sites/default/files/2017-12/CSWASampleExam.pdf)",+   "expected": {+    "massG": 628.18,+    "tolerancePct": 1.0+   },+   "material": {+    "name": "AISI 1020",+    "densityKgM3": 7900+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792190208004.SLDPRT",+    "durationMs": 62905,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792190208004.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":58.6,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 11 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 333s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":11,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792190208004.SLDPRT\",\"deleted\":[\"Sketch12\",\"Boss-Extrude9\"],\"featuresDeleted\":2,\"passes\":1,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"line\":{\"fromMm\":[0.0,18.0],\"toMm\":[22.3613808357771,14.057085232755291]}},{\"arc\":{\"ccw\":true,\"centerMm\":[25.66069621144878,32.768432539987224],\"endMm\":[43.0,25.0],\"radiusMm\":18.99999999999998,\"startMm\":[22.3613808357771,14.057085232755291]}},{\"line\":{\"fromMm\":[43.0,25.0],\"toMm\":[67.0,25.0]}},{\"line\":{\"fromMm\":[72.0,20.0],\"toMm\":[72.0,1.0]}},{\"line\":{\"fromMm\":[72.0,1.0],\"toMm\":[43.0,-33.0]}},{\"line\":{\"fromMm\":[43.0,-33.0],\"toMm\":[37.296980052734526,-33.0]}},{\"arc\":{\"ccw\":false,\"centerMm\":[59.20588235294099,-13.99999999999998],\"endMm\":[30.521177652752534,-18.264705882352946],\"radiusMm\":28.999999999999883,\"startMm\":[37.296980052734526,-33.0]}},{\"arc\":{\"ccw\":true,\"centerMm\":[25.575538911340765,-18.99999999999997],\"endMm\":[25.5755389113407,-14.0],\"radiusMm\":4.9999999999999325,\"startMm\":[30.521177652752534,-18.264705882352946]}},{\"line\":{\"fromMm\":[25.5755389113407,-14.0],\"toMm\":[-7.0,-14.0]}},{\"line\":{\"fromMm\":[-14.0,-7.0],\"toMm\":[-14.0,11.000000000000002]}},{\"line\":{\"fromMm\":[-7.0,18.0],\"toMm\":[0.0,18.0]}},{\"line\":{\"fromMm\":[-14.0,11.000000000000002],\"toMm\":[-7.0,18.0]}},{\"line\":{\"fromMm\":[-7.0,-14.0],\"toMm\":[-14.0,-7.0]}},{\"line\":{\"fromMm\":[67.0,25.0],\"toMm\":[72.0,20.0]}},{\"circle\":{\"centerMm\":[0.0,0.0],\"radiusMm\":7.0}}],\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.front\",\"sketch.circle\",\"sketch.multiProfile\",\"sketch.line\",\"sketch.arc\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch13\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":44.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude10\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch13\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"AISI 1020\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":7899.999999999999,\"densityRequested\":7900.0,\"material\":\"AISI 1020\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":4},{\"op\":\"sketch\",\"result\":{\"createdPlane\":\"Plane4\",\"entities\":[{\"circle\":{\"centerMm\":[72.0,28.70187343596344],\"radiusMm\":41.0}}],\"mapped\":true,\"plane\":{\"offsetFrom\":{\"face\":{\"atPointMm\":[-10.0,0.0,0.0]}},\"offsetMm\":-12.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.faceOffset\",\"sketch.circle\"]},\"radiusMm\":41.0,\"resolvedPlane\":{\"faceNormal\":[-0.0,-0.0,-1.0],\"faceOffsetMm\":-12.0,\"fromFace\":true,\"offsetFrom\":\"Front Plane\",\"offsetMm\":12.0,\"pickedBy\":\"geometry\",\"plane\":\"Plane4\",\"verified\":true},\"sketch\":\"Sketch14\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Plane4\",\"transformInverted\":false},\"step\":5},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":24.0,\"dir\":{\"flippedToFollowTheReference\":true,\"reference\":[-0.0,-0.0,-1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":true},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude4\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one.reversed\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch14\",\"throughAll\":false,\"upToFace\":null},\"step\":6},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[-20.0,-40.0],[85.99999999999999,-13.999999999999998]]}}],\"heightMm\":26.0,\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[-10.0,0.0,44.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.front.positive\",\"sketch.rect\",\"select.multiSelectTyped\"]},\"resolvedPlane\":{\"faceNormal\":[0.0,0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch15\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false,\"widthMm\":106.0},\"step\":7},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":19.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude5\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch15\",\"throughAll\":false,\"upToFace\":null},\"step\":8},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[-20.0,-40.0],[20.0,40.0]]}}],\"heightMm\":80.0,\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[-10.0,0.0,44.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.front.positive\",\"sketch.rect\",\"select.multiSelectTyped\"]},\"resolvedPlane\":{\"faceNormal\":[0.0,0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch16\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false,\"widthMm\":40.0},\"step\":9},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":19.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude6\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch16\",\"throughAll\":false,\"upToFace\":null},\"step\":10},{\"op\":\"hole\",\"result\":{\"depthMm\":null,\"diameterMm\":11.0,\"face\":{\"atPointMm\":[58.0,11.0,44.0],\"heightMm\":44.0,\"normal\":[0.0,0.0,1.0],\"pickedBy\":\"geometry\",\"plane\":\"Front Plane\"},\"feature\":\"Cut-Extrude7\",\"features\":[\"Cut-Extrude7\"],\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"hole.simple\"]},\"steps\":[{\"op\":\"sketch\",\"result\":{\"createdPlane\":\"Plane5\",\"entities\":[{\"circle\":{\"centerMm\":[58.0,11.0],\"radiusMm\":5.5}}],\"mapped\":true,\"plane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"radiusMm\":5.5,\"resolvedPlane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"plane\":\"Plane5\",\"verified\":true},\"sketch\":\"Sketch17\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Plane5\",\"transformInverted\":false}},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":0.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":1,\"feature\":\"Cut-Extrude7\",\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch17\",\"throughAll\":true,\"upToFace\":null}}],\"throughAll\":true},\"step\":11}],\"success\":true,\"targetDocument\":\"Part1-1792190208004.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 58.6,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 11 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 333s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 11,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792190208004.SLDPRT",+       "deleted": [+        "Sketch12",+        "Boss-Extrude9"+       ],+       "featuresDeleted": 2,+       "passes": 1,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "line": {+          "fromMm": [+           0.0,+           18.0+          ],+          "toMm": [+           22.3613808357771,+           14.057085232755291+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           25.66069621144878,+           32.768432539987224+          ],+          "endMm": [+           43.0,+           25.0+          ],+          "radiusMm": 18.99999999999998,+          "startMm": [+           22.3613808357771,+           14.057085232755291+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           43.0,+           25.0+          ],+          "toMm": [+           67.0,+           25.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           72.0,+           20.0+          ],+          "toMm": [+           72.0,+           1.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           72.0,+           1.0+          ],+          "toMm": [+           43.0,+           -33.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           43.0,+           -33.0+          ],+          "toMm": [+           37.296980052734526,+           -33.0+          ]+         }+        },+        {+         "arc": {+          "ccw": false,+          "centerMm": [+           59.20588235294099,+           -13.99999999999998+          ],+          "endMm": [+           30.521177652752534,+           -18.264705882352946+          ],+          "radiusMm": 28.999999999999883,+          "startMm": [+           37.296980052734526,+           -33.0+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           25.575538911340765,+           -18.99999999999997+          ],+          "endMm": [+           25.5755389113407,+           -14.0+          ],+          "radiusMm": 4.9999999999999325,+          "startMm": [+           30.521177652752534,+           -18.264705882352946+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           25.5755389113407,+           -14.0+          ],+          "toMm": [+           -7.0,+           -14.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -14.0,+           -7.0+          ],+          "toMm": [+           -14.0,+           11.000000000000002+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -7.0,+           18.0+          ],+          "toMm": [+           0.0,+           18.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -14.0,+           11.000000000000002+          ],+          "toMm": [+           -7.0,+           18.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -7.0,+           -14.0+          ],+          "toMm": [+           -14.0,+           -7.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           67.0,+           25.0+          ],+          "toMm": [+           72.0,+           20.0+          ]+         }+        },+        {+         "circle": {+          "centerMm": [+           0.0,+           0.0+          ],+          "radiusMm": 7.0+         }+        }+       ],+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.circle",+         "sketch.multiProfile",+         "sketch.line",+         "sketch.arc"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch13",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 44.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude10",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch13",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "AISI 1020"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 7899.999999999999,+       "densityRequested": 7900.0,+       "material": "AISI 1020",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 4+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": "Plane4",+       "entities": [+        {+         "circle": {+          "centerMm": [+           72.0,+           28.70187343596344+          ],+          "radiusMm": 41.0+         }+        }+       ],+       "mapped": true,+       "plane": {+        "offsetFrom": {+         "face": {+          "atPointMm": [+           -10.0,+           0.0,+           0.0+          ]+         }+        },+        "offsetMm": -12.0+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.faceOffset",+         "sketch.circle"+        ]+       },+       "radiusMm": 41.0,+       "resolvedPlane": {+        "faceNormal": [+         -0.0,+         -0.0,+         -1.0+        ],+        "faceOffsetMm": -12.0,+        "fromFace": true,+        "offsetFrom": "Front Plane",+        "offsetMm": 12.0,+        "pickedBy": "geometry",+        "plane": "Plane4",+        "verified": true+       },+       "sketch": "Sketch14",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Plane4",+       "transformInverted": false+      },+      "step": 5+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 24.0,+       "dir": {+        "flippedToFollowTheReference": true,+        "reference": [+         -0.0,+         -0.0,+         -1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": true+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Cut-Extrude4",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.one.reversed"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch14",+       "throughAll": false,+       "upToFace": null+      },+      "step": 6+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            -20.0,+            -40.0+           ],+           [+            85.99999999999999,+            -13.999999999999998+           ]+          ]+         }+        }+       ],+       "heightMm": 26.0,+       "mapped": true,+       "plane": {+        "face": {+         "atPointMm": [+          -10.0,+          0.0,+          44.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.face.front.positive",+         "sketch.rect",+         "select.multiSelectTyped"+        ]+       },+       "resolvedPlane": {+        "faceNormal": [+         0.0,+         0.0,+         1.0+        ],+        "offsetFrom": "Front Plane",+        "offsetMm": 44.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch15",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false,+       "widthMm": 106.0+      },+      "step": 7+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 19.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Cut-Extrude5",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch15",+       "throughAll": false,+       "upToFace": null+      },+      "step": 8+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            -20.0,+            -40.0+           ],+           [+            20.0,+            40.0+           ]+          ]+         }+        }+       ],+       "heightMm": 80.0,+       "mapped": true,+       "plane": {+        "face": {+         "atPointMm": [+          -10.0,+          0.0,+          44.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.face.front.positive",+         "sketch.rect",+         "select.multiSelectTyped"+        ]+       },+       "resolvedPlane": {+        "faceNormal": [+         0.0,+         0.0,+         1.0+        ],+        "offsetFrom": "Front Plane",+        "offsetMm": 44.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch16",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false,+       "widthMm": 40.0+      },+      "step": 9+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 19.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Cut-Extrude6",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch16",+       "throughAll": false,+       "upToFace": null+      },+      "step": 10+     },+     {+      "op": "hole",+      "result": {+       "depthMm": null,+       "diameterMm": 11.0,+       "face": {+        "atPointMm": [+         58.0,+         11.0,+         44.0+        ],+        "heightMm": 44.0,+        "normal": [+         0.0,+         0.0,+         1.0+        ],+        "pickedBy": "geometry",+        "plane": "Front Plane"+       },+       "feature": "Cut-Extrude7",+       "features": [+        "Cut-Extrude7"+       ],+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "hole.simple"+        ]+       },+       "steps": [+        {+         "op": "sketch",+         "result": {+          "createdPlane": "Plane5",+          "entities": [+           {+            "circle": {+             "centerMm": [+              58.0,+              11.0+             ],+             "radiusMm": 5.5+            }+           }+          ],+          "mapped": true,+          "plane": {+           "offsetFrom": "Front Plane",+           "offsetMm": 44.0+          },+          "planeFrames": "plane transforms (they match the measured Front/Top axes)",+          "radiusMm": 5.5,+          "resolvedPlane": {+           "offsetFrom": "Front Plane",+           "offsetMm": 44.0,+           "plane": "Plane5",+           "verified": true+          },+          "sketch": "Sketch17",+          "sketchNormal": [+           0.0,+           0.0,+           1.0+          ],+          "sketchedOn": "Plane5",+          "transformInverted": false+         }+        },+        {+         "op": "cut",+         "result": {+          "depth2Mm": null,+          "depthMm": 0.0,+          "dir": {+           "flippedToFollowTheReference": false,+           "reference": [+            0.0,+            0.0,+            1.0+           ],+           "sketchNormal": [+            0.0,+            0.0,+            1.0+           ],+           "value": false+          },+          "direction": "one",+          "draftDeg": null,+          "draftInward": null,+          "endCondition": 1,+          "feature": "Cut-Extrude7",+          "regions": null,+          "reverse": false,+          "sketch": "Sketch17",+          "throughAll": true,+          "upToFace": null+         }+        }+       ],+       "throughAll": true+      },+      "step": 11+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792190208004.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     -0.014,+     -0.033,+     0.0,+     0.07200000000000001,+     0.025,+     0.044+    ],+    "centerOfMass": [+     0.03174279639698831,+     -0.0008683174573996889,+     0.017834837095750275+    ],+    "centerOfMassMm": [+     31.742796,+     -0.868317,+     17.834837+    ],+    "density": 7900.0,+    "densityKgM3": 7900.0,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "durationMs": 2399,+    "error": "",+    "massG": 628.1833833399141,+    "massKg": 0.6281833833399142,+    "materialName": "AISI 1020",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[-0.014,-0.033,0.0,0.07200000000000001,0.025,0.044],\"centerOfMass\":[0.03174279639698831,-0.0008683174573996889,0.017834837095750275],\"centerOfMassMm\":[31.742796,-0.868317,17.834837],\"density\":7900.0,\"densityKgM3\":7900.0,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"massG\":628.1833833399141,\"massKg\":0.6281833833399142,\"materialName\":\"AISI 1020\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 396s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.01771252880409412,\"surfaceAreaMm2\":17712.52880409412,\"timeoutSeconds\":120,\"volumeM3\":0.00007951688396707775,\"volumeMm3\":79516.88396707775}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 396s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.01771252880409412,+    "surfaceAreaMm2": 17712.52880409412,+    "timeoutSeconds": 120,+    "volumeM3": 7.951688396707775e-05,+    "volumeMm3": 79516.88396707775+   },+   "pass": true,+   "checks": [+    {+     "quantity": "massG",+     "expected": 628.18,+     "measured": 628.1833833399141,+     "offPct": 0.0005385940198978062,+     "pass": true+    }+   ],+   "fails": [],+   "seconds": 65.3+  },+  {+   "id": "cswa-08-tool-block-step4",+   "title": "Official Tool Block, Step 4 (Q6): a pocket 1 mm inside the front face's outline (Offset Entities, sketch regions)",+   "official": true,+   "source": "https://www.solidworks.com/sites/default/files/2017-12/CSWASampleExam.pdf (Dassault CSWA Sample Exam, 2017 edition; archive http://web.archive.org/web/20251230104817/https://www.solidworks.com/sites/default/files/2017-12/CSWASampleExam.pdf)",+   "expected": {+    "massG": 432.58,+    "tolerancePct": 1.0+   },+   "material": {+    "name": "AISI 1020",+    "densityKgM3": 7900+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792190208004.SLDPRT",+    "durationMs": 197471,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792190208004.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":102.1,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 15 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 398s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":15,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792190208004.SLDPRT\",\"deleted\":[\"Sketch13\",\"Boss-Extrude10\",\"Plane4\",\"Sketch14\",\"Cut-Extrude4\",\"Sketch15\",\"Cut-Extrude5\",\"Sketch16\",\"Cut-Extrude6\",\"Plane5\",\"Sketch17\",\"Cut-Extrude7\"],\"featuresDeleted\":12,\"passes\":1,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"line\":{\"fromMm\":[0.0,18.0],\"toMm\":[22.3613808357771,14.057085232755291]}},{\"arc\":{\"ccw\":true,\"centerMm\":[25.66069621144878,32.768432539987224],\"endMm\":[43.0,25.0],\"radiusMm\":18.99999999999998,\"startMm\":[22.3613808357771,14.057085232755291]}},{\"line\":{\"fromMm\":[43.0,25.0],\"toMm\":[67.0,25.0]}},{\"line\":{\"fromMm\":[72.0,20.0],\"toMm\":[72.0,1.0]}},{\"line\":{\"fromMm\":[72.0,1.0],\"toMm\":[43.0,-33.0]}},{\"line\":{\"fromMm\":[43.0,-33.0],\"toMm\":[37.296980052734526,-33.0]}},{\"arc\":{\"ccw\":false,\"centerMm\":[59.20588235294099,-13.99999999999998],\"endMm\":[30.521177652752534,-18.264705882352946],\"radiusMm\":28.999999999999883,\"startMm\":[37.296980052734526,-33.0]}},{\"arc\":{\"ccw\":true,\"centerMm\":[25.575538911340765,-18.99999999999997],\"endMm\":[25.5755389113407,-14.0],\"radiusMm\":4.9999999999999325,\"startMm\":[30.521177652752534,-18.264705882352946]}},{\"line\":{\"fromMm\":[25.5755389113407,-14.0],\"toMm\":[-7.0,-14.0]}},{\"line\":{\"fromMm\":[-14.0,-7.0],\"toMm\":[-14.0,11.000000000000002]}},{\"line\":{\"fromMm\":[-7.0,18.0],\"toMm\":[0.0,18.0]}},{\"line\":{\"fromMm\":[-14.0,11.000000000000002],\"toMm\":[-7.0,18.0]}},{\"line\":{\"fromMm\":[-7.0,-14.0],\"toMm\":[-14.0,-7.0]}},{\"line\":{\"fromMm\":[67.0,25.0],\"toMm\":[72.0,20.0]}},{\"circle\":{\"centerMm\":[0.0,0.0],\"radiusMm\":7.0}}],\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.front\",\"sketch.circle\",\"sketch.multiProfile\",\"sketch.line\",\"sketch.arc\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch18\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":44.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude11\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch18\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"AISI 1020\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":7899.999999999999,\"densityRequested\":7900.0,\"material\":\"AISI 1020\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":4},{\"op\":\"sketch\",\"result\":{\"createdPlane\":\"Plane6\",\"entities\":[{\"circle\":{\"centerMm\":[72.0,28.70187343596344],\"radiusMm\":41.0}}],\"mapped\":true,\"plane\":{\"offsetFrom\":{\"face\":{\"atPointMm\":[-10.0,0.0,0.0]}},\"offsetMm\":-12.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.faceOffset\",\"sketch.circle\"]},\"radiusMm\":41.0,\"resolvedPlane\":{\"faceNormal\":[-0.0,-0.0,-1.0],\"faceOffsetMm\":-12.0,\"fromFace\":true,\"offsetFrom\":\"Front Plane\",\"offsetMm\":12.0,\"pickedBy\":\"geometry\",\"plane\":\"Plane6\",\"verified\":true},\"sketch\":\"Sketch19\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Plane6\",\"transformInverted\":false},\"step\":5},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":24.0,\"dir\":{\"flippedToFollowTheReference\":true,\"reference\":[-0.0,-0.0,-1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":true},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude8\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one.reversed\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch19\",\"throughAll\":false,\"upToFace\":null},\"step\":6},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[-20.0,-40.0],[85.99999999999999,-13.999999999999998]]}}],\"heightMm\":26.0,\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[-10.0,0.0,44.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.front.positive\",\"sketch.rect\",\"select.multiSelectTyped\"]},\"resolvedPlane\":{\"faceNormal\":[0.0,0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch20\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false,\"widthMm\":106.0},\"step\":7},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":19.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude9\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch20\",\"throughAll\":false,\"upToFace\":null},\"step\":8},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[-20.0,-40.0],[20.0,40.0]]}}],\"heightMm\":80.0,\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[-10.0,0.0,44.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.front.positive\",\"sketch.rect\",\"select.multiSelectTyped\"]},\"resolvedPlane\":{\"faceNormal\":[0.0,0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch21\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false,\"widthMm\":40.0},\"step\":9},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":19.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude10\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch21\",\"throughAll\":false,\"upToFace\":null},\"step\":10},{\"op\":\"hole\",\"result\":{\"depthMm\":null,\"diameterMm\":11.0,\"face\":{\"atPointMm\":[58.0,11.0,44.0],\"heightMm\":44.0,\"normal\":[0.0,0.0,1.0],\"pickedBy\":\"geometry\",\"plane\":\"Front Plane\"},\"feature\":\"Cut-Extrude11\",\"features\":[\"Cut-Extrude11\"],\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"hole.simple\"]},\"steps\":[{\"op\":\"sketch\",\"result\":{\"createdPlane\":\"Plane7\",\"entities\":[{\"circle\":{\"centerMm\":[58.0,11.0],\"radiusMm\":5.5}}],\"mapped\":true,\"plane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"radiusMm\":5.5,\"resolvedPlane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"plane\":\"Plane7\",\"verified\":true},\"sketch\":\"Sketch22\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Plane7\",\"transformInverted\":false}},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":0.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":1,\"feature\":\"Cut-Extrude11\",\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch22\",\"throughAll\":true,\"upToFace\":null}}],\"throughAll\":true},\"step\":11},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"circle\":{\"centerMm\":[72.0,28.70187343596344],\"radiusMm\":42.0}}],\"mapped\":true,\"offsets\":[{\"offsetEntities\":{\"chain\":true,\"fromFace\":{\"atPointMm\":[70.0,10.0,44.0]},\"loops\":\"outer\",\"offsetMm\":-1.0,\"side\":\"inward\"},\"route\":\"IModelDoc2::SketchOffsetEntities2\",\"segments\":8,\"selected\":\"the face's outer loop (8 edges)\",\"side\":\"inward\",\"sideVerified\":true,\"tries\":[{\"farthestFromTheFaceMm\":0.0,\"landed\":\"inward\",\"offsetMm\":-1.0,\"segments\":8}],\"why\":null}],\"plane\":{\"face\":{\"atPointMm\":[70.0,10.0,44.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"sketch.offsetEntities.outer\",\"what\":\"a face's OUTER loop offset into the sketch: its edges selected, IModelDoc2::SketchOffsetEntities2 (side checked, redone the other way if SOLIDWORKS put it outside)\"}],\"variants\":[\"sketch.face.front.positive\",\"sketch.circle\",\"sketch.multiProfile\",\"sketch.offsetEntities.outer\",\"select.multiSelectTyped\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"radiusMm\":42.0,\"resolvedPlane\":{\"faceNormal\":[0.0,0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch23\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false},\"step\":12},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":12.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":5,\"feature\":\"Cut-Extrude12\",\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"cut.offsetFromSurface\",\"what\":\"a cut to a distance from a picked face\"},{\"variant\":\"cut.regions\",\"what\":\"a cut of selected sketch regions (EnableContourSelection, SelectByID2 \\\"SKETCHREGION\\\" at mark 4)\"}],\"variants\":[\"cut.offsetFromSurface\",\"cut.regions\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"regions\":{\"selected\":[{\"atMm\":[25.0,0.0],\"modelMm\":[25.0,0.0,44.0]}],\"via\":\"SelectByID2 SKETCHREGION, mark 4, EnableContourSelection on\"},\"reverse\":false,\"sketch\":\"Sketch23\",\"throughAll\":false,\"upToFace\":{\"mark\":1,\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false}},\"step\":13},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"circle\":{\"centerMm\":[72.0,28.70187343596344],\"radiusMm\":41.0}}],\"mapped\":true,\"offsets\":[{\"offsetEntities\":{\"chain\":true,\"fromFace\":{\"atPointMm\":[70.0,10.0,44.0]},\"loops\":\"outer\",\"offsetMm\":-1.0,\"side\":\"inward\"},\"route\":\"IModelDoc2::SketchOffsetEntities2\",\"segments\":8,\"selected\":\"the face's outer loop (8 edges)\",\"side\":\"inward\",\"sideVerified\":true,\"tries\":[{\"farthestFromTheFaceMm\":3.4694469519536138e-15,\"landed\":\"inward\",\"offsetMm\":-1.0,\"segments\":8}],\"why\":null}],\"plane\":{\"face\":{\"atPointMm\":[70.0,10.0,44.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"sketch.offsetEntities.outer\",\"what\":\"a face's OUTER loop offset into the sketch: its edges selected, IModelDoc2::SketchOffsetEntities2 (side checked, redone the other way if SOLIDWORKS put it outside)\"}],\"variants\":[\"sketch.face.front.positive\",\"sketch.circle\",\"sketch.multiProfile\",\"sketch.offsetEntities.outer\",\"select.multiSelectTyped\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"radiusMm\":41.0,\"resolvedPlane\":{\"faceNormal\":[0.0,0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch24\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false},\"step\":14},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":1.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":5,\"feature\":\"Cut-Extrude13\",\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"cut.offsetFromSurface\",\"what\":\"a cut to a distance from a picked face\"},{\"variant\":\"cut.regions\",\"what\":\"a cut of selected sketch regions (EnableContourSelection, SelectByID2 \\\"SKETCHREGION\\\" at mark 4)\"}],\"variants\":[\"cut.offsetFromSurface\",\"cut.regions\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"regions\":{\"selected\":[{\"atMm\":[65.0,15.0],\"modelMm\":[65.0,15.0,44.0]}],\"via\":\"SelectByID2 SKETCHREGION, mark 4, EnableContourSelection on\"},\"reverse\":false,\"sketch\":\"Sketch24\",\"throughAll\":false,\"upToFace\":{\"mark\":1,\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false}},\"step\":15}],\"success\":true,\"targetDocument\":\"Part1-1792190208004.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 102.1,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 15 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 398s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 15,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792190208004.SLDPRT",+       "deleted": [+        "Sketch13",+        "Boss-Extrude10",+        "Plane4",+        "Sketch14",+        "Cut-Extrude4",+        "Sketch15",+        "Cut-Extrude5",+        "Sketch16",+        "Cut-Extrude6",+        "Plane5",+        "Sketch17",+        "Cut-Extrude7"+       ],+       "featuresDeleted": 12,+       "passes": 1,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "line": {+          "fromMm": [+           0.0,+           18.0+          ],+          "toMm": [+           22.3613808357771,+           14.057085232755291+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           25.66069621144878,+           32.768432539987224+          ],+          "endMm": [+           43.0,+           25.0+          ],+          "radiusMm": 18.99999999999998,+          "startMm": [+           22.3613808357771,+           14.057085232755291+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           43.0,+           25.0+          ],+          "toMm": [+           67.0,+           25.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           72.0,+           20.0+          ],+          "toMm": [+           72.0,+           1.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           72.0,+           1.0+          ],+          "toMm": [+           43.0,+           -33.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           43.0,+           -33.0+          ],+          "toMm": [+           37.296980052734526,+           -33.0+          ]+         }+        },+        {+         "arc": {+          "ccw": false,+          "centerMm": [+           59.20588235294099,+           -13.99999999999998+          ],+          "endMm": [+           30.521177652752534,+           -18.264705882352946+          ],+          "radiusMm": 28.999999999999883,+          "startMm": [+           37.296980052734526,+           -33.0+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           25.575538911340765,+           -18.99999999999997+          ],+          "endMm": [+           25.5755389113407,+           -14.0+          ],+          "radiusMm": 4.9999999999999325,+          "startMm": [+           30.521177652752534,+           -18.264705882352946+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           25.5755389113407,+           -14.0+          ],+          "toMm": [+           -7.0,+           -14.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -14.0,+           -7.0+          ],+          "toMm": [+           -14.0,+           11.000000000000002+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -7.0,+           18.0+          ],+          "toMm": [+           0.0,+           18.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -14.0,+           11.000000000000002+          ],+          "toMm": [+           -7.0,+           18.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -7.0,+           -14.0+          ],+          "toMm": [+           -14.0,+           -7.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           67.0,+           25.0+          ],+          "toMm": [+           72.0,+           20.0+          ]+         }+        },+        {+         "circle": {+          "centerMm": [+           0.0,+           0.0+          ],+          "radiusMm": 7.0+         }+        }+       ],+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.circle",+         "sketch.multiProfile",+         "sketch.line",+         "sketch.arc"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch18",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 44.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude11",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch18",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "AISI 1020"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 7899.999999999999,+       "densityRequested": 7900.0,+       "material": "AISI 1020",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 4+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": "Plane6",+       "entities": [+        {+         "circle": {+          "centerMm": [+           72.0,+           28.70187343596344+          ],+          "radiusMm": 41.0+         }+        }+       ],+       "mapped": true,+       "plane": {+        "offsetFrom": {+         "face": {+          "atPointMm": [+           -10.0,+           0.0,+           0.0+          ]+         }+        },+        "offsetMm": -12.0+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.faceOffset",+         "sketch.circle"+        ]+       },+       "radiusMm": 41.0,+       "resolvedPlane": {+        "faceNormal": [+         -0.0,+         -0.0,+         -1.0+        ],+        "faceOffsetMm": -12.0,+        "fromFace": true,+        "offsetFrom": "Front Plane",+        "offsetMm": 12.0,+        "pickedBy": "geometry",+        "plane": "Plane6",+        "verified": true+       },+       "sketch": "Sketch19",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Plane6",+       "transformInverted": false+      },+      "step": 5+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 24.0,+       "dir": {+        "flippedToFollowTheReference": true,+        "reference": [+         -0.0,+         -0.0,+         -1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": true+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Cut-Extrude8",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.one.reversed"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch19",+       "throughAll": false,+       "upToFace": null+      },+      "step": 6+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            -20.0,+            -40.0+           ],+           [+            85.99999999999999,+            -13.999999999999998+           ]+          ]+         }+        }+       ],+       "heightMm": 26.0,+       "mapped": true,+       "plane": {+        "face": {+         "atPointMm": [+          -10.0,+          0.0,+          44.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.face.front.positive",+         "sketch.rect",+         "select.multiSelectTyped"+        ]+       },+       "resolvedPlane": {+        "faceNormal": [+         0.0,+         0.0,+         1.0+        ],+        "offsetFrom": "Front Plane",+        "offsetMm": 44.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch20",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false,+       "widthMm": 106.0+      },+      "step": 7+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 19.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Cut-Extrude9",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch20",+       "throughAll": false,+       "upToFace": null+      },+      "step": 8+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            -20.0,+            -40.0+           ],+           [+            20.0,+            40.0+           ]+          ]+         }+        }+       ],+       "heightMm": 80.0,+       "mapped": true,+       "plane": {+        "face": {+         "atPointMm": [+          -10.0,+          0.0,+          44.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.face.front.positive",+         "sketch.rect",+         "select.multiSelectTyped"+        ]+       },+       "resolvedPlane": {+        "faceNormal": [+         0.0,+         0.0,+         1.0+        ],+        "offsetFrom": "Front Plane",+        "offsetMm": 44.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch21",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false,+       "widthMm": 40.0+      },+      "step": 9+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 19.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Cut-Extrude10",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch21",+       "throughAll": false,+       "upToFace": null+      },+      "step": 10+     },+     {+      "op": "hole",+      "result": {+       "depthMm": null,+       "diameterMm": 11.0,+       "face": {+        "atPointMm": [+         58.0,+         11.0,+         44.0+        ],+        "heightMm": 44.0,+        "normal": [+         0.0,+         0.0,+         1.0+        ],+        "pickedBy": "geometry",+        "plane": "Front Plane"+       },+       "feature": "Cut-Extrude11",+       "features": [+        "Cut-Extrude11"+       ],+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "hole.simple"+        ]+       },+       "steps": [+        {+         "op": "sketch",+         "result": {+          "createdPlane": "Plane7",+          "entities": [+           {+            "circle": {+             "centerMm": [+              58.0,+              11.0+             ],+             "radiusMm": 5.5+            }+           }+          ],+          "mapped": true,+          "plane": {+           "offsetFrom": "Front Plane",+           "offsetMm": 44.0+          },+          "planeFrames": "plane transforms (they match the measured Front/Top axes)",+          "radiusMm": 5.5,+          "resolvedPlane": {+           "offsetFrom": "Front Plane",+           "offsetMm": 44.0,+           "plane": "Plane7",+           "verified": true+          },+          "sketch": "Sketch22",+          "sketchNormal": [+           0.0,+           0.0,+           1.0+          ],+          "sketchedOn": "Plane7",+          "transformInverted": false+         }+        },+        {+         "op": "cut",+         "result": {+          "depth2Mm": null,+          "depthMm": 0.0,+          "dir": {+           "flippedToFollowTheReference": false,+           "reference": [+            0.0,+            0.0,+            1.0+           ],+           "sketchNormal": [+            0.0,+            0.0,+            1.0+           ],+           "value": false+          },+          "direction": "one",+          "draftDeg": null,+          "draftInward": null,+          "endCondition": 1,+          "feature": "Cut-Extrude11",+          "regions": null,+          "reverse": false,+          "sketch": "Sketch22",+          "throughAll": true,+          "upToFace": null+         }+        }+       ],+       "throughAll": true+      },+      "step": 11+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "circle": {+          "centerMm": [+           72.0,+           28.70187343596344+          ],+          "radiusMm": 42.0+         }+        }+       ],+       "mapped": true,+       "offsets": [+        {+         "offsetEntities": {+          "chain": true,+          "fromFace": {+           "atPointMm": [+            70.0,+            10.0,+            44.0+           ]+          },+          "loops": "outer",+          "offsetMm": -1.0,+          "side": "inward"+         },+         "route": "IModelDoc2::SketchOffsetEntities2",+         "segments": 8,+         "selected": "the face's outer loop (8 edges)",+         "side": "inward",+         "sideVerified": true,+         "tries": [+          {+           "farthestFromTheFaceMm": 0.0,+           "landed": "inward",+           "offsetMm": -1.0,+           "segments": 8+          }+         ],+         "why": null+        }+       ],+       "plane": {+        "face": {+         "atPointMm": [+          70.0,+          10.0,+          44.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "sketch.offsetEntities.outer",+          "what": "a face's OUTER loop offset into the sketch: its edges selected, IModelDoc2::SketchOffsetEntities2 (side checked, redone the other way if SOLIDWORKS put it outside)"+         }+        ],+        "variants": [+         "sketch.face.front.positive",+         "sketch.circle",+         "sketch.multiProfile",+         "sketch.offsetEntities.outer",+         "select.multiSelectTyped"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "radiusMm": 42.0,+       "resolvedPlane": {+        "faceNormal": [+         0.0,+         0.0,+         1.0+        ],+        "offsetFrom": "Front Plane",+        "offsetMm": 44.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch23",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false+      },+      "step": 12+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 12.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 5,+       "feature": "Cut-Extrude12",+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "cut.offsetFromSurface",+          "what": "a cut to a distance from a picked face"+         },+         {+          "variant": "cut.regions",+          "what": "a cut of selected sketch regions (EnableContourSelection, SelectByID2 \"SKETCHREGION\" at mark 4)"+         }+        ],+        "variants": [+         "cut.offsetFromSurface",+         "cut.regions"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "regions": {+        "selected": [+         {+          "atMm": [+           25.0,+           0.0+          ],+          "modelMm": [+           25.0,+           0.0,+           44.0+          ]+         }+        ],+        "via": "SelectByID2 SKETCHREGION, mark 4, EnableContourSelection on"+       },+       "reverse": false,+       "sketch": "Sketch23",+       "throughAll": false,+       "upToFace": {+        "mark": 1,+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       }+      },+      "step": 13+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "circle": {+          "centerMm": [+           72.0,+           28.70187343596344+          ],+          "radiusMm": 41.0+         }+        }+       ],+       "mapped": true,+       "offsets": [+        {+         "offsetEntities": {+          "chain": true,+          "fromFace": {+           "atPointMm": [+            70.0,+            10.0,+            44.0+           ]+          },+          "loops": "outer",+          "offsetMm": -1.0,+          "side": "inward"+         },+         "route": "IModelDoc2::SketchOffsetEntities2",+         "segments": 8,+         "selected": "the face's outer loop (8 edges)",+         "side": "inward",+         "sideVerified": true,+         "tries": [+          {+           "farthestFromTheFaceMm": 3.4694469519536138e-15,+           "landed": "inward",+           "offsetMm": -1.0,+           "segments": 8+          }+         ],+         "why": null+        }+       ],+       "plane": {+        "face": {+         "atPointMm": [+          70.0,+          10.0,+          44.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "sketch.offsetEntities.outer",+          "what": "a face's OUTER loop offset into the sketch: its edges selected, IModelDoc2::SketchOffsetEntities2 (side checked, redone the other way if SOLIDWORKS put it outside)"+         }+        ],+        "variants": [+         "sketch.face.front.positive",+         "sketch.circle",+         "sketch.multiProfile",+         "sketch.offsetEntities.outer",+         "select.multiSelectTyped"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "radiusMm": 41.0,+       "resolvedPlane": {+        "faceNormal": [+         0.0,+         0.0,+         1.0+        ],+        "offsetFrom": "Front Plane",+        "offsetMm": 44.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch24",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false+      },+      "step": 14+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 1.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 5,+       "feature": "Cut-Extrude13",+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "cut.offsetFromSurface",+          "what": "a cut to a distance from a picked face"+         },+         {+          "variant": "cut.regions",+          "what": "a cut of selected sketch regions (EnableContourSelection, SelectByID2 \"SKETCHREGION\" at mark 4)"+         }+        ],+        "variants": [+         "cut.offsetFromSurface",+         "cut.regions"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "regions": {+        "selected": [+         {+          "atMm": [+           65.0,+           15.0+          ],+          "modelMm": [+           65.0,+           15.0,+           44.0+          ]+         }+        ],+        "via": "SelectByID2 SKETCHREGION, mark 4, EnableContourSelection on"+       },+       "reverse": false,+       "sketch": "Sketch24",+       "throughAll": false,+       "upToFace": {+        "mark": 1,+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       }+      },+      "step": 15+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792190208004.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     -0.014,+     -0.033,+     0.0,+     0.11400000000000002,+     0.07070187343596344,+     0.044+    ],+    "centerOfMass": [+     0.028679743560791063,+     -0.0013181364133994554,+     0.011973208864464789+    ],+    "centerOfMassMm": [+     28.679744,+     -1.318136,+     11.973209+    ],+    "density": 7900.0,+    "densityKgM3": 7900.0,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "durationMs": 2305,+    "error": "",+    "massG": 434.7151664097056,+    "massKg": 0.4347151664097056,+    "materialName": "AISI 1020",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[-0.014,-0.033,0.0,0.11400000000000002,0.07070187343596344,0.044],\"centerOfMass\":[0.028679743560791063,-0.0013181364133994554,0.011973208864464789],\"centerOfMassMm\":[28.679744,-1.318136,11.973209],\"density\":7900.0,\"densityKgM3\":7900.0,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"massG\":434.7151664097056,\"massKg\":0.4347151664097056,\"materialName\":\"AISI 1020\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 596s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.022011814184570586,\"surfaceAreaMm2\":22011.814184570587,\"timeoutSeconds\":120,\"volumeM3\":0.00005502723625439311,\"volumeMm3\":55027.23625439311}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 596s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.022011814184570586,+    "surfaceAreaMm2": 22011.814184570587,+    "timeoutSeconds": 120,+    "volumeM3": 5.502723625439311e-05,+    "volumeMm3": 55027.23625439311+   },+   "pass": true,+   "checks": [+    {+     "quantity": "massG",+     "expected": 432.58,+     "measured": 434.7151664097056,+     "offPct": 0.4935887950681074,+     "pass": true+    }+   ],+   "fails": [],+   "seconds": 199.8+  },+  {+   "id": "cswa-08b-tool-block-step4-explicit",+   "title": "Official Tool Block, Step 4 (Q6), the explicit inset profile: the same pocket drawn line by line (the Offset Entities fallback)",+   "official": true,+   "source": "https://www.solidworks.com/sites/default/files/2017-12/CSWASampleExam.pdf (Dassault CSWA Sample Exam, 2017 edition; archive http://web.archive.org/web/20251230104817/https://www.solidworks.com/sites/default/files/2017-12/CSWASampleExam.pdf)",+   "expected": {+    "massG": 432.58,+    "tolerancePct": 1.0+   },+   "material": {+    "name": "AISI 1020",+    "densityKgM3": 7900+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792190208004.SLDPRT",+    "durationMs": 84664,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792190208004.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":80.3,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 15 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 598s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":15,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792190208004.SLDPRT\",\"deleted\":[\"Sketch18\",\"Boss-Extrude11\",\"Plane6\",\"Sketch19\",\"Cut-Extrude8\",\"Sketch20\",\"Cut-Extrude9\",\"Sketch21\",\"Cut-Extrude10\",\"Plane7\",\"Sketch22\",\"Cut-Extrude11\",\"Sketch23\",\"Cut-Extrude12\",\"Sketch24\",\"Cut-Extrude13\"],\"featuresDeleted\":16,\"passes\":1,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"line\":{\"fromMm\":[0.0,18.0],\"toMm\":[22.3613808357771,14.057085232755291]}},{\"arc\":{\"ccw\":true,\"centerMm\":[25.66069621144878,32.768432539987224],\"endMm\":[43.0,25.0],\"radiusMm\":18.99999999999998,\"startMm\":[22.3613808357771,14.057085232755291]}},{\"line\":{\"fromMm\":[43.0,25.0],\"toMm\":[67.0,25.0]}},{\"line\":{\"fromMm\":[72.0,20.0],\"toMm\":[72.0,1.0]}},{\"line\":{\"fromMm\":[72.0,1.0],\"toMm\":[43.0,-33.0]}},{\"line\":{\"fromMm\":[43.0,-33.0],\"toMm\":[37.296980052734526,-33.0]}},{\"arc\":{\"ccw\":false,\"centerMm\":[59.20588235294099,-13.99999999999998],\"endMm\":[30.521177652752534,-18.264705882352946],\"radiusMm\":28.999999999999883,\"startMm\":[37.296980052734526,-33.0]}},{\"arc\":{\"ccw\":true,\"centerMm\":[25.575538911340765,-18.99999999999997],\"endMm\":[25.5755389113407,-14.0],\"radiusMm\":4.9999999999999325,\"startMm\":[30.521177652752534,-18.264705882352946]}},{\"line\":{\"fromMm\":[25.5755389113407,-14.0],\"toMm\":[-7.0,-14.0]}},{\"line\":{\"fromMm\":[-14.0,-7.0],\"toMm\":[-14.0,11.000000000000002]}},{\"line\":{\"fromMm\":[-7.0,18.0],\"toMm\":[0.0,18.0]}},{\"line\":{\"fromMm\":[-14.0,11.000000000000002],\"toMm\":[-7.0,18.0]}},{\"line\":{\"fromMm\":[-7.0,-14.0],\"toMm\":[-14.0,-7.0]}},{\"line\":{\"fromMm\":[67.0,25.0],\"toMm\":[72.0,20.0]}},{\"circle\":{\"centerMm\":[0.0,0.0],\"radiusMm\":7.0}}],\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.front\",\"sketch.circle\",\"sketch.multiProfile\",\"sketch.line\",\"sketch.arc\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch25\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":44.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude12\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch25\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"AISI 1020\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":7899.999999999999,\"densityRequested\":7900.0,\"material\":\"AISI 1020\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":4},{\"op\":\"sketch\",\"result\":{\"createdPlane\":\"Plane8\",\"entities\":[{\"circle\":{\"centerMm\":[72.0,28.70187343596344],\"radiusMm\":41.0}}],\"mapped\":true,\"plane\":{\"offsetFrom\":{\"face\":{\"atPointMm\":[-10.0,0.0,0.0]}},\"offsetMm\":-12.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.faceOffset\",\"sketch.circle\"]},\"radiusMm\":41.0,\"resolvedPlane\":{\"faceNormal\":[-0.0,-0.0,-1.0],\"faceOffsetMm\":-12.0,\"fromFace\":true,\"offsetFrom\":\"Front Plane\",\"offsetMm\":12.0,\"pickedBy\":\"geometry\",\"plane\":\"Plane8\",\"verified\":true},\"sketch\":\"Sketch26\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Plane8\",\"transformInverted\":false},\"step\":5},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":24.0,\"dir\":{\"flippedToFollowTheReference\":true,\"reference\":[-0.0,-0.0,-1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":true},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude14\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one.reversed\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch26\",\"throughAll\":false,\"upToFace\":null},\"step\":6},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[-20.0,-40.0],[85.99999999999999,-13.999999999999998]]}}],\"heightMm\":26.0,\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[-10.0,0.0,44.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.front.positive\",\"sketch.rect\",\"select.multiSelectTyped\"]},\"resolvedPlane\":{\"faceNormal\":[0.0,0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch27\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false,\"widthMm\":106.0},\"step\":7},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":19.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude15\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch27\",\"throughAll\":false,\"upToFace\":null},\"step\":8},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[-20.0,-40.0],[20.0,40.0]]}}],\"heightMm\":80.0,\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[-10.0,0.0,44.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.front.positive\",\"sketch.rect\",\"select.multiSelectTyped\"]},\"resolvedPlane\":{\"faceNormal\":[0.0,0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch28\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false,\"widthMm\":40.0},\"step\":9},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":19.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude16\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch28\",\"throughAll\":false,\"upToFace\":null},\"step\":10},{\"op\":\"hole\",\"result\":{\"depthMm\":null,\"diameterMm\":11.0,\"face\":{\"atPointMm\":[58.0,11.0,44.0],\"heightMm\":44.0,\"normal\":[0.0,0.0,1.0],\"pickedBy\":\"geometry\",\"plane\":\"Front Plane\"},\"feature\":\"Cut-Extrude17\",\"features\":[\"Cut-Extrude17\"],\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"hole.simple\"]},\"steps\":[{\"op\":\"sketch\",\"result\":{\"createdPlane\":\"Plane9\",\"entities\":[{\"circle\":{\"centerMm\":[58.0,11.0],\"radiusMm\":5.5}}],\"mapped\":true,\"plane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"radiusMm\":5.5,\"resolvedPlane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"plane\":\"Plane9\",\"verified\":true},\"sketch\":\"Sketch29\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Plane9\",\"transformInverted\":false}},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":0.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":1,\"feature\":\"Cut-Extrude17\",\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch29\",\"throughAll\":true,\"upToFace\":null}}],\"throughAll\":true},\"step\":11},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"line\":{\"fromMm\":[21.0,-13.0],\"toMm\":[58.744476295793866,-13.0]}},{\"line\":{\"fromMm\":[58.744476295793866,-13.0],\"toMm\":[59.98684774684612,-11.543426574628398]}},{\"arc\":{\"ccw\":false,\"centerMm\":[72.00000000000006,28.70187343596347],\"endMm\":[32.6466829432945,14.028208705078669],\"radiusMm\":42.00000000000004,\"startMm\":[59.98684774684612,-11.543426574628398]}},{\"arc\":{\"ccw\":false,\"centerMm\":[25.660696211448773,32.76843253998723],\"endMm\":[22.18773265811017,13.072277479743086],\"radiusMm\":19.999999999999982,\"startMm\":[32.6466829432945,14.028208705078669]}},{\"line\":{\"fromMm\":[22.18773265811017,13.072277479743086],\"toMm\":[21.0,13.281706793236491]}},{\"line\":{\"fromMm\":[21.0,13.281706793236491],\"toMm\":[21.0,-13.0]}}],\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[70.0,10.0,44.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.front.positive\",\"sketch.multiProfile\",\"sketch.line\",\"sketch.arc\",\"select.multiSelectTyped\"]},\"resolvedPlane\":{\"faceNormal\":[0.0,0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch30\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false},\"step\":12},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":32.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude18\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch30\",\"throughAll\":false,\"upToFace\":null},\"step\":13},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"line\":{\"fromMm\":[60.69803754833394,-10.709617841849566],\"toMm\":[71.0,1.3685450325175337]}},{\"line\":{\"fromMm\":[71.0,1.3685450325175337],\"toMm\":[71.0,19.585786437626908]}},{\"line\":{\"fromMm\":[71.0,19.585786437626908],\"toMm\":[66.58578643762691,24.0]}},{\"line\":{\"fromMm\":[66.58578643762691,24.0],\"toMm\":[43.63608468546215,24.0]}},{\"arc\":{\"ccw\":false,\"centerMm\":[25.660696211448517,32.7684325399873],\"endMm\":[33.57496135565881,14.400950207692958],\"radiusMm\":20.000000000000256,\"startMm\":[43.63608468546215,24.0]}},{\"arc\":{\"ccw\":true,\"centerMm\":[72.0,28.70187343596347],\"endMm\":[60.69803754833394,-10.709617841849566],\"radiusMm\":41.000000000000014,\"startMm\":[33.57496135565881,14.400950207692958]}}],\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[70.0,10.0,44.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.front.positive\",\"sketch.multiProfile\",\"sketch.line\",\"sketch.arc\",\"select.multiSelectTyped\"]},\"resolvedPlane\":{\"faceNormal\":[0.0,0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch31\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false},\"step\":14},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":7.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude19\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch31\",\"throughAll\":false,\"upToFace\":null},\"step\":15}],\"success\":true,\"targetDocument\":\"Part1-1792190208004.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 80.3,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 15 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 598s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 15,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792190208004.SLDPRT",+       "deleted": [+        "Sketch18",+        "Boss-Extrude11",+        "Plane6",+        "Sketch19",+        "Cut-Extrude8",+        "Sketch20",+        "Cut-Extrude9",+        "Sketch21",+        "Cut-Extrude10",+        "Plane7",+        "Sketch22",+        "Cut-Extrude11",+        "Sketch23",+        "Cut-Extrude12",+        "Sketch24",+        "Cut-Extrude13"+       ],+       "featuresDeleted": 16,+       "passes": 1,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "line": {+          "fromMm": [+           0.0,+           18.0+          ],+          "toMm": [+           22.3613808357771,+           14.057085232755291+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           25.66069621144878,+           32.768432539987224+          ],+          "endMm": [+           43.0,+           25.0+          ],+          "radiusMm": 18.99999999999998,+          "startMm": [+           22.3613808357771,+           14.057085232755291+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           43.0,+           25.0+          ],+          "toMm": [+           67.0,+           25.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           72.0,+           20.0+          ],+          "toMm": [+           72.0,+           1.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           72.0,+           1.0+          ],+          "toMm": [+           43.0,+           -33.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           43.0,+           -33.0+          ],+          "toMm": [+           37.296980052734526,+           -33.0+          ]+         }+        },+        {+         "arc": {+          "ccw": false,+          "centerMm": [+           59.20588235294099,+           -13.99999999999998+          ],+          "endMm": [+           30.521177652752534,+           -18.264705882352946+          ],+          "radiusMm": 28.999999999999883,+          "startMm": [+           37.296980052734526,+           -33.0+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           25.575538911340765,+           -18.99999999999997+          ],+          "endMm": [+           25.5755389113407,+           -14.0+          ],+          "radiusMm": 4.9999999999999325,+          "startMm": [+           30.521177652752534,+           -18.264705882352946+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           25.5755389113407,+           -14.0+          ],+          "toMm": [+           -7.0,+           -14.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -14.0,+           -7.0+          ],+          "toMm": [+           -14.0,+           11.000000000000002+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -7.0,+           18.0+          ],+          "toMm": [+           0.0,+           18.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -14.0,+           11.000000000000002+          ],+          "toMm": [+           -7.0,+           18.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -7.0,+           -14.0+          ],+          "toMm": [+           -14.0,+           -7.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           67.0,+           25.0+          ],+          "toMm": [+           72.0,+           20.0+          ]+         }+        },+        {+         "circle": {+          "centerMm": [+           0.0,+           0.0+          ],+          "radiusMm": 7.0+         }+        }+       ],+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.circle",+         "sketch.multiProfile",+         "sketch.line",+         "sketch.arc"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch25",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 44.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude12",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch25",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "AISI 1020"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 7899.999999999999,+       "densityRequested": 7900.0,+       "material": "AISI 1020",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 4+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": "Plane8",+       "entities": [+        {+         "circle": {+          "centerMm": [+           72.0,+           28.70187343596344+          ],+          "radiusMm": 41.0+         }+        }+       ],+       "mapped": true,+       "plane": {+        "offsetFrom": {+         "face": {+          "atPointMm": [+           -10.0,+           0.0,+           0.0+          ]+         }+        },+        "offsetMm": -12.0+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.faceOffset",+         "sketch.circle"+        ]+       },+       "radiusMm": 41.0,+       "resolvedPlane": {+        "faceNormal": [+         -0.0,+         -0.0,+         -1.0+        ],+        "faceOffsetMm": -12.0,+        "fromFace": true,+        "offsetFrom": "Front Plane",+        "offsetMm": 12.0,+        "pickedBy": "geometry",+        "plane": "Plane8",+        "verified": true+       },+       "sketch": "Sketch26",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Plane8",+       "transformInverted": false+      },+      "step": 5+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 24.0,+       "dir": {+        "flippedToFollowTheReference": true,+        "reference": [+         -0.0,+         -0.0,+         -1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": true+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Cut-Extrude14",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.one.reversed"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch26",+       "throughAll": false,+       "upToFace": null+      },+      "step": 6+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            -20.0,+            -40.0+           ],+           [+            85.99999999999999,+            -13.999999999999998+           ]+          ]+         }+        }+       ],+       "heightMm": 26.0,+       "mapped": true,+       "plane": {+        "face": {+         "atPointMm": [+          -10.0,+          0.0,+          44.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.face.front.positive",+         "sketch.rect",+         "select.multiSelectTyped"+        ]+       },+       "resolvedPlane": {+        "faceNormal": [+         0.0,+         0.0,+         1.0+        ],+        "offsetFrom": "Front Plane",+        "offsetMm": 44.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch27",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false,+       "widthMm": 106.0+      },+      "step": 7+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 19.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Cut-Extrude15",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch27",+       "throughAll": false,+       "upToFace": null+      },+      "step": 8+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            -20.0,+            -40.0+           ],+           [+            20.0,+            40.0+           ]+          ]+         }+        }+       ],+       "heightMm": 80.0,+       "mapped": true,+       "plane": {+        "face": {+         "atPointMm": [+          -10.0,+          0.0,+          44.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.face.front.positive",+         "sketch.rect",+         "select.multiSelectTyped"+        ]+       },+       "resolvedPlane": {+        "faceNormal": [+         0.0,+         0.0,+         1.0+        ],+        "offsetFrom": "Front Plane",+        "offsetMm": 44.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch28",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false,+       "widthMm": 40.0+      },+      "step": 9+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 19.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Cut-Extrude16",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch28",+       "throughAll": false,+       "upToFace": null+      },+      "step": 10+     },+     {+      "op": "hole",+      "result": {+       "depthMm": null,+       "diameterMm": 11.0,+       "face": {+        "atPointMm": [+         58.0,+         11.0,+         44.0+        ],+        "heightMm": 44.0,+        "normal": [+         0.0,+         0.0,+         1.0+        ],+        "pickedBy": "geometry",+        "plane": "Front Plane"+       },+       "feature": "Cut-Extrude17",+       "features": [+        "Cut-Extrude17"+       ],+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "hole.simple"+        ]+       },+       "steps": [+        {+         "op": "sketch",+         "result": {+          "createdPlane": "Plane9",+          "entities": [+           {+            "circle": {+             "centerMm": [+              58.0,+              11.0+             ],+             "radiusMm": 5.5+            }+           }+          ],+          "mapped": true,+          "plane": {+           "offsetFrom": "Front Plane",+           "offsetMm": 44.0+          },+          "planeFrames": "plane transforms (they match the measured Front/Top axes)",+          "radiusMm": 5.5,+          "resolvedPlane": {+           "offsetFrom": "Front Plane",+           "offsetMm": 44.0,+           "plane": "Plane9",+           "verified": true+          },+          "sketch": "Sketch29",+          "sketchNormal": [+           0.0,+           0.0,+           1.0+          ],+          "sketchedOn": "Plane9",+          "transformInverted": false+         }+        },+        {+         "op": "cut",+         "result": {+          "depth2Mm": null,+          "depthMm": 0.0,+          "dir": {+           "flippedToFollowTheReference": false,+           "reference": [+            0.0,+            0.0,+            1.0+           ],+           "sketchNormal": [+            0.0,+            0.0,+            1.0+           ],+           "value": false+          },+          "direction": "one",+          "draftDeg": null,+          "draftInward": null,+          "endCondition": 1,+          "feature": "Cut-Extrude17",+          "regions": null,+          "reverse": false,+          "sketch": "Sketch29",+          "throughAll": true,+          "upToFace": null+         }+        }+       ],+       "throughAll": true+      },+      "step": 11+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "line": {+          "fromMm": [+           21.0,+           -13.0+          ],+          "toMm": [+           58.744476295793866,+           -13.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           58.744476295793866,+           -13.0+          ],+          "toMm": [+           59.98684774684612,+           -11.543426574628398+          ]+         }+        },+        {+         "arc": {+          "ccw": false,+          "centerMm": [+           72.00000000000006,+           28.70187343596347+          ],+          "endMm": [+           32.6466829432945,+           14.028208705078669+          ],+          "radiusMm": 42.00000000000004,+          "startMm": [+           59.98684774684612,+           -11.543426574628398+          ]+         }+        },+        {+         "arc": {+          "ccw": false,+          "centerMm": [+           25.660696211448773,+           32.76843253998723+          ],+          "endMm": [+           22.18773265811017,+           13.072277479743086+          ],+          "radiusMm": 19.999999999999982,+          "startMm": [+           32.6466829432945,+           14.028208705078669+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           22.18773265811017,+           13.072277479743086+          ],+          "toMm": [+           21.0,+           13.281706793236491+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           21.0,+           13.281706793236491+          ],+          "toMm": [+           21.0,+           -13.0+          ]+         }+        }+       ],+       "mapped": true,+       "plane": {+        "face": {+         "atPointMm": [+          70.0,+          10.0,+          44.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.face.front.positive",+         "sketch.multiProfile",+         "sketch.line",+         "sketch.arc",+         "select.multiSelectTyped"+        ]+       },+       "resolvedPlane": {+        "faceNormal": [+         0.0,+         0.0,+         1.0+        ],+        "offsetFrom": "Front Plane",+        "offsetMm": 44.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch30",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false+      },+      "step": 12+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 32.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Cut-Extrude18",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch30",+       "throughAll": false,+       "upToFace": null+      },+      "step": 13+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "line": {+          "fromMm": [+           60.69803754833394,+           -10.709617841849566+          ],+          "toMm": [+           71.0,+           1.3685450325175337+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           71.0,+           1.3685450325175337+          ],+          "toMm": [+           71.0,+           19.585786437626908+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           71.0,+           19.585786437626908+          ],+          "toMm": [+           66.58578643762691,+           24.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           66.58578643762691,+           24.0+          ],+          "toMm": [+           43.63608468546215,+           24.0+          ]+         }+        },+        {+         "arc": {+          "ccw": false,+          "centerMm": [+           25.660696211448517,+           32.7684325399873+          ],+          "endMm": [+           33.57496135565881,+           14.400950207692958+          ],+          "radiusMm": 20.000000000000256,+          "startMm": [+           43.63608468546215,+           24.0+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           72.0,+           28.70187343596347+          ],+          "endMm": [+           60.69803754833394,+           -10.709617841849566+          ],+          "radiusMm": 41.000000000000014,+          "startMm": [+           33.57496135565881,+           14.400950207692958+          ]+         }+        }+       ],+       "mapped": true,+       "plane": {+        "face": {+         "atPointMm": [+          70.0,+          10.0,+          44.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.face.front.positive",+         "sketch.multiProfile",+         "sketch.line",+         "sketch.arc",+         "select.multiSelectTyped"+        ]+       },+       "resolvedPlane": {+        "faceNormal": [+         0.0,+         0.0,+         1.0+        ],+        "offsetFrom": "Front Plane",+        "offsetMm": 44.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch31",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false+      },+      "step": 14+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 7.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Cut-Extrude19",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch31",+       "throughAll": false,+       "upToFace": null+      },+      "step": 15+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792190208004.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     -0.014,+     -0.033,+     0.0,+     0.07200000000000001,+     0.025,+     0.044+    ],+    "centerOfMass": [+     0.02867974356079105,+     -0.0013181364133994537,+     0.01197320886446478+    ],+    "centerOfMassMm": [+     28.679744,+     -1.318136,+     11.973209+    ],+    "density": 7900.0,+    "densityKgM3": 7900.0,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "durationMs": 2479,+    "error": "",+    "massG": 434.71516640970555,+    "massKg": 0.43471516640970553,+    "materialName": "AISI 1020",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[-0.014,-0.033,0.0,0.07200000000000001,0.025,0.044],\"centerOfMass\":[0.02867974356079105,-0.0013181364133994537,0.01197320886446478],\"centerOfMassMm\":[28.679744,-1.318136,11.973209],\"density\":7900.0,\"densityKgM3\":7900.0,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"massG\":434.71516640970555,\"massKg\":0.43471516640970553,\"materialName\":\"AISI 1020\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 683s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.02201181418457059,\"surfaceAreaMm2\":22011.81418457059,\"timeoutSeconds\":120,\"volumeM3\":0.000055027236254393104,\"volumeMm3\":55027.2362543931}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 683s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.02201181418457059,+    "surfaceAreaMm2": 22011.81418457059,+    "timeoutSeconds": 120,+    "volumeM3": 5.5027236254393104e-05,+    "volumeMm3": 55027.2362543931+   },+   "pass": true,+   "checks": [+    {+     "quantity": "massG",+     "expected": 432.58,+     "measured": 434.71516640970555,+     "offPct": 0.49358879506809417,+     "pass": true+    }+   ],+   "fails": [],+   "seconds": 87.2+  },+  {+   "id": "cswa-09-community-stepped-shaft",+   "title": "Community: a stepped hollow shaft - revolved, a groove revolve-cut, a half-depth flat revolve-cut mid-plane",+   "official": false,+   "source": "community: built for the bridge's benchmark (no exam publishes it); the key is derived analytically in `derivation`",+   "expected": {+    "massG": 103.568885,+    "volumeMm3": 38358.8463,+    "centerOfMassMm": [+     46.831491,+     -0.114185,+     0.0+    ],+    "tolerancePct": 0.1+   },+   "material": {+    "name": "6061 Alloy",+    "densityKgM3": 2700+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792190208004.SLDPRT",+    "durationMs": 43843,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792190208004.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":39.1,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 8 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 685s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":8,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792190208004.SLDPRT\",\"deleted\":[\"Sketch25\",\"Boss-Extrude12\",\"Plane8\",\"Sketch26\",\"Cut-Extrude14\",\"Sketch27\",\"Cut-Extrude15\",\"Sketch28\",\"Cut-Extrude16\",\"Plane9\",\"Sketch29\",\"Cut-Extrude17\",\"Sketch30\",\"Cut-Extrude18\",\"Sketch31\",\"Cut-Extrude19\"],\"featuresDeleted\":16,\"passes\":1,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"line\":{\"fromMm\":[0.0,3.0],\"toMm\":[0.0,10.0]}},{\"line\":{\"fromMm\":[0.0,10.0],\"toMm\":[30.0,10.0]}},{\"line\":{\"fromMm\":[30.0,10.0],\"toMm\":[30.0,15.0]}},{\"line\":{\"fromMm\":[30.0,15.0],\"toMm\":[70.0,15.0]}},{\"line\":{\"fromMm\":[70.0,15.0],\"toMm\":[70.0,8.0]}},{\"line\":{\"fromMm\":[70.0,8.0],\"toMm\":[95.0,8.0]}},{\"line\":{\"fromMm\":[95.0,8.0],\"toMm\":[95.0,3.0]}},{\"line\":{\"fromMm\":[95.0,3.0],\"toMm\":[0.0,3.0]}},{\"line\":{\"construction\":true,\"fromMm\":[-1.0,0.0],\"toMm\":[96.0,0.0]}}],\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"sketch.construction\",\"what\":\"construction geometry (CreateCenterLine; arcs with ConstructionGeometry)\"}],\"variants\":[\"sketch.plane.front\",\"sketch.multiProfile\",\"sketch.line\",\"sketch.construction\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"resolvedPlane\":null,\"sketch\":\"Sketch32\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false},\"step\":2},{\"op\":\"revolve\",\"result\":{\"angleDeg\":360.0,\"axis\":{\"entity\":8,\"mark\":4,\"segment\":\"Line9\",\"selectedVia\":\"SelectByID2 EXTSKETCHSEGMENT\"},\"feature\":\"Revolve1\",\"midPlane\":false,\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"revolve.360\",\"what\":\"a full revolve about a line of the sketch (FeatureRevolve2)\"}],\"variants\":[\"revolve.360\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"reverse\":false,\"route\":\"FeatureRevolve2\",\"sketch\":\"Sketch32\"},\"step\":3},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[45.0,13.0],[49.99999999999999,15.0]]}},{\"line\":{\"construction\":true,\"fromMm\":[44.0,0.0],\"toMm\":[50.99999999999999,0.0]}}],\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"sketch.construction\",\"what\":\"construction geometry (CreateCenterLine; arcs with ConstructionGeometry)\"}],\"variants\":[\"sketch.plane.front\",\"sketch.rect\",\"sketch.multiProfile\",\"sketch.construction\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"resolvedPlane\":null,\"sketch\":\"Sketch33\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false},\"step\":4},{\"op\":\"revolve_cut\",\"result\":{\"angleDeg\":360.0,\"axis\":{\"entity\":1,\"mark\":4,\"segment\":\"Line5\",\"selectedVia\":\"SelectByID2 EXTSKETCHSEGMENT\"},\"feature\":\"Cut-Revolve1\",\"midPlane\":false,\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"revolve_cut.360\",\"what\":\"a full revolve-cut (FeatureRevolve2 with IsCut)\"}],\"variants\":[\"revolve_cut.360\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"reverse\":false,\"route\":\"FeatureRevolve2\",\"sketch\":\"Sketch33\"},\"step\":5},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[0.0,7.0],[10.0,10.0]]}},{\"line\":{\"construction\":true,\"fromMm\":[-1.0,0.0],\"toMm\":[11.0,0.0]}}],\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"sketch.construction\",\"what\":\"construction geometry (CreateCenterLine; arcs with ConstructionGeometry)\"}],\"variants\":[\"sketch.plane.front\",\"sketch.rect\",\"sketch.multiProfile\",\"sketch.construction\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"resolvedPlane\":null,\"sketch\":\"Sketch34\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false},\"step\":6},{\"op\":\"revolve_cut\",\"result\":{\"angleDeg\":180.0,\"axis\":{\"entity\":1,\"mark\":4,\"segment\":\"Line5\",\"selectedVia\":\"SelectByID2 EXTSKETCHSEGMENT\"},\"feature\":\"Cut-Revolve2\",\"midPlane\":true,\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"revolve_cut.midPlane\",\"what\":\"a revolve-cut symmetric about the sketch plane\"}],\"variants\":[\"revolve_cut.midPlane\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"reverse\":false,\"route\":\"FeatureRevolve2\",\"sketch\":\"Sketch34\"},\"step\":7},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"6061 Alloy\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":2700.0,\"densityRequested\":2700.0,\"material\":\"6061 Alloy\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":8}],\"success\":true,\"targetDocument\":\"Part1-1792190208004.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 39.1,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 8 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 685s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 8,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792190208004.SLDPRT",+       "deleted": [+        "Sketch25",+        "Boss-Extrude12",+        "Plane8",+        "Sketch26",+        "Cut-Extrude14",+        "Sketch27",+        "Cut-Extrude15",+        "Sketch28",+        "Cut-Extrude16",+        "Plane9",+        "Sketch29",+        "Cut-Extrude17",+        "Sketch30",+        "Cut-Extrude18",+        "Sketch31",+        "Cut-Extrude19"+       ],+       "featuresDeleted": 16,+       "passes": 1,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "line": {+          "fromMm": [+           0.0,+           3.0+          ],+          "toMm": [+           0.0,+           10.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           0.0,+           10.0+          ],+          "toMm": [+           30.0,+           10.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           30.0,+           10.0+          ],+          "toMm": [+           30.0,+           15.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           30.0,+           15.0+          ],+          "toMm": [+           70.0,+           15.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           70.0,+           15.0+          ],+          "toMm": [+           70.0,+           8.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           70.0,+           8.0+          ],+          "toMm": [+           95.0,+           8.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           95.0,+           8.0+          ],+          "toMm": [+           95.0,+           3.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           95.0,+           3.0+          ],+          "toMm": [+           0.0,+           3.0+          ]+         }+        },+        {+         "line": {+          "construction": true,+          "fromMm": [+           -1.0,+           0.0+          ],+          "toMm": [+           96.0,+           0.0+          ]+         }+        }+       ],+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "sketch.construction",+          "what": "construction geometry (CreateCenterLine; arcs with ConstructionGeometry)"+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.multiProfile",+         "sketch.line",+         "sketch.construction"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "resolvedPlane": null,+       "sketch": "Sketch32",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false+      },+      "step": 2+     },+     {+      "op": "revolve",+      "result": {+       "angleDeg": 360.0,+       "axis": {+        "entity": 8,+        "mark": 4,+        "segment": "Line9",+        "selectedVia": "SelectByID2 EXTSKETCHSEGMENT"+       },+       "feature": "Revolve1",+       "midPlane": false,+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "revolve.360",+          "what": "a full revolve about a line of the sketch (FeatureRevolve2)"+         }+        ],+        "variants": [+         "revolve.360"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "reverse": false,+       "route": "FeatureRevolve2",+       "sketch": "Sketch32"+      },+      "step": 3+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            45.0,+            13.0+           ],+           [+            49.99999999999999,+            15.0+           ]+          ]+         }+        },+        {+         "line": {+          "construction": true,+          "fromMm": [+           44.0,+           0.0+          ],+          "toMm": [+           50.99999999999999,+           0.0+          ]+         }+        }+       ],+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "sketch.construction",+          "what": "construction geometry (CreateCenterLine; arcs with ConstructionGeometry)"+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.rect",+         "sketch.multiProfile",+         "sketch.construction"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "resolvedPlane": null,+       "sketch": "Sketch33",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false+      },+      "step": 4+     },+     {+      "op": "revolve_cut",+      "result": {+       "angleDeg": 360.0,+       "axis": {+        "entity": 1,+        "mark": 4,+        "segment": "Line5",+        "selectedVia": "SelectByID2 EXTSKETCHSEGMENT"+       },+       "feature": "Cut-Revolve1",+       "midPlane": false,+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "revolve_cut.360",+          "what": "a full revolve-cut (FeatureRevolve2 with IsCut)"+         }+        ],+        "variants": [+         "revolve_cut.360"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "reverse": false,+       "route": "FeatureRevolve2",+       "sketch": "Sketch33"+      },+      "step": 5+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            0.0,+            7.0+           ],+           [+            10.0,+            10.0+           ]+          ]+         }+        },+        {+         "line": {+          "construction": true,+          "fromMm": [+           -1.0,+           0.0+          ],+          "toMm": [+           11.0,+           0.0+          ]+         }+        }+       ],+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "sketch.construction",+          "what": "construction geometry (CreateCenterLine; arcs with ConstructionGeometry)"+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.rect",+         "sketch.multiProfile",+         "sketch.construction"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "resolvedPlane": null,+       "sketch": "Sketch34",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false+      },+      "step": 6+     },+     {+      "op": "revolve_cut",+      "result": {+       "angleDeg": 180.0,+       "axis": {+        "entity": 1,+        "mark": 4,+        "segment": "Line5",+        "selectedVia": "SelectByID2 EXTSKETCHSEGMENT"+       },+       "feature": "Cut-Revolve2",+       "midPlane": true,+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "revolve_cut.midPlane",+          "what": "a revolve-cut symmetric about the sketch plane"+         }+        ],+        "variants": [+         "revolve_cut.midPlane"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "reverse": false,+       "route": "FeatureRevolve2",+       "sketch": "Sketch34"+      },+      "step": 7+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "6061 Alloy"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 2700.0,+       "densityRequested": 2700.0,+       "material": "6061 Alloy",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 8+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792190208004.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     0.0,+     -0.015,+     -0.015,+     0.095,+     0.015,+     0.015+    ],+    "centerOfMass": [+     0.04683149058149059,+     -0.00011418487317649497,+     4.322366645210338e-19+    ],+    "centerOfMassMm": [+     46.831491,+     -0.114185,+     0.0+    ],+    "density": 2700.0,+    "densityKgM3": 2700.0,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "durationMs": 2831,+    "error": "",+    "massG": 103.5688850108947,+    "massKg": 0.1035688850108947,+    "materialName": "6061 Alloy",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[0.0,-0.015,-0.015,0.095,0.015,0.015],\"centerOfMass\":[0.04683149058149059,-0.00011418487317649497,4.322366645210338e-19],\"centerOfMassMm\":[46.831491,-0.114185,0.0],\"density\":2700.0,\"densityKgM3\":2700.0,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"massG\":103.5688850108947,\"massKg\":0.1035688850108947,\"materialName\":\"6061 Alloy\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 729s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.010314158421317086,\"surfaceAreaMm2\":10314.158421317086,\"timeoutSeconds\":120,\"volumeM3\":0.00003835884630033137,\"volumeMm3\":38358.84630033137}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 729s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.010314158421317086,+    "surfaceAreaMm2": 10314.158421317086,+    "timeoutSeconds": 120,+    "volumeM3": 3.835884630033137e-05,+    "volumeMm3": 38358.84630033137+   },+   "pass": true,+   "checks": [+    {+     "quantity": "massG",+     "expected": 103.568885,+     "measured": 103.5688850108947,+     "offPct": 1.0519287848706173e-08,+     "pass": true+    },+    {+     "quantity": "volumeMm3",+     "expected": 38358.8463,+     "measured": 38358.84630033137,+     "offPct": 8.638657561052762e-10,+     "pass": true+    },+    {+     "quantity": "centerOfMassMm",+     "expected": [+      46.831491,+      -0.114185,+      0.0+     ],+     "measured": [+      46.831491,+      -0.114185,+      0.0+     ],+     "pass": true+    }+   ],+   "fails": [],+   "seconds": 46.7+  },+  {+   "id": "cswa-10-community-mirrored-block",+   "title": "Community: a stepped block - one quarter, mirrored about Front Plane (features) and Right Plane (bodies); a boss mirrored about an offset plane",+   "official": false,+   "source": "community: built for the bridge's benchmark (no exam publishes it); the key is derived analytically in `derivation`",+   "expected": {+    "massG": 722.912919,+    "volumeMm3": 91507.964474,+    "centerOfMassMm": [+     -0.082395,+     16.02733,+     0.0+    ],+    "tolerancePct": 0.1+   },+   "material": {+    "name": "AISI 1020",+    "densityKgM3": 7900+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792190208004.SLDPRT",+    "durationMs": 53392,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792190208004.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":47.6,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 9 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 732s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":9,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792190208004.SLDPRT\",\"deleted\":[\"Sketch32\",\"Revolve1\",\"Cut-Revolve1\",\"Cut-Revolve2\",\"Sketch33\",\"Sketch34\"],\"featuresDeleted\":6,\"passes\":2,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"line\":{\"fromMm\":[0.0,0.0],\"toMm\":[60.0,0.0]}},{\"line\":{\"fromMm\":[60.0,0.0],\"toMm\":[60.0,10.0]}},{\"line\":{\"fromMm\":[60.0,10.0],\"toMm\":[40.0,10.0]}},{\"line\":{\"fromMm\":[40.0,10.0],\"toMm\":[40.0,25.0]}},{\"line\":{\"fromMm\":[40.0,25.0],\"toMm\":[20.0,25.0]}},{\"line\":{\"fromMm\":[20.0,25.0],\"toMm\":[20.0,40.0]}},{\"line\":{\"fromMm\":[20.0,40.0],\"toMm\":[0.0,40.0]}},{\"line\":{\"fromMm\":[0.0,40.0],\"toMm\":[0.0,0.0]}}],\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.front\",\"sketch.multiProfile\",\"sketch.line\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch35\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":15.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude13\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch35\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"mirror\",\"result\":{\"feature\":\"Mirror1\",\"mirrorBody\":false,\"mirrored\":[\"Boss-Extrude13\"],\"plane\":\"Front Plane\",\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"mirror.features.plane\",\"what\":\"features mirrored about a named plane (InsertMirrorFeature2, features mark 1, plane mark 2)\"}],\"variants\":[\"mirror.features.plane\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"route\":\"InsertMirrorFeature2\",\"scope\":{\"id\":0,\"member\":\"swFeatureScope_AllBodies\"}},\"step\":4},{\"op\":\"mirror\",\"result\":{\"feature\":\"Mirror2\",\"mirrorBody\":true,\"mirrored\":[\"Mirror1\"],\"plane\":\"Right Plane\",\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"mirror.bodies.plane\",\"what\":\"every body mirrored about a named plane (BMirrorBody, bodies mark 256)\"}],\"variants\":[\"mirror.bodies.plane\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"route\":\"InsertMirrorFeature2\",\"scope\":{\"id\":0,\"member\":\"swFeatureScope_AllBodies\"}},\"step\":5},{\"op\":\"sketch_circle\",\"result\":{\"createdPlane\":null,\"entities\":[{\"circle\":{\"centerMm\":[-15.0,0.0],\"radiusMm\":4.0}}],\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[0.0,40.0,0.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.top.positive\",\"sketch.circle\",\"select.multiSelectTyped\"]},\"radiusMm\":4.0,\"resolvedPlane\":{\"faceNormal\":[-0.0,1.0,-0.0],\"offsetFrom\":\"Top Plane\",\"offsetMm\":40.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch36\",\"sketchNormal\":[0.0,1.0,0.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false},\"step\":6},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":15.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[-0.0,1.0,-0.0],\"sketchNormal\":[0.0,1.0,0.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude14\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch36\",\"throughAll\":false,\"upToFace\":null},\"step\":7},{\"op\":\"mirror\",\"result\":{\"feature\":\"Mirror3\",\"mirrorBody\":false,\"mirrored\":[\"Boss-Extrude14\"],\"plane\":{\"createdPlane\":\"Plane10\",\"offsetFrom\":\"Right Plane\",\"offsetMm\":-5.0,\"plane\":\"Plane10\",\"verified\":true},\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"mirror.features.offset\",\"what\":\"features mirrored about an offset plane\"}],\"variants\":[\"mirror.features.offset\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"route\":\"InsertMirrorFeature2\",\"scope\":{\"id\":0,\"member\":\"swFeatureScope_AllBodies\"}},\"step\":8},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"AISI 1020\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":7899.999999999999,\"densityRequested\":7900.0,\"material\":\"AISI 1020\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":9}],\"success\":true,\"targetDocument\":\"Part1-1792190208004.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 47.6,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 9 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 732s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 9,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792190208004.SLDPRT",+       "deleted": [+        "Sketch32",+        "Revolve1",+        "Cut-Revolve1",+        "Cut-Revolve2",+        "Sketch33",+        "Sketch34"+       ],+       "featuresDeleted": 6,+       "passes": 2,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "line": {+          "fromMm": [+           0.0,+           0.0+          ],+          "toMm": [+           60.0,+           0.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           60.0,+           0.0+          ],+          "toMm": [+           60.0,+           10.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           60.0,+           10.0+          ],+          "toMm": [+           40.0,+           10.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           40.0,+           10.0+          ],+          "toMm": [+           40.0,+           25.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           40.0,+           25.0+          ],+          "toMm": [+           20.0,+           25.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           20.0,+           25.0+          ],+          "toMm": [+           20.0,+           40.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           20.0,+           40.0+          ],+          "toMm": [+           0.0,+           40.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           0.0,+           40.0+          ],+          "toMm": [+           0.0,+           0.0+          ]+         }+        }+       ],+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.multiProfile",+         "sketch.line"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch35",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 15.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude13",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch35",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "mirror",+      "result": {+       "feature": "Mirror1",+       "mirrorBody": false,+       "mirrored": [+        "Boss-Extrude13"+       ],+       "plane": "Front Plane",+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "mirror.features.plane",+          "what": "features mirrored about a named plane (InsertMirrorFeature2, features mark 1, plane mark 2)"+         }+        ],+        "variants": [+         "mirror.features.plane"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "route": "InsertMirrorFeature2",+       "scope": {+        "id": 0,+        "member": "swFeatureScope_AllBodies"+       }+      },+      "step": 4+     },+     {+      "op": "mirror",+      "result": {+       "feature": "Mirror2",+       "mirrorBody": true,+       "mirrored": [+        "Mirror1"+       ],+       "plane": "Right Plane",+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "mirror.bodies.plane",+          "what": "every body mirrored about a named plane (BMirrorBody, bodies mark 256)"+         }+        ],+        "variants": [+         "mirror.bodies.plane"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "route": "InsertMirrorFeature2",+       "scope": {+        "id": 0,+        "member": "swFeatureScope_AllBodies"+       }+      },+      "step": 5+     },+     {+      "op": "sketch_circle",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "circle": {+          "centerMm": [+           -15.0,+           0.0+          ],+          "radiusMm": 4.0+         }+        }+       ],+       "mapped": true,+       "plane": {+        "face": {+         "atPointMm": [+          0.0,+          40.0,+          0.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.face.top.positive",+         "sketch.circle",+         "select.multiSelectTyped"+        ]+       },+       "radiusMm": 4.0,+       "resolvedPlane": {+        "faceNormal": [+         -0.0,+         1.0,+         -0.0+        ],+        "offsetFrom": "Top Plane",+        "offsetMm": 40.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch36",+       "sketchNormal": [+        0.0,+        1.0,+        0.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false+      },+      "step": 6+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 15.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         -0.0,+         1.0,+         -0.0+        ],+        "sketchNormal": [+         0.0,+         1.0,+         0.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude14",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch36",+       "throughAll": false,+       "upToFace": null+      },+      "step": 7+     },+     {+      "op": "mirror",+      "result": {+       "feature": "Mirror3",+       "mirrorBody": false,+       "mirrored": [+        "Boss-Extrude14"+       ],+       "plane": {+        "createdPlane": "Plane10",+        "offsetFrom": "Right Plane",+        "offsetMm": -5.0,+        "plane": "Plane10",+        "verified": true+       },+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "mirror.features.offset",+          "what": "features mirrored about an offset plane"+         }+        ],+        "variants": [+         "mirror.features.offset"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "route": "InsertMirrorFeature2",+       "scope": {+        "id": 0,+        "member": "swFeatureScope_AllBodies"+       }+      },+      "step": 8+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "AISI 1020"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 7899.999999999999,+       "densityRequested": 7900.0,+       "material": "AISI 1020",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 9+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792190208004.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     -0.06,+     0.0,+     -0.015,+     0.06,+     0.055,+     0.015+    ],+    "centerOfMass": [+     -8.239525829230276e-05,+     0.01602732965307076,+     1.2215704700278249e-18+    ],+    "centerOfMassMm": [+     -0.082395,+     16.02733,+     0.0+    ],+    "density": 7899.999999999999,+    "densityKgM3": 7899.999999999999,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "durationMs": 3608,+    "error": "",+    "massG": 722.9129193424126,+    "massKg": 0.7229129193424125,+    "materialName": "AISI 1020",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[-0.06,0.0,-0.015,0.06,0.055,0.015],\"centerOfMass\":[-0.00008239525829230276,0.01602732965307076,1.2215704700278249e-18],\"centerOfMassMm\":[-0.082395,16.02733,0.0],\"density\":7899.999999999999,\"densityKgM3\":7899.999999999999,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"massG\":722.9129193424126,\"massKg\":0.7229129193424125,\"materialName\":\"AISI 1020\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 786s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.016353982236861547,\"surfaceAreaMm2\":16353.982236861548,\"timeoutSeconds\":120,\"volumeM3\":0.00009150796447372313,\"volumeMm3\":91507.96447372311}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 786s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.016353982236861547,+    "surfaceAreaMm2": 16353.982236861548,+    "timeoutSeconds": 120,+    "volumeM3": 9.150796447372313e-05,+    "volumeMm3": 91507.96447372311+   },+   "pass": true,+   "checks": [+    {+     "quantity": "massG",+     "expected": 722.912919,+     "measured": 722.9129193424126,+     "offPct": 4.736567596544381e-08,+     "pass": true+    },+    {+     "quantity": "volumeMm3",+     "expected": 91507.964474,+     "measured": 91507.96447372311,+     "offPct": 3.02573981009932e-10,+     "pass": true+    },+    {+     "quantity": "centerOfMassMm",+     "expected": [+      -0.082395,+      16.02733,+      0.0+     ],+     "measured": [+      -0.082395,+      16.02733,+      0.0+     ],+     "pass": true+    }+   ],+   "fails": [],+   "seconds": 57.0+  },+  {+   "id": "cswa-11-community-slotted-plate",+   "title": "Community: a plate with two straight slots, a hexagon pocket, a counterbored and a countersunk hole",+   "official": false,+   "source": "community: built for the bridge's benchmark (no exam publishes it); the key is derived analytically in `derivation`",+   "expected": {+    "massG": 276.35927,+    "volumeMm3": 102355.285153,+    "centerOfMassMm": [+     1.375325,+     5.907388,+     0.035809+    ],+    "tolerancePct": 0.1+   },+   "material": {+    "name": "6061 Alloy",+    "densityKgM3": 2700+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792190208004.SLDPRT",+    "durationMs": 83954,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792190208004.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":78.0,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 10 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 789s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":10,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792190208004.SLDPRT\",\"deleted\":[\"Sketch35\",\"Boss-Extrude13\",\"Mirror1\",\"Mirror2\",\"Sketch36\",\"Boss-Extrude14\",\"Plane10\",\"Mirror3\"],\"featuresDeleted\":8,\"passes\":1,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch_rect\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[-60.0,-40.0],[60.0,40.0]]}}],\"heightMm\":80.0,\"mapped\":false,\"plane\":\"Top Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.top\",\"sketch.rect\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch37\",\"sketchNormal\":[0.0,1.0,0.0],\"sketchedOn\":\"Top Plane\",\"transformInverted\":false,\"widthMm\":120.0},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":12.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,1.0,0.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude15\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch37\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"line\":{\"fromMm\":[-45.0,15.0],\"toMm\":[-15.0,15.0]}},{\"arc\":{\"ccw\":true,\"centerMm\":[-15.0,20.0],\"endMm\":[-15.0,25.0],\"radiusMm\":5.000000000000001,\"startMm\":[-15.0,15.0]}},{\"line\":{\"fromMm\":[-15.0,25.0],\"toMm\":[-45.0,25.0]}},{\"arc\":{\"ccw\":true,\"centerMm\":[-45.0,20.0],\"endMm\":[-45.0,15.0],\"radiusMm\":5.000000000000001,\"startMm\":[-45.0,25.0]}},{\"line\":{\"fromMm\":[-45.0,-25.0],\"toMm\":[-15.0,-25.0]}},{\"arc\":{\"ccw\":true,\"centerMm\":[-15.0,-20.0],\"endMm\":[-15.0,-15.0],\"radiusMm\":5.000000000000001,\"startMm\":[-15.0,-25.0]}},{\"line\":{\"fromMm\":[-15.0,-15.0],\"toMm\":[-45.0,-15.0]}},{\"arc\":{\"ccw\":true,\"centerMm\":[-45.0,-20.0],\"endMm\":[-45.0,-25.0],\"radiusMm\":5.000000000000001,\"startMm\":[-45.0,-15.0]}}],\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[0.0,12.0,0.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.top.positive\",\"sketch.multiProfile\",\"sketch.line\",\"sketch.arc\",\"select.multiSelectTyped\"]},\"resolvedPlane\":{\"faceNormal\":[-0.0,1.0,-0.0],\"offsetFrom\":\"Top Plane\",\"offsetMm\":12.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch38\",\"sketchNormal\":[0.0,1.0,0.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false},\"step\":4},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":0.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[-0.0,1.0,-0.0],\"sketchNormal\":[0.0,1.0,0.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":1,\"feature\":\"Cut-Extrude20\",\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"cut.one.throughAll\",\"what\":\"a cut through all, the default direction (into a face)\"}],\"variants\":[\"cut.one.throughAll\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch38\",\"throughAll\":true,\"upToFace\":null},\"step\":5},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"line\":{\"fromMm\":[37.00000000000001,0.0],\"toMm\":[31.000000000000004,10.392304845413264]}},{\"line\":{\"fromMm\":[31.000000000000004,10.392304845413264],\"toMm\":[19.000000000000004,10.392304845413266]}},{\"line\":{\"fromMm\":[19.000000000000004,10.392304845413266],\"toMm\":[13.0,1.469527624586853e-15]}},{\"line\":{\"fromMm\":[13.0,1.469527624586853e-15],\"toMm\":[18.999999999999996,-10.39230484541326]}},{\"line\":{\"fromMm\":[18.999999999999996,-10.39230484541326],\"toMm\":[31.000000000000004,-10.392304845413264]}},{\"line\":{\"fromMm\":[31.000000000000004,-10.392304845413264],\"toMm\":[37.00000000000001,-2.939055249173706e-15]}}],\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[0.0,12.0,0.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.top.positive\",\"sketch.multiProfile\",\"sketch.line\",\"select.multiSelectTyped\"]},\"resolvedPlane\":{\"faceNormal\":[-0.0,1.0,-0.0],\"offsetFrom\":\"Top Plane\",\"offsetMm\":12.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch39\",\"sketchNormal\":[0.0,1.0,0.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false},\"step\":6},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":5.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[-0.0,1.0,-0.0],\"sketchNormal\":[0.0,1.0,0.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude21\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch39\",\"throughAll\":false,\"upToFace\":null},\"step\":7},{\"op\":\"hole\",\"result\":{\"depthMm\":null,\"diameterMm\":8.0,\"face\":{\"atPointMm\":[45.0,12.0,-25.0],\"heightMm\":12.0,\"normal\":[-0.0,1.0,-0.0],\"pickedBy\":\"geometry\",\"plane\":\"Top Plane\"},\"feature\":\"Cut-Extrude23\",\"features\":[\"Cut-Extrude22\",\"Cut-Extrude23\"],\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"hole.counterbore\",\"what\":\"a counterbored hole (two cuts)\"}],\"variants\":[\"hole.counterbore\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"steps\":[{\"op\":\"sketch\",\"result\":{\"createdPlane\":\"Plane11\",\"entities\":[{\"circle\":{\"centerMm\":[45.0,25.0],\"radiusMm\":7.0}}],\"mapped\":true,\"plane\":{\"offsetFrom\":\"Top Plane\",\"offsetMm\":12.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"radiusMm\":7.0,\"resolvedPlane\":{\"offsetFrom\":\"Top Plane\",\"offsetMm\":12.0,\"plane\":\"Plane11\",\"verified\":true},\"sketch\":\"Sketch40\",\"sketchNormal\":[0.0,1.0,0.0],\"sketchedOn\":\"Plane11\",\"transformInverted\":false}},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":4.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,1.0,0.0],\"sketchNormal\":[0.0,1.0,0.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude22\",\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch40\",\"throughAll\":false,\"upToFace\":null}},{\"op\":\"sketch\",\"result\":{\"createdPlane\":\"Plane12\",\"entities\":[{\"circle\":{\"centerMm\":[45.0,25.0],\"radiusMm\":4.0}}],\"mapped\":true,\"plane\":{\"offsetFrom\":\"Top Plane\",\"offsetMm\":8.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"radiusMm\":4.0,\"resolvedPlane\":{\"offsetFrom\":\"Top Plane\",\"offsetMm\":8.0,\"plane\":\"Plane12\",\"verified\":true},\"sketch\":\"Sketch41\",\"sketchNormal\":[0.0,1.0,0.0],\"sketchedOn\":\"Plane12\",\"transformInverted\":false}},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":0.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,1.0,0.0],\"sketchNormal\":[0.0,1.0,0.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":1,\"feature\":\"Cut-Extrude23\",\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch41\",\"throughAll\":true,\"upToFace\":null}}],\"throughAll\":true},\"step\":8},{\"op\":\"hole\",\"result\":{\"depthMm\":null,\"diameterMm\":8.0,\"face\":{\"atPointMm\":[45.0,12.0,25.0],\"heightMm\":12.0,\"normal\":[-0.0,1.0,-0.0],\"pickedBy\":\"geometry\",\"plane\":\"Top Plane\"},\"feature\":\"Cut-Extrude25\",\"features\":[\"Cut-Extrude24\",\"Cut-Extrude25\"],\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"hole.countersink\",\"what\":\"a countersunk hole (a drafted cut, then the hole)\"}],\"variants\":[\"hole.countersink\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"steps\":[{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"circle\":{\"centerMm\":[45.0,-25.0],\"radiusMm\":8.0}}],\"mapped\":true,\"plane\":{\"offsetFrom\":\"Top Plane\",\"offsetMm\":12.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"radiusMm\":8.0,\"resolvedPlane\":{\"offsetFrom\":\"Top Plane\",\"offsetMm\":12.0,\"plane\":\"Plane11\",\"verified\":true},\"sketch\":\"Sketch42\",\"sketchNormal\":[0.0,1.0,0.0],\"sketchedOn\":\"Plane11\",\"transformInverted\":false}},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":4.000000000000001,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,1.0,0.0],\"sketchNormal\":[0.0,1.0,0.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":45.0,\"draftInward\":true,\"endCondition\":0,\"feature\":\"Cut-Extrude24\",\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch42\",\"throughAll\":false,\"upToFace\":null}},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"circle\":{\"centerMm\":[45.0,-25.0],\"radiusMm\":4.0}}],\"mapped\":true,\"plane\":{\"offsetFrom\":\"Top Plane\",\"offsetMm\":8.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"radiusMm\":4.0,\"resolvedPlane\":{\"offsetFrom\":\"Top Plane\",\"offsetMm\":8.0,\"plane\":\"Plane12\",\"verified\":true},\"sketch\":\"Sketch43\",\"sketchNormal\":[0.0,1.0,0.0],\"sketchedOn\":\"Plane12\",\"transformInverted\":false}},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":0.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,1.0,0.0],\"sketchNormal\":[0.0,1.0,0.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":1,\"feature\":\"Cut-Extrude25\",\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch43\",\"throughAll\":true,\"upToFace\":null}}],\"throughAll\":true},\"step\":9},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"6061 Alloy\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":2700.0,\"densityRequested\":2700.0,\"material\":\"6061 Alloy\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":10}],\"success\":true,\"targetDocument\":\"Part1-1792190208004.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 78.0,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 10 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 789s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 10,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792190208004.SLDPRT",+       "deleted": [+        "Sketch35",+        "Boss-Extrude13",+        "Mirror1",+        "Mirror2",+        "Sketch36",+        "Boss-Extrude14",+        "Plane10",+        "Mirror3"+       ],+       "featuresDeleted": 8,+       "passes": 1,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch_rect",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            -60.0,+            -40.0+           ],+           [+            60.0,+            40.0+           ]+          ]+         }+        }+       ],+       "heightMm": 80.0,+       "mapped": false,+       "plane": "Top Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.top",+         "sketch.rect"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch37",+       "sketchNormal": [+        0.0,+        1.0,+        0.0+       ],+       "sketchedOn": "Top Plane",+       "transformInverted": false,+       "widthMm": 120.0+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 12.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         1.0,+         0.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude15",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch37",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "line": {+          "fromMm": [+           -45.0,+           15.0+          ],+          "toMm": [+           -15.0,+           15.0+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           -15.0,+           20.0+          ],+          "endMm": [+           -15.0,+           25.0+          ],+          "radiusMm": 5.000000000000001,+          "startMm": [+           -15.0,+           15.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -15.0,+           25.0+          ],+          "toMm": [+           -45.0,+           25.0+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           -45.0,+           20.0+          ],+          "endMm": [+           -45.0,+           15.0+          ],+          "radiusMm": 5.000000000000001,+          "startMm": [+           -45.0,+           25.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -45.0,+           -25.0+          ],+          "toMm": [+           -15.0,+           -25.0+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           -15.0,+           -20.0+          ],+          "endMm": [+           -15.0,+           -15.0+          ],+          "radiusMm": 5.000000000000001,+          "startMm": [+           -15.0,+           -25.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -15.0,+           -15.0+          ],+          "toMm": [+           -45.0,+           -15.0+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           -45.0,+           -20.0+          ],+          "endMm": [+           -45.0,+           -25.0+          ],+          "radiusMm": 5.000000000000001,+          "startMm": [+           -45.0,+           -15.0+          ]+         }+        }+       ],+       "mapped": true,+       "plane": {+        "face": {+         "atPointMm": [+          0.0,+          12.0,+          0.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.face.top.positive",+         "sketch.multiProfile",+         "sketch.line",+         "sketch.arc",+         "select.multiSelectTyped"+        ]+       },+       "resolvedPlane": {+        "faceNormal": [+         -0.0,+         1.0,+         -0.0+        ],+        "offsetFrom": "Top Plane",+        "offsetMm": 12.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch38",+       "sketchNormal": [+        0.0,+        1.0,+        0.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false+      },+      "step": 4+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 0.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         -0.0,+         1.0,+         -0.0+        ],+        "sketchNormal": [+         0.0,+         1.0,+         0.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 1,+       "feature": "Cut-Extrude20",+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "cut.one.throughAll",+          "what": "a cut through all, the default direction (into a face)"+         }+        ],+        "variants": [+         "cut.one.throughAll"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch38",+       "throughAll": true,+       "upToFace": null+      },+      "step": 5+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "line": {+          "fromMm": [+           37.00000000000001,+           0.0+          ],+          "toMm": [+           31.000000000000004,+           10.392304845413264+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           31.000000000000004,+           10.392304845413264+          ],+          "toMm": [+           19.000000000000004,+           10.392304845413266+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           19.000000000000004,+           10.392304845413266+          ],+          "toMm": [+           13.0,+           1.469527624586853e-15+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           13.0,+           1.469527624586853e-15+          ],+          "toMm": [+           18.999999999999996,+           -10.39230484541326+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           18.999999999999996,+           -10.39230484541326+          ],+          "toMm": [+           31.000000000000004,+           -10.392304845413264+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           31.000000000000004,+           -10.392304845413264+          ],+          "toMm": [+           37.00000000000001,+           -2.939055249173706e-15+          ]+         }+        }+       ],+       "mapped": true,+       "plane": {+        "face": {+         "atPointMm": [+          0.0,+          12.0,+          0.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.face.top.positive",+         "sketch.multiProfile",+         "sketch.line",+         "select.multiSelectTyped"+        ]+       },+       "resolvedPlane": {+        "faceNormal": [+         -0.0,+         1.0,+         -0.0+        ],+        "offsetFrom": "Top Plane",+        "offsetMm": 12.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch39",+       "sketchNormal": [+        0.0,+        1.0,+        0.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false+      },+      "step": 6+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 5.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         -0.0,+         1.0,+         -0.0+        ],+        "sketchNormal": [+         0.0,+         1.0,+         0.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Cut-Extrude21",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch39",+       "throughAll": false,+       "upToFace": null+      },+      "step": 7+     },+     {+      "op": "hole",+      "result": {+       "depthMm": null,+       "diameterMm": 8.0,+       "face": {+        "atPointMm": [+         45.0,+         12.0,+         -25.0+        ],+        "heightMm": 12.0,+        "normal": [+         -0.0,+         1.0,+         -0.0+        ],+        "pickedBy": "geometry",+        "plane": "Top Plane"+       },+       "feature": "Cut-Extrude23",+       "features": [+        "Cut-Extrude22",+        "Cut-Extrude23"+       ],+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "hole.counterbore",+          "what": "a counterbored hole (two cuts)"+         }+        ],+        "variants": [+         "hole.counterbore"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "steps": [+        {+         "op": "sketch",+         "result": {+          "createdPlane": "Plane11",+          "entities": [+           {+            "circle": {+             "centerMm": [+              45.0,+              25.0+             ],+             "radiusMm": 7.0+            }+           }+          ],+          "mapped": true,+          "plane": {+           "offsetFrom": "Top Plane",+           "offsetMm": 12.0+          },+          "planeFrames": "plane transforms (they match the measured Front/Top axes)",+          "radiusMm": 7.0,+          "resolvedPlane": {+           "offsetFrom": "Top Plane",+           "offsetMm": 12.0,+           "plane": "Plane11",+           "verified": true+          },+          "sketch": "Sketch40",+          "sketchNormal": [+           0.0,+           1.0,+           0.0+          ],+          "sketchedOn": "Plane11",+          "transformInverted": false+         }+        },+        {+         "op": "cut",+         "result": {+          "depth2Mm": null,+          "depthMm": 4.0,+          "dir": {+           "flippedToFollowTheReference": false,+           "reference": [+            0.0,+            1.0,+            0.0+           ],+           "sketchNormal": [+            0.0,+            1.0,+            0.0+           ],+           "value": false+          },+          "direction": "one",+          "draftDeg": null,+          "draftInward": null,+          "endCondition": 0,+          "feature": "Cut-Extrude22",+          "regions": null,+          "reverse": false,+          "sketch": "Sketch40",+          "throughAll": false,+          "upToFace": null+         }+        },+        {+         "op": "sketch",+         "result": {+          "createdPlane": "Plane12",+          "entities": [+           {+            "circle": {+             "centerMm": [+              45.0,+              25.0+             ],+             "radiusMm": 4.0+            }+           }+          ],+          "mapped": true,+          "plane": {+           "offsetFrom": "Top Plane",+           "offsetMm": 8.0+          },+          "planeFrames": "plane transforms (they match the measured Front/Top axes)",+          "radiusMm": 4.0,+          "resolvedPlane": {+           "offsetFrom": "Top Plane",+           "offsetMm": 8.0,+           "plane": "Plane12",+           "verified": true+          },+          "sketch": "Sketch41",+          "sketchNormal": [+           0.0,+           1.0,+           0.0+          ],+          "sketchedOn": "Plane12",+          "transformInverted": false+         }+        },+        {+         "op": "cut",+         "result": {+          "depth2Mm": null,+          "depthMm": 0.0,+          "dir": {+           "flippedToFollowTheReference": false,+           "reference": [+            0.0,+            1.0,+            0.0+           ],+           "sketchNormal": [+            0.0,+            1.0,+            0.0+           ],+           "value": false+          },+          "direction": "one",+          "draftDeg": null,+          "draftInward": null,+          "endCondition": 1,+          "feature": "Cut-Extrude23",+          "regions": null,+          "reverse": false,+          "sketch": "Sketch41",+          "throughAll": true,+          "upToFace": null+         }+        }+       ],+       "throughAll": true+      },+      "step": 8+     },+     {+      "op": "hole",+      "result": {+       "depthMm": null,+       "diameterMm": 8.0,+       "face": {+        "atPointMm": [+         45.0,+         12.0,+         25.0+        ],+        "heightMm": 12.0,+        "normal": [+         -0.0,+         1.0,+         -0.0+        ],+        "pickedBy": "geometry",+        "plane": "Top Plane"+       },+       "feature": "Cut-Extrude25",+       "features": [+        "Cut-Extrude24",+        "Cut-Extrude25"+       ],+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "hole.countersink",+          "what": "a countersunk hole (a drafted cut, then the hole)"+         }+        ],+        "variants": [+         "hole.countersink"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "steps": [+        {+         "op": "sketch",+         "result": {+          "createdPlane": null,+          "entities": [+           {+            "circle": {+             "centerMm": [+              45.0,+              -25.0+             ],+             "radiusMm": 8.0+            }+           }+          ],+          "mapped": true,+          "plane": {+           "offsetFrom": "Top Plane",+           "offsetMm": 12.0+          },+          "planeFrames": "plane transforms (they match the measured Front/Top axes)",+          "radiusMm": 8.0,+          "resolvedPlane": {+           "offsetFrom": "Top Plane",+           "offsetMm": 12.0,+           "plane": "Plane11",+           "verified": true+          },+          "sketch": "Sketch42",+          "sketchNormal": [+           0.0,+           1.0,+           0.0+          ],+          "sketchedOn": "Plane11",+          "transformInverted": false+         }+        },+        {+         "op": "cut",+         "result": {+          "depth2Mm": null,+          "depthMm": 4.000000000000001,+          "dir": {+           "flippedToFollowTheReference": false,+           "reference": [+            0.0,+            1.0,+            0.0+           ],+           "sketchNormal": [+            0.0,+            1.0,+            0.0+           ],+           "value": false+          },+          "direction": "one",+          "draftDeg": 45.0,+          "draftInward": true,+          "endCondition": 0,+          "feature": "Cut-Extrude24",+          "regions": null,+          "reverse": false,+          "sketch": "Sketch42",+          "throughAll": false,+          "upToFace": null+         }+        },+        {+         "op": "sketch",+         "result": {+          "createdPlane": null,+          "entities": [+           {+            "circle": {+             "centerMm": [+              45.0,+              -25.0+             ],+             "radiusMm": 4.0+            }+           }+          ],+          "mapped": true,+          "plane": {+           "offsetFrom": "Top Plane",+           "offsetMm": 8.0+          },+          "planeFrames": "plane transforms (they match the measured Front/Top axes)",+          "radiusMm": 4.0,+          "resolvedPlane": {+           "offsetFrom": "Top Plane",+           "offsetMm": 8.0,+           "plane": "Plane12",+           "verified": true+          },+          "sketch": "Sketch43",+          "sketchNormal": [+           0.0,+           1.0,+           0.0+          ],+          "sketchedOn": "Plane12",+          "transformInverted": false+         }+        },+        {+         "op": "cut",+         "result": {+          "depth2Mm": null,+          "depthMm": 0.0,+          "dir": {+           "flippedToFollowTheReference": false,+           "reference": [+            0.0,+            1.0,+            0.0+           ],+           "sketchNormal": [+            0.0,+            1.0,+            0.0+           ],+           "value": false+          },+          "direction": "one",+          "draftDeg": null,+          "draftInward": null,+          "endCondition": 1,+          "feature": "Cut-Extrude25",+          "regions": null,+          "reverse": false,+          "sketch": "Sketch43",+          "throughAll": true,+          "upToFace": null+         }+        }+       ],+       "throughAll": true+      },+      "step": 9+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "6061 Alloy"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 2700.0,+       "densityRequested": 2700.0,+       "material": "6061 Alloy",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 10+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792190208004.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     -0.06,+     0.0,+     -0.04,+     0.06,+     0.012,+     0.04+    ],+    "centerOfMass": [+     0.001029833412117897,+     0.005880255965529374,+     -0.00016189890294791875+    ],+    "centerOfMassMm": [+     1.029833,+     5.880256,+     -0.161899+    ],+    "density": 2700.0,+    "densityKgM3": 2700.0,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "durationMs": 3402,+    "error": "",+    "massG": 274.1878010717839,+    "massKg": 0.2741878010717839,+    "materialName": "6061 Alloy",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[-0.06,0.0,-0.04,0.06,0.012,0.04],\"centerOfMass\":[0.001029833412117897,0.005880255965529374,-0.00016189890294791875],\"centerOfMassMm\":[1.029833,5.880256,-0.161899],\"density\":2700.0,\"densityKgM3\":2700.0,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"massG\":274.1878010717839,\"massKg\":0.2741878010717839,\"materialName\":\"6061 Alloy\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 873s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.026023572137273195,\"surfaceAreaMm2\":26023.572137273193,\"timeoutSeconds\":120,\"volumeM3\":0.00010155103743399405,\"volumeMm3\":101551.03743399405}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 873s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.026023572137273195,+    "surfaceAreaMm2": 26023.572137273193,+    "timeoutSeconds": 120,+    "volumeM3": 0.00010155103743399405,+    "volumeMm3": 101551.03743399405+   },+   "pass": false,+   "checks": [+    {+     "quantity": "massG",+     "expected": 276.35927,+     "measured": 274.1878010717839,+     "offPct": 0.7857413026948893,+     "pass": false+    },+    {+     "quantity": "volumeMm3",+     "expected": 102355.285153,+     "measured": 101551.03743399405,+     "offPct": 0.7857412714973866,+     "pass": false+    },+    {+     "quantity": "centerOfMassMm",+     "expected": [+      1.375325,+      5.907388,+      0.035809+     ],+     "measured": [+      1.029833,+      5.880256,+      -0.161899+     ],+     "pass": false+    }+   ],+   "fails": [+    "massG: 274.1878010717839 vs 276.35927 (0.7857413026948893 % off)",+    "volumeMm3: 101551.03743399405 vs 102355.285153 (0.7857412714973866 % off)",+    "centerOfMassMm: [1.029833, 5.880256, -0.161899] vs [1.375325, 5.907388, 0.035809] (None % off)"+   ],+   "seconds": 87.4+  },+  {+   "id": "cswa-12-community-up-to-plates",+   "title": "Community: three plates joined by pillars ending up to next, up to a face and 8 short of a face; a drafted boss, a cut up to a face, a drafted pocket",+   "official": false,+   "source": "community: built for the bridge's benchmark (no exam publishes it); the key is derived analytically in `derivation`",+   "expected": {+    "massG": 369.687533,+    "volumeMm3": 136921.308673,+    "centerOfMassMm": [+     40.525243,+     24.723219,+     45.869733+    ],+    "tolerancePct": 0.1+   },+   "material": {+    "name": "6061 Alloy",+    "densityKgM3": 2700+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792190208004.SLDPRT",+    "durationMs": 217369,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792190208004.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":93.1,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 20 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 877s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":20,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792190208004.SLDPRT\",\"deleted\":[\"Sketch37\",\"Boss-Extrude15\",\"Sketch38\",\"Cut-Extrude20\",\"Sketch39\",\"Cut-Extrude21\",\"Plane11\",\"Sketch40\",\"Cut-Extrude22\",\"Plane12\",\"Sketch41\",\"Cut-Extrude23\",\"Sketch42\",\"Cut-Extrude24\",\"Sketch43\",\"Cut-Extrude25\"],\"featuresDeleted\":16,\"passes\":1,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch_rect\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[0.0,0.0],[80.0,50.0]]}}],\"heightMm\":50.0,\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.front\",\"sketch.rect\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch44\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false,\"widthMm\":80.0},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":10.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude16\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch44\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"sketch_rect\",\"result\":{\"createdPlane\":\"Plane13\",\"entities\":[{\"rect\":{\"cornersMm\":[[0.0,0.0],[80.0,50.0]]}}],\"heightMm\":50.0,\"mapped\":true,\"plane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":40.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.4\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.offset.front.positive\",\"sketch.rect\"]},\"resolvedPlane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":40.0,\"plane\":\"Plane13\",\"verified\":true},\"sketch\":\"Sketch45\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Plane13\",\"transformInverted\":false,\"widthMm\":80.0},\"step\":4},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":10.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude17\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch45\",\"throughAll\":false,\"upToFace\":null},\"step\":5},{\"op\":\"sketch_rect\",\"result\":{\"createdPlane\":\"Plane14\",\"entities\":[{\"rect\":{\"cornersMm\":[[0.0,0.0],[80.0,50.0]]}}],\"heightMm\":50.0,\"mapped\":true,\"plane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":80.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.4\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.offset.front.positive\",\"sketch.rect\"]},\"resolvedPlane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":80.0,\"plane\":\"Plane14\",\"verified\":true},\"sketch\":\"Sketch46\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Plane14\",\"transformInverted\":false,\"widthMm\":80.0},\"step\":6},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":10.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude18\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch46\",\"throughAll\":false,\"upToFace\":null},\"step\":7},{\"op\":\"sketch_circle\",\"result\":{\"createdPlane\":\"Plane15\",\"entities\":[{\"circle\":{\"centerMm\":[12.0,25.0],\"radiusMm\":6.0}}],\"mapped\":true,\"plane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":10.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.4\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.offset.front.positive\",\"sketch.circle\"]},\"radiusMm\":6.0,\"resolvedPlane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":10.0,\"plane\":\"Plane15\",\"verified\":true},\"sketch\":\"Sketch47\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Plane15\",\"transformInverted\":false},\"step\":8},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":0.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":11,\"feature\":\"Boss-Extrude19\",\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"extrude.upToNext\",\"what\":\"a boss up to the next face (swEndCondUpToNext 11)\"}],\"variants\":[\"extrude.upToNext\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch47\",\"throughAll\":false,\"upToFace\":null},\"step\":9},{\"op\":\"sketch_circle\",\"result\":{\"createdPlane\":null,\"entities\":[{\"circle\":{\"centerMm\":[68.0,25.0],\"radiusMm\":6.0}}],\"mapped\":true,\"plane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":10.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.4\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.offset.front.positive\",\"sketch.circle\"]},\"radiusMm\":6.0,\"resolvedPlane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":10.0,\"plane\":\"Plane15\",\"verified\":true},\"sketch\":\"Sketch48\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Plane15\",\"transformInverted\":false},\"step\":10},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":8.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":5,\"feature\":\"Boss-Extrude20\",\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"extrude.offsetFromSurface\",\"what\":\"a boss to a distance from a picked face (swEndCondOffsetFromSurface 5)\"}],\"variants\":[\"extrude.offsetFromSurface\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch48\",\"throughAll\":false,\"upToFace\":{\"mark\":1,\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false}},\"step\":11},{\"op\":\"sketch_circle\",\"result\":{\"createdPlane\":null,\"entities\":[{\"circle\":{\"centerMm\":[40.0,25.0],\"radiusMm\":6.0}}],\"mapped\":true,\"plane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":10.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.4\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.offset.front.positive\",\"sketch.circle\"]},\"radiusMm\":6.0,\"resolvedPlane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":10.0,\"plane\":\"Plane15\",\"verified\":true},\"sketch\":\"Sketch49\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Plane15\",\"transformInverted\":false},\"step\":12},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":0.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":10,\"feature\":\"Boss-Extrude21\",\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"extrude.upToSurface\",\"what\":\"a boss up to a picked face (swEndCondUpToSelection 10, the face at mark 1)\"}],\"variants\":[\"extrude.upToSurface\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch49\",\"throughAll\":false,\"upToFace\":{\"mark\":1,\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false}},\"step\":13},{\"op\":\"sketch_circle\",\"result\":{\"createdPlane\":null,\"entities\":[{\"circle\":{\"centerMm\":[25.0,40.0],\"radiusMm\":4.0}}],\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[25.0,40.0,90.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.front.positive\",\"sketch.circle\",\"select.multiSelectTyped\"]},\"radiusMm\":4.0,\"resolvedPlane\":{\"faceNormal\":[-0.0,-0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":90.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch50\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false},\"step\":14},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":0.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[-0.0,-0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":10,\"feature\":\"Cut-Extrude26\",\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"cut.upToSurface\",\"what\":\"a cut up to a picked face\"}],\"variants\":[\"cut.upToSurface\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch50\",\"throughAll\":false,\"upToFace\":{\"mark\":1,\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false}},\"step\":15},{\"op\":\"sketch_rect\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[49.99999999999999,35.0],[69.99999999999999,45.00000000000001]]}}],\"heightMm\":10.000000000000002,\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[60.0,40.0,0.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.4\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.front.negative\",\"sketch.rect\",\"select.multiSelectTyped\"]},\"resolvedPlane\":{\"faceNormal\":[0.0,0.0,-1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":0.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch51\",\"sketchNormal\":[0.0,0.0,-1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false,\"widthMm\":19.999999999999996},\"step\":16},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":6.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,-1.0],\"sketchNormal\":[0.0,0.0,-1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":10.0,\"draftInward\":true,\"endCondition\":0,\"feature\":\"Cut-Extrude27\",\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"cut.draft\",\"what\":\"a cut with draft (a countersink is one)\"}],\"variants\":[\"cut.one\",\"cut.draft\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch51\",\"throughAll\":false,\"upToFace\":null},\"step\":17},{\"op\":\"sketch_circle\",\"result\":{\"createdPlane\":null,\"entities\":[{\"circle\":{\"centerMm\":[40.0,25.0],\"radiusMm\":10.0}}],\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[40.0,25.0,90.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.front.positive\",\"sketch.circle\",\"select.multiSelectTyped\"]},\"radiusMm\":10.0,\"resolvedPlane\":{\"faceNormal\":[-0.0,-0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":90.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch52\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false},\"step\":18},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":12.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[-0.0,-0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":5.0,\"draftInward\":true,\"endCondition\":0,\"feature\":\"Boss-Extrude22\",\"proven\":{\"live\":false,\"measuredOn\":[],\"unmeasured\":[{\"variant\":\"extrude.draft\",\"what\":\"a boss with draft (Dchk1/Ddir1/Dang1)\"}],\"variants\":[\"extrude.one\",\"extrude.draft\"],\"why\":\"not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies\"},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch52\",\"throughAll\":false,\"upToFace\":null},\"step\":19},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"6061 Alloy\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":2700.0,\"densityRequested\":2700.0,\"material\":\"6061 Alloy\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":20}],\"success\":true,\"targetDocument\":\"Part1-1792190208004.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 93.1,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 20 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 877s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 20,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792190208004.SLDPRT",+       "deleted": [+        "Sketch37",+        "Boss-Extrude15",+        "Sketch38",+        "Cut-Extrude20",+        "Sketch39",+        "Cut-Extrude21",+        "Plane11",+        "Sketch40",+        "Cut-Extrude22",+        "Plane12",+        "Sketch41",+        "Cut-Extrude23",+        "Sketch42",+        "Cut-Extrude24",+        "Sketch43",+        "Cut-Extrude25"+       ],+       "featuresDeleted": 16,+       "passes": 1,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch_rect",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            0.0,+            0.0+           ],+           [+            80.0,+            50.0+           ]+          ]+         }+        }+       ],+       "heightMm": 50.0,+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.rect"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch44",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false,+       "widthMm": 80.0+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 10.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude16",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch44",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "sketch_rect",+      "result": {+       "createdPlane": "Plane13",+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            0.0,+            0.0+           ],+           [+            80.0,+            50.0+           ]+          ]+         }+        }+       ],+       "heightMm": 50.0,+       "mapped": true,+       "plane": {+        "offsetFrom": "Front Plane",+        "offsetMm": 40.0+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.4",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.offset.front.positive",+         "sketch.rect"+        ]+       },+       "resolvedPlane": {+        "offsetFrom": "Front Plane",+        "offsetMm": 40.0,+        "plane": "Plane13",+        "verified": true+       },+       "sketch": "Sketch45",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Plane13",+       "transformInverted": false,+       "widthMm": 80.0+      },+      "step": 4+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 10.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude17",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch45",+       "throughAll": false,+       "upToFace": null+      },+      "step": 5+     },+     {+      "op": "sketch_rect",+      "result": {+       "createdPlane": "Plane14",+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            0.0,+            0.0+           ],+           [+            80.0,+            50.0+           ]+          ]+         }+        }+       ],+       "heightMm": 50.0,+       "mapped": true,+       "plane": {+        "offsetFrom": "Front Plane",+        "offsetMm": 80.0+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.4",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.offset.front.positive",+         "sketch.rect"+        ]+       },+       "resolvedPlane": {+        "offsetFrom": "Front Plane",+        "offsetMm": 80.0,+        "plane": "Plane14",+        "verified": true+       },+       "sketch": "Sketch46",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Plane14",+       "transformInverted": false,+       "widthMm": 80.0+      },+      "step": 6+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 10.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude18",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch46",+       "throughAll": false,+       "upToFace": null+      },+      "step": 7+     },+     {+      "op": "sketch_circle",+      "result": {+       "createdPlane": "Plane15",+       "entities": [+        {+         "circle": {+          "centerMm": [+           12.0,+           25.0+          ],+          "radiusMm": 6.0+         }+        }+       ],+       "mapped": true,+       "plane": {+        "offsetFrom": "Front Plane",+        "offsetMm": 10.0+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.4",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.offset.front.positive",+         "sketch.circle"+        ]+       },+       "radiusMm": 6.0,+       "resolvedPlane": {+        "offsetFrom": "Front Plane",+        "offsetMm": 10.0,+        "plane": "Plane15",+        "verified": true+       },+       "sketch": "Sketch47",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Plane15",+       "transformInverted": false+      },+      "step": 8+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 0.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 11,+       "feature": "Boss-Extrude19",+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "extrude.upToNext",+          "what": "a boss up to the next face (swEndCondUpToNext 11)"+         }+        ],+        "variants": [+         "extrude.upToNext"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch47",+       "throughAll": false,+       "upToFace": null+      },+      "step": 9+     },+     {+      "op": "sketch_circle",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "circle": {+          "centerMm": [+           68.0,+           25.0+          ],+          "radiusMm": 6.0+         }+        }+       ],+       "mapped": true,+       "plane": {+        "offsetFrom": "Front Plane",+        "offsetMm": 10.0+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.4",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.offset.front.positive",+         "sketch.circle"+        ]+       },+       "radiusMm": 6.0,+       "resolvedPlane": {+        "offsetFrom": "Front Plane",+        "offsetMm": 10.0,+        "plane": "Plane15",+        "verified": true+       },+       "sketch": "Sketch48",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Plane15",+       "transformInverted": false+      },+      "step": 10+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 8.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 5,+       "feature": "Boss-Extrude20",+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "extrude.offsetFromSurface",+          "what": "a boss to a distance from a picked face (swEndCondOffsetFromSurface 5)"+         }+        ],+        "variants": [+         "extrude.offsetFromSurface"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch48",+       "throughAll": false,+       "upToFace": {+        "mark": 1,+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       }+      },+      "step": 11+     },+     {+      "op": "sketch_circle",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "circle": {+          "centerMm": [+           40.0,+           25.0+          ],+          "radiusMm": 6.0+         }+        }+       ],+       "mapped": true,+       "plane": {+        "offsetFrom": "Front Plane",+        "offsetMm": 10.0+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.4",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.offset.front.positive",+         "sketch.circle"+        ]+       },+       "radiusMm": 6.0,+       "resolvedPlane": {+        "offsetFrom": "Front Plane",+        "offsetMm": 10.0,+        "plane": "Plane15",+        "verified": true+       },+       "sketch": "Sketch49",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Plane15",+       "transformInverted": false+      },+      "step": 12+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 0.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 10,+       "feature": "Boss-Extrude21",+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "extrude.upToSurface",+          "what": "a boss up to a picked face (swEndCondUpToSelection 10, the face at mark 1)"+         }+        ],+        "variants": [+         "extrude.upToSurface"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch49",+       "throughAll": false,+       "upToFace": {+        "mark": 1,+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       }+      },+      "step": 13+     },+     {+      "op": "sketch_circle",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "circle": {+          "centerMm": [+           25.0,+           40.0+          ],+          "radiusMm": 4.0+         }+        }+       ],+       "mapped": true,+       "plane": {+        "face": {+         "atPointMm": [+          25.0,+          40.0,+          90.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.face.front.positive",+         "sketch.circle",+         "select.multiSelectTyped"+        ]+       },+       "radiusMm": 4.0,+       "resolvedPlane": {+        "faceNormal": [+         -0.0,+         -0.0,+         1.0+        ],+        "offsetFrom": "Front Plane",+        "offsetMm": 90.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch50",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false+      },+      "step": 14+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 0.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         -0.0,+         -0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 10,+       "feature": "Cut-Extrude26",+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "cut.upToSurface",+          "what": "a cut up to a picked face"+         }+        ],+        "variants": [+         "cut.upToSurface"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch50",+       "throughAll": false,+       "upToFace": {+        "mark": 1,+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       }+      },+      "step": 15+     },+     {+      "op": "sketch_rect",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            49.99999999999999,+            35.0+           ],+           [+            69.99999999999999,+            45.00000000000001+           ]+          ]+         }+        }+       ],+       "heightMm": 10.000000000000002,+       "mapped": true,+       "plane": {+        "face": {+         "atPointMm": [+          60.0,+          40.0,+          0.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.4",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.face.front.negative",+         "sketch.rect",+         "select.multiSelectTyped"+        ]+       },+       "resolvedPlane": {+        "faceNormal": [+         0.0,+         0.0,+         -1.0+        ],+        "offsetFrom": "Front Plane",+        "offsetMm": 0.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch51",+       "sketchNormal": [+        0.0,+        0.0,+        -1.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false,+       "widthMm": 19.999999999999996+      },+      "step": 16+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 6.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         -1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         -1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": 10.0,+       "draftInward": true,+       "endCondition": 0,+       "feature": "Cut-Extrude27",+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "cut.draft",+          "what": "a cut with draft (a countersink is one)"+         }+        ],+        "variants": [+         "cut.one",+         "cut.draft"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch51",+       "throughAll": false,+       "upToFace": null+      },+      "step": 17+     },+     {+      "op": "sketch_circle",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "circle": {+          "centerMm": [+           40.0,+           25.0+          ],+          "radiusMm": 10.0+         }+        }+       ],+       "mapped": true,+       "plane": {+        "face": {+         "atPointMm": [+          40.0,+          25.0,+          90.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.face.front.positive",+         "sketch.circle",+         "select.multiSelectTyped"+        ]+       },+       "radiusMm": 10.0,+       "resolvedPlane": {+        "faceNormal": [+         -0.0,+         -0.0,+         1.0+        ],+        "offsetFrom": "Front Plane",+        "offsetMm": 90.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch52",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false+      },+      "step": 18+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 12.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         -0.0,+         -0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": 5.0,+       "draftInward": true,+       "endCondition": 0,+       "feature": "Boss-Extrude22",+       "proven": {+        "live": false,+        "measuredOn": [],+        "unmeasured": [+         {+          "variant": "extrude.draft",+          "what": "a boss with draft (Dchk1/Ddir1/Dang1)"+         }+        ],+        "variants": [+         "extrude.one",+         "extrude.draft"+        ],+        "why": "not measured live: see `unmeasured` \u2014 verify this step's geometry with swx_inspect_bodies"+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch52",+       "throughAll": false,+       "upToFace": null+      },+      "step": 19+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "6061 Alloy"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 2700.0,+       "densityRequested": 2700.0,+       "material": "6061 Alloy",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 20+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792190208004.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     0.0,+     0.0,+     0.0,+     0.08,+     0.05,+     0.102+    ],+    "centerOfMass": [+     0.04036474302758968,+     0.024788574915418752,+     0.04565723007162324+    ],+    "centerOfMassMm": [+     40.364743,+     24.788575,+     45.65723+    ],+    "density": 2700.0,+    "densityKgM3": 2700.0,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792190208004.SLDPRT",+     "title": "Part1-1792190208004.SLDPRT",+     "type": "part"+    },+    "durationMs": 2457,+    "error": "",+    "massG": 364.34990904198503,+    "massKg": 0.36434990904198505,+    "materialName": "6061 Alloy",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[0.0,0.0,0.0,0.08,0.05,0.102],\"centerOfMass\":[0.04036474302758968,0.024788574915418752,0.04565723007162324],\"centerOfMassMm\":[40.364743,24.788575,45.65723],\"density\":2700.0,\"densityKgM3\":2700.0,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792190208004.SLDPRT\",\"title\":\"Part1-1792190208004.SLDPRT\",\"type\":\"part\"},\"massG\":364.34990904198503,\"massKg\":0.36434990904198505,\"materialName\":\"6061 Alloy\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 1094s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.03681982422825422,\"surfaceAreaMm2\":36819.82422825422,\"timeoutSeconds\":120,\"volumeM3\":0.00013494441075629076,\"volumeMm3\":134944.41075629074}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 1094s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.03681982422825422,+    "surfaceAreaMm2": 36819.82422825422,+    "timeoutSeconds": 120,+    "volumeM3": 0.00013494441075629076,+    "volumeMm3": 134944.41075629074+   },+   "pass": false,+   "checks": [+    {+     "quantity": "massG",+     "expected": 369.687533,+     "measured": 364.34990904198503,+     "offPct": 1.4438203838523667,+     "pass": false+    },+    {+     "quantity": "volumeMm3",+     "expected": 136921.308673,+     "measured": 134944.41075629074,+     "offPct": 1.4438204950483935,+     "pass": false+    },+    {+     "quantity": "centerOfMassMm",+     "expected": [+      40.525243,+      24.723219,+      45.869733+     ],+     "measured": [+      40.364743,+      24.788575,+      45.65723+     ],+     "pass": false+    }+   ],+   "fails": [+    "massG: 364.34990904198503 vs 369.687533 (1.4438203838523667 % off)",+    "volumeMm3: 134944.41075629074 vs 136921.308673 (1.4438204950483935 % off)",+    "centerOfMassMm: [40.364743, 24.788575, 45.65723] vs [40.525243, 24.723219, 45.869733] (None % off)"+   ],+   "seconds": 219.8+  }+ ]+}\ No newline at end of file
tools/cswa/reports/cswa-2026-10-20-sw2026-0.11.4.jsonadded+6739
@@ -0,0 +1,12377 @@+{+ "tool": "cswa-check",+ "when": "2026-10-20T13:20:00Z",+ "whenEpoch": 1792502400,+ "target": "adom_drew2",+ "bridgeVersion": "0.11.4",+ "bridge": {+  "source": "ab bridge_info + read_file (read-only)",+  "version": "0.11.4",+  "installPath": "C:/Users/drew/AppData/Local/Adom Bridge/bridges-cache/solidworks",+  "manifestUrl": "https://wiki.adom.inc/api/v1/pages/solidworks-bridge/files/adom-bridge-solidworks-manifest.json",+  "installSource": "cache",+  "exeSha256": "1f812642e2d0d4f99571db670f1c391e00c3663926684d1b1a2ec9e12dc26bff",+  "bridgeJsonSha256": "af4d848ed8676c05b8bdcec089b1af3698c789b8977d3128f5332d859af98243",+  "installedFrom": "https://wiki.adom.inc/api/v1/pages/adom/solidworks-bridge/files/manifests/canary.json"+ },+ "solidworks": {+  "majorVersion": 34,+  "edition": "connected",+  "versionSupport": {+   "lacks": [],+   "majorVersion": 34,+   "revision": "34.3.0",+   "supported": true,+   "supportedFrom": 2021,+   "tested": true,+   "testedOn": [+    2026,+    2021+   ],+   "year": 2026+  }+ },+ "summary": "14 of 14 CSWA parts within tolerance",+ "passed": 14,+ "ran": 14,+ "skipped": 0,+ "stopped": null,+ "allPassed": true,+ "parts": [+  {+   "id": "cswa-00-lego-2x4",+   "title": "LEGO 2x4 brick (spec 0: the acceptance brick, not an exam part)",+   "official": false,+   "source": "adom/solidworks-bridge issue #1 (Michael, SOLIDWORKS 2021: volumeM3 2.0733615208e-6 from swx_mass_properties); examples/lego-2x4.json",+   "expected": {+    "massG": 2.114829,+    "volumeMm3": 2073.3615208,+    "tolerancePct": 1.0+   },+   "material": {+    "name": "ABS",+    "densityKgM3": 1020+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792502024000.SLDPRT",+     "title": "Part1-1792502024000.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792502024000.SLDPRT",+    "durationMs": 19242,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792502024000.SLDPRT\",\"title\":\"Part1-1792502024000.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792502024000.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":17.7,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 10 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"add-ins are still loading: the last LOAD_ADDIN is newer than the last <3DXLOAD_TIME>, and the startup lines last changed 4s ago\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":10,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792502024000.SLDPRT\",\"deleted\":[],\"featuresDeleted\":0,\"passes\":0,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch_rect\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[-15.9,-7.9],[15.9,7.9]]}}],\"heightMm\":15.8,\"mapped\":false,\"plane\":\"Top Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.top\",\"sketch.rect\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch1\",\"sketchNormal\":[0.0,1.0,0.0],\"sketchedOn\":\"Top Plane\",\"transformInverted\":false,\"widthMm\":31.8},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":9.6,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,1.0,0.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude1\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"readBack\":{\"depthMm\":9.6,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch1\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"sketch_rect\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[-14.7,-6.7],[14.7,6.7]]}}],\"heightMm\":13.4,\"mapped\":false,\"plane\":\"Top Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.top\",\"sketch.rect\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch2\",\"sketchNormal\":[0.0,1.0,0.0],\"sketchedOn\":\"Top Plane\",\"transformInverted\":false,\"widthMm\":29.4},\"step\":4},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":8.6,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,1.0,0.0],\"value\":true},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude1\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one.reversed\"]},\"readBack\":{\"depthMm\":8.6,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":true,\"sketch\":\"Sketch2\",\"throughAll\":false,\"upToFace\":null},\"step\":5},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"circle\":{\"centerMm\":[-8.0,0.0],\"radiusMm\":3.255}},{\"circle\":{\"centerMm\":[-8.0,0.0],\"radiusMm\":2.4}},{\"circle\":{\"centerMm\":[0.0,0.0],\"radiusMm\":3.255}},{\"circle\":{\"centerMm\":[0.0,0.0],\"radiusMm\":2.4}},{\"circle\":{\"centerMm\":[8.0,0.0],\"radiusMm\":3.255}},{\"circle\":{\"centerMm\":[8.0,0.0],\"radiusMm\":2.4}}],\"mapped\":false,\"plane\":\"Top Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.top\",\"sketch.circle\",\"sketch.multiProfile\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch3\",\"sketchNormal\":[0.0,1.0,0.0],\"sketchedOn\":\"Top Plane\",\"transformInverted\":false},\"step\":6},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":8.6,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,1.0,0.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude2\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"readBack\":{\"depthMm\":8.6,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch3\",\"throughAll\":false,\"upToFace\":null},\"step\":7},{\"op\":\"sketch\",\"result\":{\"createdPlane\":\"Plane1\",\"entities\":[{\"circle\":{\"centerMm\":[-12.0,-4.0],\"radiusMm\":2.4}},{\"circle\":{\"centerMm\":[-12.0,4.0],\"radiusMm\":2.4}},{\"circle\":{\"centerMm\":[-4.0,-4.0],\"radiusMm\":2.4}},{\"circle\":{\"centerMm\":[-4.0,4.0],\"radiusMm\":2.4}},{\"circle\":{\"centerMm\":[4.0,-4.0],\"radiusMm\":2.4}},{\"circle\":{\"centerMm\":[4.0,4.0],\"radiusMm\":2.4}},{\"circle\":{\"centerMm\":[12.0,-4.0],\"radiusMm\":2.4}},{\"circle\":{\"centerMm\":[12.0,4.0],\"radiusMm\":2.4}}],\"mapped\":true,\"plane\":{\"offsetFrom\":\"Top Plane\",\"offsetMm\":9.6},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.offset.top.positive\",\"sketch.circle\",\"sketch.multiProfile\"]},\"resolvedPlane\":{\"offsetFrom\":\"Top Plane\",\"offsetMm\":9.6,\"plane\":\"Plane1\",\"verified\":true},\"sketch\":\"Sketch4\",\"sketchNormal\":[0.0,1.0,0.0],\"sketchedOn\":\"Plane1\",\"transformInverted\":false},\"step\":8},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":1.7,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,1.0,0.0],\"sketchNormal\":[0.0,1.0,0.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude3\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"readBack\":{\"depthMm\":1.7,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch4\",\"throughAll\":false,\"upToFace\":null},\"step\":9},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"ABS\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":1020.0,\"densityRequested\":1020.0,\"material\":\"ABS\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":10}],\"success\":true,\"targetDocument\":\"Part1-1792502024000.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 17.7,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 10 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "add-ins are still loading: the last LOAD_ADDIN is newer than the last <3DXLOAD_TIME>, and the startup lines last changed 4s ago"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 10,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792502024000.SLDPRT",+       "deleted": [],+       "featuresDeleted": 0,+       "passes": 0,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch_rect",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            -15.9,+            -7.9+           ],+           [+            15.9,+            7.9+           ]+          ]+         }+        }+       ],+       "heightMm": 15.8,+       "mapped": false,+       "plane": "Top Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.top",+         "sketch.rect"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch1",+       "sketchNormal": [+        0.0,+        1.0,+        0.0+       ],+       "sketchedOn": "Top Plane",+       "transformInverted": false,+       "widthMm": 31.8+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 9.6,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         1.0,+         0.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude1",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "readBack": {+        "depthMm": 9.6,+        "draftAngleDeg": 0.0,+        "draftOutward": false,+        "endCondition": 0+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch1",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "sketch_rect",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            -14.7,+            -6.7+           ],+           [+            14.7,+            6.7+           ]+          ]+         }+        }+       ],+       "heightMm": 13.4,+       "mapped": false,+       "plane": "Top Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.top",+         "sketch.rect"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch2",+       "sketchNormal": [+        0.0,+        1.0,+        0.0+       ],+       "sketchedOn": "Top Plane",+       "transformInverted": false,+       "widthMm": 29.4+      },+      "step": 4+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 8.6,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         1.0,+         0.0+        ],+        "value": true+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Cut-Extrude1",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.one.reversed"+        ]+       },+       "readBack": {+        "depthMm": 8.6,+        "draftAngleDeg": 0.0,+        "draftOutward": false,+        "endCondition": 0+       },+       "regions": null,+       "reverse": true,+       "sketch": "Sketch2",+       "throughAll": false,+       "upToFace": null+      },+      "step": 5+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "circle": {+          "centerMm": [+           -8.0,+           0.0+          ],+          "radiusMm": 3.255+         }+        },+        {+         "circle": {+          "centerMm": [+           -8.0,+           0.0+          ],+          "radiusMm": 2.4+         }+        },+        {+         "circle": {+          "centerMm": [+           0.0,+           0.0+          ],+          "radiusMm": 3.255+         }+        },+        {+         "circle": {+          "centerMm": [+           0.0,+           0.0+          ],+          "radiusMm": 2.4+         }+        },+        {+         "circle": {+          "centerMm": [+           8.0,+           0.0+          ],+          "radiusMm": 3.255+         }+        },+        {+         "circle": {+          "centerMm": [+           8.0,+           0.0+          ],+          "radiusMm": 2.4+         }+        }+       ],+       "mapped": false,+       "plane": "Top Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.top",+         "sketch.circle",+         "sketch.multiProfile"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch3",+       "sketchNormal": [+        0.0,+        1.0,+        0.0+       ],+       "sketchedOn": "Top Plane",+       "transformInverted": false+      },+      "step": 6+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 8.6,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         1.0,+         0.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude2",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "readBack": {+        "depthMm": 8.6,+        "draftAngleDeg": 0.0,+        "draftOutward": false,+        "endCondition": 0+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch3",+       "throughAll": false,+       "upToFace": null+      },+      "step": 7+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": "Plane1",+       "entities": [+        {+         "circle": {+          "centerMm": [+           -12.0,+           -4.0+          ],+          "radiusMm": 2.4+         }+        },+        {+         "circle": {+          "centerMm": [+           -12.0,+           4.0+          ],+          "radiusMm": 2.4+         }+        },+        {+         "circle": {+          "centerMm": [+           -4.0,+           -4.0+          ],+          "radiusMm": 2.4+         }+        },+        {+         "circle": {+          "centerMm": [+           -4.0,+           4.0+          ],+          "radiusMm": 2.4+         }+        },+        {+         "circle": {+          "centerMm": [+           4.0,+           -4.0+          ],+          "radiusMm": 2.4+         }+        },+        {+         "circle": {+          "centerMm": [+           4.0,+           4.0+          ],+          "radiusMm": 2.4+         }+        },+        {+         "circle": {+          "centerMm": [+           12.0,+           -4.0+          ],+          "radiusMm": 2.4+         }+        },+        {+         "circle": {+          "centerMm": [+           12.0,+           4.0+          ],+          "radiusMm": 2.4+         }+        }+       ],+       "mapped": true,+       "plane": {+        "offsetFrom": "Top Plane",+        "offsetMm": 9.6+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.offset.top.positive",+         "sketch.circle",+         "sketch.multiProfile"+        ]+       },+       "resolvedPlane": {+        "offsetFrom": "Top Plane",+        "offsetMm": 9.6,+        "plane": "Plane1",+        "verified": true+       },+       "sketch": "Sketch4",+       "sketchNormal": [+        0.0,+        1.0,+        0.0+       ],+       "sketchedOn": "Plane1",+       "transformInverted": false+      },+      "step": 8+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 1.7,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         1.0,+         0.0+        ],+        "sketchNormal": [+         0.0,+         1.0,+         0.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude3",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "readBack": {+        "depthMm": 1.7,+        "draftAngleDeg": 0.0,+        "draftOutward": false,+        "endCondition": 0+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch4",+       "throughAll": false,+       "upToFace": null+      },+      "step": 9+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "ABS"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 1020.0,+       "densityRequested": 1020.0,+       "material": "ABS",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 10+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792502024000.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     -0.0159,+     0.0,+     -0.0079,+     0.0159,+     0.0113,+     0.0079+    ],+    "centerOfMass": [+     2.493476789517029e-19,+     0.006193169977140961,+     -1.1906351669943813e-18+    ],+    "centerOfMassMm": [+     0.0,+     6.19317,+     -0.0+    ],+    "density": 1020.0,+    "densityKgM3": 1020.0,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792502024000.SLDPRT",+     "title": "Part1-1792502024000.SLDPRT",+     "type": "part"+    },+    "durationMs": 868,+    "error": "",+    "massG": 2.1148287512421375,+    "massKg": 0.0021148287512421375,+    "materialName": "ABS",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[-0.0159,0.0,-0.0079,0.0159,0.0113,0.0079],\"centerOfMass\":[2.493476789517029e-19,0.006193169977140961,-1.1906351669943813e-18],\"centerOfMassMm\":[0.0,6.19317,-0.0],\"density\":1020.0,\"densityKgM3\":1020.0,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792502024000.SLDPRT\",\"title\":\"Part1-1792502024000.SLDPRT\",\"type\":\"part\"},\"massG\":2.1148287512421375,\"massKg\":0.0021148287512421375,\"materialName\":\"ABS\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"add-ins are still loading: the last LOAD_ADDIN is newer than the last <3DXLOAD_TIME>, and the startup lines last changed 23s ago\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.003776753621558533,\"surfaceAreaMm2\":3776.753621558533,\"timeoutSeconds\":120,\"volumeM3\":2.073361520825625e-6,\"volumeMm3\":2073.361520825625}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "add-ins are still loading: the last LOAD_ADDIN is newer than the last <3DXLOAD_TIME>, and the startup lines last changed 23s ago"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.003776753621558533,+    "surfaceAreaMm2": 3776.753621558533,+    "timeoutSeconds": 120,+    "volumeM3": 2.073361520825625e-06,+    "volumeMm3": 2073.361520825625+   },+   "pass": true,+   "checks": [+    {+     "quantity": "massG",+     "expected": 2.114829,+     "measured": 2.1148287512421375,+     "offPct": 1.1762552069644157e-05,+     "pass": true+    },+    {+     "quantity": "volumeMm3",+     "expected": 2073.3615208,+     "measured": 2073.361520825625,+     "offPct": 1.2359163110427998e-09,+     "pass": true+    }+   ],+   "fails": [],+   "seconds": 20.1+  },+  {+   "id": "cswa-01-3dengr-q5-block",+   "title": "3dengr Q5: a 100 x 20 x 60 block in 6061",+   "official": false,+   "source": "https://www.3dengr.com/cswa-practice-questions.html",+   "expected": {+    "massG": 324.0,+    "volumeMm3": 120000.0,+    "centerOfMassMm": [+     50.0,+     10.0,+     30.0+    ],+    "tolerancePct": 1.0+   },+   "material": {+    "name": "6061 Alloy",+    "densityKgM3": 2700+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792502024000.SLDPRT",+     "title": "Part1-1792502024000.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792502024000.SLDPRT",+    "durationMs": 11126,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792502024000.SLDPRT\",\"title\":\"Part1-1792502024000.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792502024000.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":9.5,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 4 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"add-ins are still loading: the last LOAD_ADDIN is newer than the last <3DXLOAD_TIME>, and the startup lines last changed 24s ago\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":4,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792502024000.SLDPRT\",\"deleted\":[\"Sketch1\",\"Boss-Extrude1\",\"Cut-Extrude1\",\"Boss-Extrude2\",\"Plane1\",\"Sketch4\",\"Boss-Extrude3\",\"Sketch2\",\"Sketch3\"],\"featuresDeleted\":9,\"passes\":2,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch_rect\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[0.0,0.0],[100.0,20.0]]}}],\"heightMm\":20.0,\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.front\",\"sketch.rect\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch5\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false,\"widthMm\":100.0},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":60.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude4\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"readBack\":{\"depthMm\":60.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch5\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"6061 Alloy\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":2700.0,\"densityRequested\":2700.0,\"material\":\"6061 Alloy\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":4}],\"success\":true,\"targetDocument\":\"Part1-1792502024000.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 9.5,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 4 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "add-ins are still loading: the last LOAD_ADDIN is newer than the last <3DXLOAD_TIME>, and the startup lines last changed 24s ago"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 4,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792502024000.SLDPRT",+       "deleted": [+        "Sketch1",+        "Boss-Extrude1",+        "Cut-Extrude1",+        "Boss-Extrude2",+        "Plane1",+        "Sketch4",+        "Boss-Extrude3",+        "Sketch2",+        "Sketch3"+       ],+       "featuresDeleted": 9,+       "passes": 2,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch_rect",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            0.0,+            0.0+           ],+           [+            100.0,+            20.0+           ]+          ]+         }+        }+       ],+       "heightMm": 20.0,+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.rect"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch5",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false,+       "widthMm": 100.0+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 60.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude4",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "readBack": {+        "depthMm": 60.0,+        "draftAngleDeg": 0.0,+        "draftOutward": false,+        "endCondition": 0+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch5",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "6061 Alloy"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 2700.0,+       "densityRequested": 2700.0,+       "material": "6061 Alloy",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 4+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792502024000.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     0.0,+     0.0,+     0.0,+     0.1,+     0.02,+     0.06+    ],+    "centerOfMass": [+     0.05,+     0.01,+     0.03+    ],+    "centerOfMassMm": [+     50.0,+     10.0,+     30.0+    ],+    "density": 2700.0,+    "densityKgM3": 2700.0,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792502024000.SLDPRT",+     "title": "Part1-1792502024000.SLDPRT",+     "type": "part"+    },+    "durationMs": 957,+    "error": "",+    "massG": 323.99999999999994,+    "massKg": 0.32399999999999995,+    "materialName": "6061 Alloy",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[0.0,0.0,0.0,0.1,0.02,0.06],\"centerOfMass\":[0.05,0.01,0.03],\"centerOfMassMm\":[50.0,10.0,30.0],\"density\":2700.0,\"densityKgM3\":2700.0,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792502024000.SLDPRT\",\"title\":\"Part1-1792502024000.SLDPRT\",\"type\":\"part\"},\"massG\":323.99999999999994,\"massKg\":0.32399999999999995,\"materialName\":\"6061 Alloy\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"add-ins are still loading: the last LOAD_ADDIN is newer than the last <3DXLOAD_TIME>, and the startup lines last changed 35s ago\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.0184,\"surfaceAreaMm2\":18400.0,\"timeoutSeconds\":120,\"volumeM3\":0.00012,\"volumeMm3\":120000.0}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "add-ins are still loading: the last LOAD_ADDIN is newer than the last <3DXLOAD_TIME>, and the startup lines last changed 35s ago"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.0184,+    "surfaceAreaMm2": 18400.0,+    "timeoutSeconds": 120,+    "volumeM3": 0.00012,+    "volumeMm3": 120000.0+   },+   "pass": true,+   "checks": [+    {+     "quantity": "massG",+     "expected": 324.0,+     "measured": 323.99999999999994,+     "offPct": 1.75442650804963e-14,+     "pass": true+    },+    {+     "quantity": "volumeMm3",+     "expected": 120000.0,+     "measured": 120000.0,+     "offPct": 0.0,+     "pass": true+    },+    {+     "quantity": "centerOfMassMm",+     "expected": [+      50.0,+      10.0,+      30.0+     ],+     "measured": [+      50.0,+      10.0,+      30.0+     ],+     "pass": true+    }+   ],+   "fails": [],+   "seconds": 12.1+  },+  {+   "id": "cswa-02-3dengr-q6-hole",+   "title": "3dengr Q6/Q7: the block with a \u00d820 hole through it along Y at X 25, Z 30",+   "official": false,+   "source": "https://www.3dengr.com/cswa-practice-questions.html",+   "expected": {+    "massG": 307.04,+    "centerOfMassMm": [+     51.38,+     10.0,+     30.0+    ],+    "tolerancePct": 1.0+   },+   "material": {+    "name": "6061 Alloy",+    "densityKgM3": 2700+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792502024000.SLDPRT",+     "title": "Part1-1792502024000.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792502024000.SLDPRT",+    "durationMs": 21695,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792502024000.SLDPRT\",\"title\":\"Part1-1792502024000.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792502024000.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":19.5,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 5 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"add-ins are still loading: the last LOAD_ADDIN is newer than the last <3DXLOAD_TIME>, and the startup lines last changed 36s ago\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":5,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792502024000.SLDPRT\",\"deleted\":[\"Sketch5\",\"Boss-Extrude4\"],\"featuresDeleted\":2,\"passes\":1,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch_rect\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[0.0,0.0],[100.0,20.0]]}}],\"heightMm\":20.0,\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.front\",\"sketch.rect\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch6\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false,\"widthMm\":100.0},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":60.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude5\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"readBack\":{\"depthMm\":60.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch6\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"hole\",\"result\":{\"depthMm\":null,\"diameterMm\":20.0,\"face\":{\"atPointMm\":[25.0,20.0,30.0],\"heightMm\":20.0,\"normal\":[-0.0,1.0,-0.0],\"pickedBy\":\"geometry\",\"plane\":\"Top Plane\"},\"feature\":\"Cut-Extrude2\",\"features\":[\"Cut-Extrude2\"],\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"hole.simple\"]},\"steps\":[{\"op\":\"sketch\",\"result\":{\"createdPlane\":\"Plane2\",\"entities\":[{\"circle\":{\"centerMm\":[25.0,-30.0],\"radiusMm\":10.0}}],\"mapped\":true,\"plane\":{\"offsetFrom\":\"Top Plane\",\"offsetMm\":20.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"radiusMm\":10.0,\"resolvedPlane\":{\"offsetFrom\":\"Top Plane\",\"offsetMm\":20.0,\"plane\":\"Plane2\",\"verified\":true},\"sketch\":\"Sketch7\",\"sketchNormal\":[0.0,1.0,0.0],\"sketchedOn\":\"Plane2\",\"transformInverted\":false}},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":0.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,1.0,0.0],\"sketchNormal\":[0.0,1.0,0.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":1,\"feature\":\"Cut-Extrude2\",\"readBack\":{\"depthMm\":0.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":1},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch7\",\"throughAll\":true,\"upToFace\":null}}],\"throughAll\":true},\"step\":4},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"6061 Alloy\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":2700.0,\"densityRequested\":2700.0,\"material\":\"6061 Alloy\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":5}],\"success\":true,\"targetDocument\":\"Part1-1792502024000.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 19.5,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 5 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "add-ins are still loading: the last LOAD_ADDIN is newer than the last <3DXLOAD_TIME>, and the startup lines last changed 36s ago"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 5,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792502024000.SLDPRT",+       "deleted": [+        "Sketch5",+        "Boss-Extrude4"+       ],+       "featuresDeleted": 2,+       "passes": 1,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch_rect",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            0.0,+            0.0+           ],+           [+            100.0,+            20.0+           ]+          ]+         }+        }+       ],+       "heightMm": 20.0,+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.rect"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch6",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false,+       "widthMm": 100.0+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 60.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude5",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "readBack": {+        "depthMm": 60.0,+        "draftAngleDeg": 0.0,+        "draftOutward": false,+        "endCondition": 0+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch6",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "hole",+      "result": {+       "depthMm": null,+       "diameterMm": 20.0,+       "face": {+        "atPointMm": [+         25.0,+         20.0,+         30.0+        ],+        "heightMm": 20.0,+        "normal": [+         -0.0,+         1.0,+         -0.0+        ],+        "pickedBy": "geometry",+        "plane": "Top Plane"+       },+       "feature": "Cut-Extrude2",+       "features": [+        "Cut-Extrude2"+       ],+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "hole.simple"+        ]+       },+       "steps": [+        {+         "op": "sketch",+         "result": {+          "createdPlane": "Plane2",+          "entities": [+           {+            "circle": {+             "centerMm": [+              25.0,+              -30.0+             ],+             "radiusMm": 10.0+            }+           }+          ],+          "mapped": true,+          "plane": {+           "offsetFrom": "Top Plane",+           "offsetMm": 20.0+          },+          "planeFrames": "plane transforms (they match the measured Front/Top axes)",+          "radiusMm": 10.0,+          "resolvedPlane": {+           "offsetFrom": "Top Plane",+           "offsetMm": 20.0,+           "plane": "Plane2",+           "verified": true+          },+          "sketch": "Sketch7",+          "sketchNormal": [+           0.0,+           1.0,+           0.0+          ],+          "sketchedOn": "Plane2",+          "transformInverted": false+         }+        },+        {+         "op": "cut",+         "result": {+          "depth2Mm": null,+          "depthMm": 0.0,+          "dir": {+           "flippedToFollowTheReference": false,+           "reference": [+            0.0,+            1.0,+            0.0+           ],+           "sketchNormal": [+            0.0,+            1.0,+            0.0+           ],+           "value": false+          },+          "direction": "one",+          "draftDeg": null,+          "draftInward": null,+          "endCondition": 1,+          "feature": "Cut-Extrude2",+          "readBack": {+           "depthMm": 0.0,+           "draftAngleDeg": 0.0,+           "draftOutward": false,+           "endCondition": 1+          },+          "regions": null,+          "reverse": false,+          "sketch": "Sketch7",+          "throughAll": true,+          "upToFace": null+         }+        }+       ],+       "throughAll": true+      },+      "step": 4+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "6061 Alloy"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 2700.0,+       "densityRequested": 2700.0,+       "material": "6061 Alloy",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 5+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792502024000.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     0.0,+     0.0,+     0.0,+     0.1,+     0.02,+     0.06+    ],+    "centerOfMass": [+     0.05138132283342444,+     0.009999999999999998,+     0.029999999999999995+    ],+    "centerOfMassMm": [+     51.381323,+     10.0,+     30.0+    ],+    "density": 2700.0,+    "densityKgM3": 2700.0,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792502024000.SLDPRT",+     "title": "Part1-1792502024000.SLDPRT",+     "type": "part"+    },+    "durationMs": 1401,+    "error": "",+    "massG": 307.0353996706151,+    "massKg": 0.3070353996706151,+    "materialName": "6061 Alloy",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[0.0,0.0,0.0,0.1,0.02,0.06],\"centerOfMass\":[0.05138132283342444,0.009999999999999998,0.029999999999999995],\"centerOfMassMm\":[51.381323,10.0,30.0],\"density\":2700.0,\"densityKgM3\":2700.0,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792502024000.SLDPRT\",\"title\":\"Part1-1792502024000.SLDPRT\",\"type\":\"part\"},\"massG\":307.0353996706151,\"massKg\":0.3070353996706151,\"materialName\":\"6061 Alloy\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"add-ins are still loading: the last LOAD_ADDIN is newer than the last <3DXLOAD_TIME>, and the startup lines last changed 58s ago\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.01902831853071796,\"surfaceAreaMm2\":19028.31853071796,\"timeoutSeconds\":120,\"volumeM3\":0.0001137168146928204,\"volumeMm3\":113716.8146928204}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "add-ins are still loading: the last LOAD_ADDIN is newer than the last <3DXLOAD_TIME>, and the startup lines last changed 58s ago"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.01902831853071796,+    "surfaceAreaMm2": 19028.31853071796,+    "timeoutSeconds": 120,+    "volumeM3": 0.0001137168146928204,+    "volumeMm3": 113716.8146928204+   },+   "pass": true,+   "checks": [+    {+     "quantity": "massG",+     "expected": 307.04,+     "measured": 307.0353996706151,+     "offPct": 0.0014982834109282007,+     "pass": true+    },+    {+     "quantity": "centerOfMassMm",+     "expected": [+      51.38,+      10.0,+      30.0+     ],+     "measured": [+      51.381323,+      10.0,+      30.0+     ],+     "pass": true+    }+   ],+   "fails": [],+   "seconds": 23.1+  },+  {+   "id": "cswa-03-3dengr-q8-hole30",+   "title": "3dengr Q8: the hole changed to \u00d830",+   "official": false,+   "source": "https://www.3dengr.com/cswa-practice-questions.html",+   "expected": {+    "massG": 285.83,+    "tolerancePct": 1.0+   },+   "material": {+    "name": "6061 Alloy",+    "densityKgM3": 2700+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792502024000.SLDPRT",+     "title": "Part1-1792502024000.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792502024000.SLDPRT",+    "durationMs": 19506,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792502024000.SLDPRT\",\"title\":\"Part1-1792502024000.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792502024000.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":17.0,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 5 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"add-ins are still loading: the last LOAD_ADDIN is newer than the last <3DXLOAD_TIME>, and the startup lines last changed 59s ago\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":5,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792502024000.SLDPRT\",\"deleted\":[\"Sketch6\",\"Boss-Extrude5\",\"Plane2\",\"Sketch7\",\"Cut-Extrude2\"],\"featuresDeleted\":5,\"passes\":1,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch_rect\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[0.0,0.0],[100.0,20.0]]}}],\"heightMm\":20.0,\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.front\",\"sketch.rect\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch8\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false,\"widthMm\":100.0},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":60.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude6\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"readBack\":{\"depthMm\":60.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch8\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"hole\",\"result\":{\"depthMm\":null,\"diameterMm\":30.0,\"face\":{\"atPointMm\":[25.0,20.0,30.0],\"heightMm\":20.0,\"normal\":[-0.0,1.0,-0.0],\"pickedBy\":\"geometry\",\"plane\":\"Top Plane\"},\"feature\":\"Cut-Extrude3\",\"features\":[\"Cut-Extrude3\"],\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"hole.simple\"]},\"steps\":[{\"op\":\"sketch\",\"result\":{\"createdPlane\":\"Plane3\",\"entities\":[{\"circle\":{\"centerMm\":[25.0,-30.0],\"radiusMm\":15.0}}],\"mapped\":true,\"plane\":{\"offsetFrom\":\"Top Plane\",\"offsetMm\":20.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"radiusMm\":15.0,\"resolvedPlane\":{\"offsetFrom\":\"Top Plane\",\"offsetMm\":20.0,\"plane\":\"Plane3\",\"verified\":true},\"sketch\":\"Sketch9\",\"sketchNormal\":[0.0,1.0,0.0],\"sketchedOn\":\"Plane3\",\"transformInverted\":false}},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":0.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,1.0,0.0],\"sketchNormal\":[0.0,1.0,0.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":1,\"feature\":\"Cut-Extrude3\",\"readBack\":{\"depthMm\":0.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":1},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch9\",\"throughAll\":true,\"upToFace\":null}}],\"throughAll\":true},\"step\":4},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"6061 Alloy\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":2700.0,\"densityRequested\":2700.0,\"material\":\"6061 Alloy\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":5}],\"success\":true,\"targetDocument\":\"Part1-1792502024000.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 17.0,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 5 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "add-ins are still loading: the last LOAD_ADDIN is newer than the last <3DXLOAD_TIME>, and the startup lines last changed 59s ago"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 5,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792502024000.SLDPRT",+       "deleted": [+        "Sketch6",+        "Boss-Extrude5",+        "Plane2",+        "Sketch7",+        "Cut-Extrude2"+       ],+       "featuresDeleted": 5,+       "passes": 1,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch_rect",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            0.0,+            0.0+           ],+           [+            100.0,+            20.0+           ]+          ]+         }+        }+       ],+       "heightMm": 20.0,+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.rect"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch8",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false,+       "widthMm": 100.0+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 60.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude6",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "readBack": {+        "depthMm": 60.0,+        "draftAngleDeg": 0.0,+        "draftOutward": false,+        "endCondition": 0+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch8",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "hole",+      "result": {+       "depthMm": null,+       "diameterMm": 30.0,+       "face": {+        "atPointMm": [+         25.0,+         20.0,+         30.0+        ],+        "heightMm": 20.0,+        "normal": [+         -0.0,+         1.0,+         -0.0+        ],+        "pickedBy": "geometry",+        "plane": "Top Plane"+       },+       "feature": "Cut-Extrude3",+       "features": [+        "Cut-Extrude3"+       ],+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "hole.simple"+        ]+       },+       "steps": [+        {+         "op": "sketch",+         "result": {+          "createdPlane": "Plane3",+          "entities": [+           {+            "circle": {+             "centerMm": [+              25.0,+              -30.0+             ],+             "radiusMm": 15.0+            }+           }+          ],+          "mapped": true,+          "plane": {+           "offsetFrom": "Top Plane",+           "offsetMm": 20.0+          },+          "planeFrames": "plane transforms (they match the measured Front/Top axes)",+          "radiusMm": 15.0,+          "resolvedPlane": {+           "offsetFrom": "Top Plane",+           "offsetMm": 20.0,+           "plane": "Plane3",+           "verified": true+          },+          "sketch": "Sketch9",+          "sketchNormal": [+           0.0,+           1.0,+           0.0+          ],+          "sketchedOn": "Plane3",+          "transformInverted": false+         }+        },+        {+         "op": "cut",+         "result": {+          "depth2Mm": null,+          "depthMm": 0.0,+          "dir": {+           "flippedToFollowTheReference": false,+           "reference": [+            0.0,+            1.0,+            0.0+           ],+           "sketchNormal": [+            0.0,+            1.0,+            0.0+           ],+           "value": false+          },+          "direction": "one",+          "draftDeg": null,+          "draftInward": null,+          "endCondition": 1,+          "feature": "Cut-Extrude3",+          "readBack": {+           "depthMm": 0.0,+           "draftAngleDeg": 0.0,+           "draftOutward": false,+           "endCondition": 1+          },+          "regions": null,+          "reverse": false,+          "sketch": "Sketch9",+          "throughAll": true,+          "upToFace": null+         }+        }+       ],+       "throughAll": true+      },+      "step": 4+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "6061 Alloy"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 2700.0,+       "densityRequested": 2700.0,+       "material": "6061 Alloy",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 5+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792502024000.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     0.0,+     0.0,+     0.0,+     0.1,+     0.02,+     0.06+    ],+    "centerOfMass": [+     0.05333855767238339,+     0.009999999999999998,+     0.03+    ],+    "centerOfMassMm": [+     53.338558,+     10.0,+     30.0+    ],+    "density": 2700.0,+    "densityKgM3": 2700.0,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792502024000.SLDPRT",+     "title": "Part1-1792502024000.SLDPRT",+     "type": "part"+    },+    "durationMs": 1098,+    "error": "",+    "massG": 285.829649258884,+    "massKg": 0.285829649258884,+    "materialName": "6061 Alloy",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[0.0,0.0,0.0,0.1,0.02,0.06],\"centerOfMass\":[0.05333855767238339,0.009999999999999998,0.03],\"centerOfMassMm\":[53.338558,10.0,30.0],\"density\":2700.0,\"densityKgM3\":2700.0,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792502024000.SLDPRT\",\"title\":\"Part1-1792502024000.SLDPRT\",\"type\":\"part\"},\"massG\":285.829649258884,\"massKg\":0.285829649258884,\"materialName\":\"6061 Alloy\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 79s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.01887123889803847,\"surfaceAreaMm2\":18871.238898038468,\"timeoutSeconds\":120,\"volumeM3\":0.00010586283305884592,\"volumeMm3\":105862.83305884592}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 79s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.01887123889803847,+    "surfaceAreaMm2": 18871.238898038468,+    "timeoutSeconds": 120,+    "volumeM3": 0.00010586283305884592,+    "volumeMm3": 105862.83305884592+   },+   "pass": true,+   "checks": [+    {+     "quantity": "massG",+     "expected": 285.83,+     "measured": 285.829649258884,+     "offPct": 0.00012270969317231364,+     "pass": true+    }+   ],+   "fails": [],+   "seconds": 20.6+  },+  {+   "id": "cswa-04-3dengr-q9-l-bracket",+   "title": "3dengr Q9: an L-bracket in AISI 1020, ONE polyline sketch",+   "official": false,+   "source": "https://www.3dengr.com/cswa-practice-questions.html",+   "expected": {+    "massG": 410.8,+    "centerOfMassMm": [+     26.54,+     16.54,+     20.0+    ],+    "tolerancePct": 1.0+   },+   "material": {+    "name": "AISI 1020",+    "densityKgM3": 7900+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792502024000.SLDPRT",+     "title": "Part1-1792502024000.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792502024000.SLDPRT",+    "durationMs": 10055,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792502024000.SLDPRT\",\"title\":\"Part1-1792502024000.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792502024000.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":8.2,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 4 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 80s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":4,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792502024000.SLDPRT\",\"deleted\":[\"Sketch8\",\"Boss-Extrude6\",\"Plane3\",\"Sketch9\",\"Cut-Extrude3\"],\"featuresDeleted\":5,\"passes\":1,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"line\":{\"fromMm\":[0.0,0.0],\"toMm\":[80.0,0.0]}},{\"line\":{\"fromMm\":[80.0,0.0],\"toMm\":[80.0,10.0]}},{\"line\":{\"fromMm\":[80.0,10.0],\"toMm\":[10.0,10.0]}},{\"line\":{\"fromMm\":[10.0,10.0],\"toMm\":[10.0,60.0]}},{\"line\":{\"fromMm\":[10.0,60.0],\"toMm\":[0.0,60.0]}},{\"line\":{\"fromMm\":[0.0,60.0],\"toMm\":[0.0,0.0]}}],\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.front\",\"sketch.multiProfile\",\"sketch.line\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch10\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":40.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude7\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"readBack\":{\"depthMm\":40.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch10\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"AISI 1020\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":7900.000000000001,\"densityRequested\":7900.0,\"material\":\"AISI 1020\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":4}],\"success\":true,\"targetDocument\":\"Part1-1792502024000.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 8.2,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 4 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 80s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 4,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792502024000.SLDPRT",+       "deleted": [+        "Sketch8",+        "Boss-Extrude6",+        "Plane3",+        "Sketch9",+        "Cut-Extrude3"+       ],+       "featuresDeleted": 5,+       "passes": 1,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "line": {+          "fromMm": [+           0.0,+           0.0+          ],+          "toMm": [+           80.0,+           0.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           80.0,+           0.0+          ],+          "toMm": [+           80.0,+           10.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           80.0,+           10.0+          ],+          "toMm": [+           10.0,+           10.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           10.0,+           10.0+          ],+          "toMm": [+           10.0,+           60.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           10.0,+           60.0+          ],+          "toMm": [+           0.0,+           60.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           0.0,+           60.0+          ],+          "toMm": [+           0.0,+           0.0+          ]+         }+        }+       ],+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.multiProfile",+         "sketch.line"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch10",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 40.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude7",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "readBack": {+        "depthMm": 40.0,+        "draftAngleDeg": 0.0,+        "draftOutward": false,+        "endCondition": 0+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch10",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "AISI 1020"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 7900.000000000001,+       "densityRequested": 7900.0,+       "material": "AISI 1020",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 4+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792502024000.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     0.0,+     0.0,+     0.0,+     0.08,+     0.06,+     0.04+    ],+    "centerOfMass": [+     0.02653846153846153,+     0.016538461538461537,+     0.019999999999999997+    ],+    "centerOfMassMm": [+     26.538462,+     16.538462,+     20.0+    ],+    "density": 7900.000000000001,+    "densityKgM3": 7900.000000000001,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792502024000.SLDPRT",+     "title": "Part1-1792502024000.SLDPRT",+     "type": "part"+    },+    "durationMs": 1002,+    "error": "",+    "massG": 410.80000000000007,+    "massKg": 0.41080000000000005,+    "materialName": "AISI 1020",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[0.0,0.0,0.0,0.08,0.06,0.04],\"centerOfMass\":[0.02653846153846153,0.016538461538461537,0.019999999999999997],\"centerOfMassMm\":[26.538462,16.538462,20.0],\"density\":7900.000000000001,\"densityKgM3\":7900.000000000001,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792502024000.SLDPRT\",\"title\":\"Part1-1792502024000.SLDPRT\",\"type\":\"part\"},\"massG\":410.80000000000007,\"massKg\":0.41080000000000005,\"materialName\":\"AISI 1020\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 90s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.0138,\"surfaceAreaMm2\":13800.0,\"timeoutSeconds\":120,\"volumeM3\":0.000052,\"volumeMm3\":52000.0}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 90s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.0138,+    "surfaceAreaMm2": 13800.0,+    "timeoutSeconds": 120,+    "volumeM3": 5.2e-05,+    "volumeMm3": 52000.0+   },+   "pass": true,+   "checks": [+    {+     "quantity": "massG",+     "expected": 410.8,+     "measured": 410.80000000000007,+     "offPct": 1.3837248992407013e-14,+     "pass": true+    },+    {+     "quantity": "centerOfMassMm",+     "expected": [+      26.54,+      16.54,+      20.0+     ],+     "measured": [+      26.538462,+      16.538462,+      20.0+     ],+     "pass": true+    }+   ],+   "fails": [],+   "seconds": 11.1+  },+  {+   "id": "cswa-05-tool-block-step1",+   "title": "Official Tool Block, Step 1 (Q3): A 81, B 57, C 43",+   "official": true,+   "source": "https://www.solidworks.com/sites/default/files/2017-12/CSWASampleExam.pdf (Dassault CSWA Sample Exam, 2017 edition; archive http://web.archive.org/web/20251230104817/https://www.solidworks.com/sites/default/files/2017-12/CSWASampleExam.pdf)",+   "expected": {+    "massG": 939.54,+    "tolerancePct": 1.0+   },+   "material": {+    "name": "AISI 1020",+    "densityKgM3": 7900+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792502024000.SLDPRT",+     "title": "Part1-1792502024000.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792502024000.SLDPRT",+    "durationMs": 16321,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792502024000.SLDPRT\",\"title\":\"Part1-1792502024000.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792502024000.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":14.3,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 4 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 91s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":4,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792502024000.SLDPRT\",\"deleted\":[\"Sketch10\",\"Boss-Extrude7\"],\"featuresDeleted\":2,\"passes\":1,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"line\":{\"fromMm\":[0.0,18.0],\"toMm\":[18.243084987875623,14.783251905279968]}},{\"arc\":{\"ccw\":true,\"centerMm\":[21.5424003635473,33.494599212511915],\"endMm\":[38.0,24.0],\"radiusMm\":19.0,\"startMm\":[18.243084987875623,14.783251905279968]}},{\"line\":{\"fromMm\":[38.0,24.0],\"toMm\":[62.00000000000001,24.0]}},{\"line\":{\"fromMm\":[67.0,19.0],\"toMm\":[67.0,0.0]}},{\"line\":{\"fromMm\":[67.0,0.0],\"toMm\":[38.0,-33.0]}},{\"line\":{\"fromMm\":[38.0,-33.0],\"toMm\":[32.788067396763054,-33.0]}},{\"arc\":{\"ccw\":false,\"centerMm\":[54.69696969696975,-13.999999999999972],\"endMm\":[26.012264996781063,-18.264705882352946],\"radiusMm\":29.000000000000053,\"startMm\":[32.788067396763054,-33.0]}},{\"arc\":{\"ccw\":true,\"centerMm\":[21.066626255369176,-18.999999999999964],\"endMm\":[21.06662625536923,-14.0],\"radiusMm\":5.000000000000048,\"startMm\":[26.012264996781063,-18.264705882352946]}},{\"line\":{\"fromMm\":[21.06662625536923,-14.0],\"toMm\":[-7.0,-14.0]}},{\"line\":{\"fromMm\":[-14.0,-7.0],\"toMm\":[-14.0,11.000000000000002]}},{\"line\":{\"fromMm\":[-7.0,18.0],\"toMm\":[0.0,18.0]}},{\"line\":{\"fromMm\":[-14.0,11.000000000000002],\"toMm\":[-7.0,18.0]}},{\"line\":{\"fromMm\":[-7.0,-14.0],\"toMm\":[-14.0,-7.0]}},{\"line\":{\"fromMm\":[62.00000000000001,24.0],\"toMm\":[67.0,19.0]}},{\"circle\":{\"centerMm\":[0.0,0.0],\"radiusMm\":7.0}}],\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.front\",\"sketch.circle\",\"sketch.multiProfile\",\"sketch.line\",\"sketch.arc\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch11\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":43.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude8\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"readBack\":{\"depthMm\":43.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch11\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"AISI 1020\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":7900.0,\"densityRequested\":7900.0,\"material\":\"AISI 1020\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":4}],\"success\":true,\"targetDocument\":\"Part1-1792502024000.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 14.3,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 4 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 91s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 4,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792502024000.SLDPRT",+       "deleted": [+        "Sketch10",+        "Boss-Extrude7"+       ],+       "featuresDeleted": 2,+       "passes": 1,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "line": {+          "fromMm": [+           0.0,+           18.0+          ],+          "toMm": [+           18.243084987875623,+           14.783251905279968+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           21.5424003635473,+           33.494599212511915+          ],+          "endMm": [+           38.0,+           24.0+          ],+          "radiusMm": 19.0,+          "startMm": [+           18.243084987875623,+           14.783251905279968+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           38.0,+           24.0+          ],+          "toMm": [+           62.00000000000001,+           24.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           67.0,+           19.0+          ],+          "toMm": [+           67.0,+           0.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           67.0,+           0.0+          ],+          "toMm": [+           38.0,+           -33.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           38.0,+           -33.0+          ],+          "toMm": [+           32.788067396763054,+           -33.0+          ]+         }+        },+        {+         "arc": {+          "ccw": false,+          "centerMm": [+           54.69696969696975,+           -13.999999999999972+          ],+          "endMm": [+           26.012264996781063,+           -18.264705882352946+          ],+          "radiusMm": 29.000000000000053,+          "startMm": [+           32.788067396763054,+           -33.0+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           21.066626255369176,+           -18.999999999999964+          ],+          "endMm": [+           21.06662625536923,+           -14.0+          ],+          "radiusMm": 5.000000000000048,+          "startMm": [+           26.012264996781063,+           -18.264705882352946+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           21.06662625536923,+           -14.0+          ],+          "toMm": [+           -7.0,+           -14.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -14.0,+           -7.0+          ],+          "toMm": [+           -14.0,+           11.000000000000002+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -7.0,+           18.0+          ],+          "toMm": [+           0.0,+           18.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -14.0,+           11.000000000000002+          ],+          "toMm": [+           -7.0,+           18.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -7.0,+           -14.0+          ],+          "toMm": [+           -14.0,+           -7.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           62.00000000000001,+           24.0+          ],+          "toMm": [+           67.0,+           19.0+          ]+         }+        },+        {+         "circle": {+          "centerMm": [+           0.0,+           0.0+          ],+          "radiusMm": 7.0+         }+        }+       ],+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.circle",+         "sketch.multiProfile",+         "sketch.line",+         "sketch.arc"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch11",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 43.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude8",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "readBack": {+        "depthMm": 43.0,+        "draftAngleDeg": 0.0,+        "draftOutward": false,+        "endCondition": 0+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch11",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "AISI 1020"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 7900.0,+       "densityRequested": 7900.0,+       "material": "AISI 1020",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 4+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792502024000.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     -0.014,+     -0.033,+     0.0,+     0.067,+     0.024,+     0.043+    ],+    "centerOfMass": [+     0.03062236692252704,+     0.000307646864646839,+     0.0215+    ],+    "centerOfMassMm": [+     30.622367,+     0.307647,+     21.5+    ],+    "density": 7900.0,+    "densityKgM3": 7900.0,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792502024000.SLDPRT",+     "title": "Part1-1792502024000.SLDPRT",+     "type": "part"+    },+    "durationMs": 1630,+    "error": "",+    "massG": 939.5395682014018,+    "massKg": 0.9395395682014018,+    "materialName": "AISI 1020",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[-0.014,-0.033,0.0,0.067,0.024,0.043],\"centerOfMass\":[0.03062236692252704,0.000307646864646839,0.0215],\"centerOfMassMm\":[30.622367,0.307647,21.5],\"density\":7900.0,\"densityKgM3\":7900.0,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792502024000.SLDPRT\",\"title\":\"Part1-1792502024000.SLDPRT\",\"type\":\"part\"},\"massG\":939.5395682014018,\"massKg\":0.9395395682014018,\"materialName\":\"AISI 1020\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 107s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.01763006429786853,\"surfaceAreaMm2\":17630.06429786853,\"timeoutSeconds\":120,\"volumeM3\":0.00011892905926600024,\"volumeMm3\":118929.05926600024}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 107s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.01763006429786853,+    "surfaceAreaMm2": 17630.06429786853,+    "timeoutSeconds": 120,+    "volumeM3": 0.00011892905926600024,+    "volumeMm3": 118929.05926600024+   },+   "pass": true,+   "checks": [+    {+     "quantity": "massG",+     "expected": 939.54,+     "measured": 939.5395682014018,+     "offPct": 4.595851141290499e-05,+     "pass": true+    }+   ],+   "fails": [],+   "seconds": 18.0+  },+  {+   "id": "cswa-06-tool-block-step2",+   "title": "Official Tool Block, Step 2 (Q4): A 84, B 59, C 45, all other dimensions the same",+   "official": true,+   "source": "https://www.solidworks.com/sites/default/files/2017-12/CSWASampleExam.pdf (Dassault CSWA Sample Exam, 2017 edition; archive http://web.archive.org/web/20251230104817/https://www.solidworks.com/sites/default/files/2017-12/CSWASampleExam.pdf)",+   "expected": {+    "massG": 1032.32,+    "tolerancePct": 1.0+   },+   "material": {+    "name": "AISI 1020",+    "densityKgM3": 7900+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792502024000.SLDPRT",+     "title": "Part1-1792502024000.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792502024000.SLDPRT",+    "durationMs": 13940,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792502024000.SLDPRT\",\"title\":\"Part1-1792502024000.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792502024000.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":11.4,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 4 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 109s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":4,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792502024000.SLDPRT\",\"deleted\":[\"Sketch11\",\"Boss-Extrude8\"],\"featuresDeleted\":2,\"passes\":1,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"line\":{\"fromMm\":[0.0,18.0],\"toMm\":[20.10404235201319,14.455114912034407]}},{\"arc\":{\"ccw\":true,\"centerMm\":[23.40335772768487,33.166462219266364],\"endMm\":[41.0,26.0],\"radiusMm\":19.0,\"startMm\":[20.10404235201319,14.455114912034407]}},{\"line\":{\"fromMm\":[41.0,26.0],\"toMm\":[65.0,26.0]}},{\"line\":{\"fromMm\":[70.0,21.0],\"toMm\":[70.0,2.0]}},{\"line\":{\"fromMm\":[70.0,2.0],\"toMm\":[41.0,-33.0]}},{\"line\":{\"fromMm\":[41.0,-33.0],\"toMm\":[34.8339548426505,-33.0]}},{\"arc\":{\"ccw\":false,\"centerMm\":[56.74285714285731,-14.000000000000036],\"endMm\":[28.0581524426685,-18.264705882352946],\"radiusMm\":29.000000000000107,\"startMm\":[34.8339548426505,-33.0]}},{\"arc\":{\"ccw\":true,\"centerMm\":[23.112513701256617,-18.999999999999982],\"endMm\":[23.112513701256667,-14.0],\"radiusMm\":5.0000000000000515,\"startMm\":[28.0581524426685,-18.264705882352946]}},{\"line\":{\"fromMm\":[23.112513701256667,-14.0],\"toMm\":[-7.0,-14.0]}},{\"line\":{\"fromMm\":[-14.0,-7.0],\"toMm\":[-14.0,11.000000000000002]}},{\"line\":{\"fromMm\":[-7.0,18.0],\"toMm\":[0.0,18.0]}},{\"line\":{\"fromMm\":[-14.0,11.000000000000002],\"toMm\":[-7.0,18.0]}},{\"line\":{\"fromMm\":[-7.0,-14.0],\"toMm\":[-14.0,-7.0]}},{\"line\":{\"fromMm\":[65.0,26.0],\"toMm\":[70.0,21.0]}},{\"circle\":{\"centerMm\":[0.0,0.0],\"radiusMm\":7.0}}],\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.front\",\"sketch.circle\",\"sketch.multiProfile\",\"sketch.line\",\"sketch.arc\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch12\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":45.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude9\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"readBack\":{\"depthMm\":45.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch12\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"AISI 1020\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":7899.999999999999,\"densityRequested\":7900.0,\"material\":\"AISI 1020\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":4}],\"success\":true,\"targetDocument\":\"Part1-1792502024000.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 11.4,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 4 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 109s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 4,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792502024000.SLDPRT",+       "deleted": [+        "Sketch11",+        "Boss-Extrude8"+       ],+       "featuresDeleted": 2,+       "passes": 1,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "line": {+          "fromMm": [+           0.0,+           18.0+          ],+          "toMm": [+           20.10404235201319,+           14.455114912034407+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           23.40335772768487,+           33.166462219266364+          ],+          "endMm": [+           41.0,+           26.0+          ],+          "radiusMm": 19.0,+          "startMm": [+           20.10404235201319,+           14.455114912034407+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           41.0,+           26.0+          ],+          "toMm": [+           65.0,+           26.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           70.0,+           21.0+          ],+          "toMm": [+           70.0,+           2.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           70.0,+           2.0+          ],+          "toMm": [+           41.0,+           -33.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           41.0,+           -33.0+          ],+          "toMm": [+           34.8339548426505,+           -33.0+          ]+         }+        },+        {+         "arc": {+          "ccw": false,+          "centerMm": [+           56.74285714285731,+           -14.000000000000036+          ],+          "endMm": [+           28.0581524426685,+           -18.264705882352946+          ],+          "radiusMm": 29.000000000000107,+          "startMm": [+           34.8339548426505,+           -33.0+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           23.112513701256617,+           -18.999999999999982+          ],+          "endMm": [+           23.112513701256667,+           -14.0+          ],+          "radiusMm": 5.0000000000000515,+          "startMm": [+           28.0581524426685,+           -18.264705882352946+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           23.112513701256667,+           -14.0+          ],+          "toMm": [+           -7.0,+           -14.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -14.0,+           -7.0+          ],+          "toMm": [+           -14.0,+           11.000000000000002+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -7.0,+           18.0+          ],+          "toMm": [+           0.0,+           18.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -14.0,+           11.000000000000002+          ],+          "toMm": [+           -7.0,+           18.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -7.0,+           -14.0+          ],+          "toMm": [+           -14.0,+           -7.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           65.0,+           26.0+          ],+          "toMm": [+           70.0,+           21.0+          ]+         }+        },+        {+         "circle": {+          "centerMm": [+           0.0,+           0.0+          ],+          "radiusMm": 7.0+         }+        }+       ],+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.circle",+         "sketch.multiProfile",+         "sketch.line",+         "sketch.arc"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch12",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 45.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude9",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "readBack": {+        "depthMm": 45.0,+        "draftAngleDeg": 0.0,+        "draftOutward": false,+        "endCondition": 0+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch12",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "AISI 1020"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 7899.999999999999,+       "densityRequested": 7900.0,+       "material": "AISI 1020",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 4+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792502024000.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     -0.014,+     -0.033,+     0.0,+     0.07,+     0.026,+     0.045+    ],+    "centerOfMass": [+     0.03255336787850931,+     0.0007907183444125464,+     0.0225+    ],+    "centerOfMassMm": [+     32.553368,+     0.790718,+     22.5+    ],+    "density": 7899.999999999999,+    "densityKgM3": 7899.999999999999,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792502024000.SLDPRT",+     "title": "Part1-1792502024000.SLDPRT",+     "type": "part"+    },+    "durationMs": 1426,+    "error": "",+    "massG": 1032.3206766712835,+    "massKg": 1.0323206766712836,+    "materialName": "AISI 1020",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[-0.014,-0.033,0.0,0.07,0.026,0.045],\"centerOfMass\":[0.03255336787850931,0.0007907183444125464,0.0225],\"centerOfMassMm\":[32.553368,0.790718,22.5],\"density\":7899.999999999999,\"densityKgM3\":7899.999999999999,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792502024000.SLDPRT\",\"title\":\"Part1-1792502024000.SLDPRT\",\"type\":\"part\"},\"massG\":1032.3206766712835,\"massKg\":1.0323206766712836,\"materialName\":\"AISI 1020\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 123s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.0188741376700506,\"surfaceAreaMm2\":18874.137670050597,\"timeoutSeconds\":120,\"volumeM3\":0.00013067350337611186,\"volumeMm3\":130673.50337611184}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 123s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.0188741376700506,+    "surfaceAreaMm2": 18874.137670050597,+    "timeoutSeconds": 120,+    "volumeM3": 0.00013067350337611186,+    "volumeMm3": 130673.50337611184+   },+   "pass": true,+   "checks": [+    {+     "quantity": "massG",+     "expected": 1032.32,+     "measured": 1032.3206766712835,+     "offPct": 6.55485976828616e-05,+     "pass": true+    }+   ],+   "fails": [],+   "seconds": 15.4+  },+  {+   "id": "cswa-07-tool-block-step3",+   "title": "Official Tool Block, Step 3 (Q5): A 86, B 58, C 44, then remove material",+   "official": true,+   "source": "https://www.solidworks.com/sites/default/files/2017-12/CSWASampleExam.pdf (Dassault CSWA Sample Exam, 2017 edition; archive http://web.archive.org/web/20251230104817/https://www.solidworks.com/sites/default/files/2017-12/CSWASampleExam.pdf)",+   "expected": {+    "massG": 628.18,+    "tolerancePct": 1.0+   },+   "material": {+    "name": "AISI 1020",+    "densityKgM3": 7900+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792502024000.SLDPRT",+     "title": "Part1-1792502024000.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792502024000.SLDPRT",+    "durationMs": 33621,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792502024000.SLDPRT\",\"title\":\"Part1-1792502024000.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792502024000.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":31.4,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 11 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 124s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":11,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792502024000.SLDPRT\",\"deleted\":[\"Sketch12\",\"Boss-Extrude9\"],\"featuresDeleted\":2,\"passes\":1,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"line\":{\"fromMm\":[0.0,18.0],\"toMm\":[22.3613808357771,14.057085232755291]}},{\"arc\":{\"ccw\":true,\"centerMm\":[25.66069621144878,32.768432539987224],\"endMm\":[43.0,25.0],\"radiusMm\":18.99999999999998,\"startMm\":[22.3613808357771,14.057085232755291]}},{\"line\":{\"fromMm\":[43.0,25.0],\"toMm\":[67.0,25.0]}},{\"line\":{\"fromMm\":[72.0,20.0],\"toMm\":[72.0,1.0]}},{\"line\":{\"fromMm\":[72.0,1.0],\"toMm\":[43.0,-33.0]}},{\"line\":{\"fromMm\":[43.0,-33.0],\"toMm\":[37.296980052734526,-33.0]}},{\"arc\":{\"ccw\":false,\"centerMm\":[59.20588235294099,-13.99999999999998],\"endMm\":[30.521177652752534,-18.264705882352946],\"radiusMm\":28.999999999999883,\"startMm\":[37.296980052734526,-33.0]}},{\"arc\":{\"ccw\":true,\"centerMm\":[25.575538911340765,-18.99999999999997],\"endMm\":[25.5755389113407,-14.0],\"radiusMm\":4.9999999999999325,\"startMm\":[30.521177652752534,-18.264705882352946]}},{\"line\":{\"fromMm\":[25.5755389113407,-14.0],\"toMm\":[-7.0,-14.0]}},{\"line\":{\"fromMm\":[-14.0,-7.0],\"toMm\":[-14.0,11.000000000000002]}},{\"line\":{\"fromMm\":[-7.0,18.0],\"toMm\":[0.0,18.0]}},{\"line\":{\"fromMm\":[-14.0,11.000000000000002],\"toMm\":[-7.0,18.0]}},{\"line\":{\"fromMm\":[-7.0,-14.0],\"toMm\":[-14.0,-7.0]}},{\"line\":{\"fromMm\":[67.0,25.0],\"toMm\":[72.0,20.0]}},{\"circle\":{\"centerMm\":[0.0,0.0],\"radiusMm\":7.0}}],\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.front\",\"sketch.circle\",\"sketch.multiProfile\",\"sketch.line\",\"sketch.arc\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch13\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":44.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude10\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"readBack\":{\"depthMm\":44.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch13\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"AISI 1020\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":7899.999999999999,\"densityRequested\":7900.0,\"material\":\"AISI 1020\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":4},{\"op\":\"sketch\",\"result\":{\"createdPlane\":\"Plane4\",\"entities\":[{\"circle\":{\"centerMm\":[72.0,28.70187343596344],\"radiusMm\":41.0}}],\"mapped\":true,\"plane\":{\"offsetFrom\":{\"face\":{\"atPointMm\":[-10.0,0.0,0.0]}},\"offsetMm\":-12.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.faceOffset\",\"sketch.circle\"]},\"radiusMm\":41.0,\"resolvedPlane\":{\"faceNormal\":[-0.0,-0.0,-1.0],\"faceOffsetMm\":-12.0,\"fromFace\":true,\"offsetFrom\":\"Front Plane\",\"offsetMm\":12.0,\"pickedBy\":\"geometry\",\"plane\":\"Plane4\",\"verified\":true},\"sketch\":\"Sketch14\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Plane4\",\"transformInverted\":false},\"step\":5},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":24.0,\"dir\":{\"flippedToFollowTheReference\":true,\"reference\":[-0.0,-0.0,-1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":true},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude4\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one.reversed\"]},\"readBack\":{\"depthMm\":24.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch14\",\"throughAll\":false,\"upToFace\":null},\"step\":6},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[-20.0,-40.0],[85.99999999999999,-13.999999999999998]]}}],\"heightMm\":26.0,\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[-10.0,0.0,44.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.front.positive\",\"sketch.rect\",\"select.multiSelectTyped\"]},\"resolvedPlane\":{\"faceNormal\":[0.0,0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch15\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false,\"widthMm\":106.0},\"step\":7},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":19.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude5\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one\"]},\"readBack\":{\"depthMm\":19.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch15\",\"throughAll\":false,\"upToFace\":null},\"step\":8},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[-20.0,-40.0],[20.0,40.0]]}}],\"heightMm\":80.0,\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[-10.0,0.0,44.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.front.positive\",\"sketch.rect\",\"select.multiSelectTyped\"]},\"resolvedPlane\":{\"faceNormal\":[0.0,0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch16\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false,\"widthMm\":40.0},\"step\":9},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":19.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude6\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one\"]},\"readBack\":{\"depthMm\":19.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch16\",\"throughAll\":false,\"upToFace\":null},\"step\":10},{\"op\":\"hole\",\"result\":{\"depthMm\":null,\"diameterMm\":11.0,\"face\":{\"atPointMm\":[58.0,11.0,44.0],\"heightMm\":44.0,\"normal\":[0.0,0.0,1.0],\"pickedBy\":\"geometry\",\"plane\":\"Front Plane\"},\"feature\":\"Cut-Extrude7\",\"features\":[\"Cut-Extrude7\"],\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"hole.simple\"]},\"steps\":[{\"op\":\"sketch\",\"result\":{\"createdPlane\":\"Plane5\",\"entities\":[{\"circle\":{\"centerMm\":[58.0,11.0],\"radiusMm\":5.5}}],\"mapped\":true,\"plane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"radiusMm\":5.5,\"resolvedPlane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"plane\":\"Plane5\",\"verified\":true},\"sketch\":\"Sketch17\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Plane5\",\"transformInverted\":false}},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":0.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":1,\"feature\":\"Cut-Extrude7\",\"readBack\":{\"depthMm\":0.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":1},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch17\",\"throughAll\":true,\"upToFace\":null}}],\"throughAll\":true},\"step\":11}],\"success\":true,\"targetDocument\":\"Part1-1792502024000.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 31.4,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 11 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 124s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 11,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792502024000.SLDPRT",+       "deleted": [+        "Sketch12",+        "Boss-Extrude9"+       ],+       "featuresDeleted": 2,+       "passes": 1,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "line": {+          "fromMm": [+           0.0,+           18.0+          ],+          "toMm": [+           22.3613808357771,+           14.057085232755291+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           25.66069621144878,+           32.768432539987224+          ],+          "endMm": [+           43.0,+           25.0+          ],+          "radiusMm": 18.99999999999998,+          "startMm": [+           22.3613808357771,+           14.057085232755291+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           43.0,+           25.0+          ],+          "toMm": [+           67.0,+           25.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           72.0,+           20.0+          ],+          "toMm": [+           72.0,+           1.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           72.0,+           1.0+          ],+          "toMm": [+           43.0,+           -33.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           43.0,+           -33.0+          ],+          "toMm": [+           37.296980052734526,+           -33.0+          ]+         }+        },+        {+         "arc": {+          "ccw": false,+          "centerMm": [+           59.20588235294099,+           -13.99999999999998+          ],+          "endMm": [+           30.521177652752534,+           -18.264705882352946+          ],+          "radiusMm": 28.999999999999883,+          "startMm": [+           37.296980052734526,+           -33.0+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           25.575538911340765,+           -18.99999999999997+          ],+          "endMm": [+           25.5755389113407,+           -14.0+          ],+          "radiusMm": 4.9999999999999325,+          "startMm": [+           30.521177652752534,+           -18.264705882352946+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           25.5755389113407,+           -14.0+          ],+          "toMm": [+           -7.0,+           -14.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -14.0,+           -7.0+          ],+          "toMm": [+           -14.0,+           11.000000000000002+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -7.0,+           18.0+          ],+          "toMm": [+           0.0,+           18.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -14.0,+           11.000000000000002+          ],+          "toMm": [+           -7.0,+           18.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -7.0,+           -14.0+          ],+          "toMm": [+           -14.0,+           -7.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           67.0,+           25.0+          ],+          "toMm": [+           72.0,+           20.0+          ]+         }+        },+        {+         "circle": {+          "centerMm": [+           0.0,+           0.0+          ],+          "radiusMm": 7.0+         }+        }+       ],+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.circle",+         "sketch.multiProfile",+         "sketch.line",+         "sketch.arc"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch13",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 44.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude10",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "readBack": {+        "depthMm": 44.0,+        "draftAngleDeg": 0.0,+        "draftOutward": false,+        "endCondition": 0+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch13",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "AISI 1020"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 7899.999999999999,+       "densityRequested": 7900.0,+       "material": "AISI 1020",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 4+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": "Plane4",+       "entities": [+        {+         "circle": {+          "centerMm": [+           72.0,+           28.70187343596344+          ],+          "radiusMm": 41.0+         }+        }+       ],+       "mapped": true,+       "plane": {+        "offsetFrom": {+         "face": {+          "atPointMm": [+           -10.0,+           0.0,+           0.0+          ]+         }+        },+        "offsetMm": -12.0+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.faceOffset",+         "sketch.circle"+        ]+       },+       "radiusMm": 41.0,+       "resolvedPlane": {+        "faceNormal": [+         -0.0,+         -0.0,+         -1.0+        ],+        "faceOffsetMm": -12.0,+        "fromFace": true,+        "offsetFrom": "Front Plane",+        "offsetMm": 12.0,+        "pickedBy": "geometry",+        "plane": "Plane4",+        "verified": true+       },+       "sketch": "Sketch14",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Plane4",+       "transformInverted": false+      },+      "step": 5+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 24.0,+       "dir": {+        "flippedToFollowTheReference": true,+        "reference": [+         -0.0,+         -0.0,+         -1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": true+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Cut-Extrude4",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.one.reversed"+        ]+       },+       "readBack": {+        "depthMm": 24.0,+        "draftAngleDeg": 0.0,+        "draftOutward": false,+        "endCondition": 0+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch14",+       "throughAll": false,+       "upToFace": null+      },+      "step": 6+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            -20.0,+            -40.0+           ],+           [+            85.99999999999999,+            -13.999999999999998+           ]+          ]+         }+        }+       ],+       "heightMm": 26.0,+       "mapped": true,+       "plane": {+        "face": {+         "atPointMm": [+          -10.0,+          0.0,+          44.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.face.front.positive",+         "sketch.rect",+         "select.multiSelectTyped"+        ]+       },+       "resolvedPlane": {+        "faceNormal": [+         0.0,+         0.0,+         1.0+        ],+        "offsetFrom": "Front Plane",+        "offsetMm": 44.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch15",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false,+       "widthMm": 106.0+      },+      "step": 7+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 19.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Cut-Extrude5",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.one"+        ]+       },+       "readBack": {+        "depthMm": 19.0,+        "draftAngleDeg": 0.0,+        "draftOutward": false,+        "endCondition": 0+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch15",+       "throughAll": false,+       "upToFace": null+      },+      "step": 8+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            -20.0,+            -40.0+           ],+           [+            20.0,+            40.0+           ]+          ]+         }+        }+       ],+       "heightMm": 80.0,+       "mapped": true,+       "plane": {+        "face": {+         "atPointMm": [+          -10.0,+          0.0,+          44.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.face.front.positive",+         "sketch.rect",+         "select.multiSelectTyped"+        ]+       },+       "resolvedPlane": {+        "faceNormal": [+         0.0,+         0.0,+         1.0+        ],+        "offsetFrom": "Front Plane",+        "offsetMm": 44.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch16",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false,+       "widthMm": 40.0+      },+      "step": 9+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 19.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Cut-Extrude6",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.one"+        ]+       },+       "readBack": {+        "depthMm": 19.0,+        "draftAngleDeg": 0.0,+        "draftOutward": false,+        "endCondition": 0+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch16",+       "throughAll": false,+       "upToFace": null+      },+      "step": 10+     },+     {+      "op": "hole",+      "result": {+       "depthMm": null,+       "diameterMm": 11.0,+       "face": {+        "atPointMm": [+         58.0,+         11.0,+         44.0+        ],+        "heightMm": 44.0,+        "normal": [+         0.0,+         0.0,+         1.0+        ],+        "pickedBy": "geometry",+        "plane": "Front Plane"+       },+       "feature": "Cut-Extrude7",+       "features": [+        "Cut-Extrude7"+       ],+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "hole.simple"+        ]+       },+       "steps": [+        {+         "op": "sketch",+         "result": {+          "createdPlane": "Plane5",+          "entities": [+           {+            "circle": {+             "centerMm": [+              58.0,+              11.0+             ],+             "radiusMm": 5.5+            }+           }+          ],+          "mapped": true,+          "plane": {+           "offsetFrom": "Front Plane",+           "offsetMm": 44.0+          },+          "planeFrames": "plane transforms (they match the measured Front/Top axes)",+          "radiusMm": 5.5,+          "resolvedPlane": {+           "offsetFrom": "Front Plane",+           "offsetMm": 44.0,+           "plane": "Plane5",+           "verified": true+          },+          "sketch": "Sketch17",+          "sketchNormal": [+           0.0,+           0.0,+           1.0+          ],+          "sketchedOn": "Plane5",+          "transformInverted": false+         }+        },+        {+         "op": "cut",+         "result": {+          "depth2Mm": null,+          "depthMm": 0.0,+          "dir": {+           "flippedToFollowTheReference": false,+           "reference": [+            0.0,+            0.0,+            1.0+           ],+           "sketchNormal": [+            0.0,+            0.0,+            1.0+           ],+           "value": false+          },+          "direction": "one",+          "draftDeg": null,+          "draftInward": null,+          "endCondition": 1,+          "feature": "Cut-Extrude7",+          "readBack": {+           "depthMm": 0.0,+           "draftAngleDeg": 0.0,+           "draftOutward": false,+           "endCondition": 1+          },+          "regions": null,+          "reverse": false,+          "sketch": "Sketch17",+          "throughAll": true,+          "upToFace": null+         }+        }+       ],+       "throughAll": true+      },+      "step": 11+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792502024000.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     -0.014,+     -0.033,+     0.0,+     0.07200000000000001,+     0.025,+     0.044+    ],+    "centerOfMass": [+     0.0317427963969883,+     -0.0008683174573996883,+     0.017834837095750275+    ],+    "centerOfMassMm": [+     31.742796,+     -0.868317,+     17.834837+    ],+    "density": 7900.0,+    "densityKgM3": 7900.0,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792502024000.SLDPRT",+     "title": "Part1-1792502024000.SLDPRT",+     "type": "part"+    },+    "durationMs": 1190,+    "error": "",+    "massG": 628.1833833399141,+    "massKg": 0.6281833833399142,+    "materialName": "AISI 1020",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[-0.014,-0.033,0.0,0.07200000000000001,0.025,0.044],\"centerOfMass\":[0.0317427963969883,-0.0008683174573996883,0.017834837095750275],\"centerOfMassMm\":[31.742796,-0.868317,17.834837],\"density\":7900.0,\"densityKgM3\":7900.0,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792502024000.SLDPRT\",\"title\":\"Part1-1792502024000.SLDPRT\",\"type\":\"part\"},\"massG\":628.1833833399141,\"massKg\":0.6281833833399142,\"materialName\":\"AISI 1020\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 158s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.01771252880409412,\"surfaceAreaMm2\":17712.52880409412,\"timeoutSeconds\":120,\"volumeM3\":0.00007951688396707775,\"volumeMm3\":79516.88396707775}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 158s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.01771252880409412,+    "surfaceAreaMm2": 17712.52880409412,+    "timeoutSeconds": 120,+    "volumeM3": 7.951688396707775e-05,+    "volumeMm3": 79516.88396707775+   },+   "pass": true,+   "checks": [+    {+     "quantity": "massG",+     "expected": 628.18,+     "measured": 628.1833833399141,+     "offPct": 0.0005385940198978062,+     "pass": true+    }+   ],+   "fails": [],+   "seconds": 34.8+  },+  {+   "id": "cswa-08-tool-block-step4",+   "title": "Official Tool Block, Step 4 (Q6): a pocket 1 mm inside the front face's outline (Offset Entities, sketch regions)",+   "official": true,+   "source": "https://www.solidworks.com/sites/default/files/2017-12/CSWASampleExam.pdf (Dassault CSWA Sample Exam, 2017 edition; archive http://web.archive.org/web/20251230104817/https://www.solidworks.com/sites/default/files/2017-12/CSWASampleExam.pdf)",+   "expected": {+    "massG": 432.58,+    "tolerancePct": 1.0+   },+   "material": {+    "name": "AISI 1020",+    "densityKgM3": 7900+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792502024000.SLDPRT",+     "title": "Part1-1792502024000.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792502024000.SLDPRT",+    "durationMs": 48330,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792502024000.SLDPRT\",\"title\":\"Part1-1792502024000.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792502024000.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":46.7,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 15 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 159s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":15,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792502024000.SLDPRT\",\"deleted\":[\"Sketch13\",\"Boss-Extrude10\",\"Plane4\",\"Sketch14\",\"Cut-Extrude4\",\"Sketch15\",\"Cut-Extrude5\",\"Sketch16\",\"Cut-Extrude6\",\"Plane5\",\"Sketch17\",\"Cut-Extrude7\"],\"featuresDeleted\":12,\"passes\":1,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"line\":{\"fromMm\":[0.0,18.0],\"toMm\":[22.3613808357771,14.057085232755291]}},{\"arc\":{\"ccw\":true,\"centerMm\":[25.66069621144878,32.768432539987224],\"endMm\":[43.0,25.0],\"radiusMm\":18.99999999999998,\"startMm\":[22.3613808357771,14.057085232755291]}},{\"line\":{\"fromMm\":[43.0,25.0],\"toMm\":[67.0,25.0]}},{\"line\":{\"fromMm\":[72.0,20.0],\"toMm\":[72.0,1.0]}},{\"line\":{\"fromMm\":[72.0,1.0],\"toMm\":[43.0,-33.0]}},{\"line\":{\"fromMm\":[43.0,-33.0],\"toMm\":[37.296980052734526,-33.0]}},{\"arc\":{\"ccw\":false,\"centerMm\":[59.20588235294099,-13.99999999999998],\"endMm\":[30.521177652752534,-18.264705882352946],\"radiusMm\":28.999999999999883,\"startMm\":[37.296980052734526,-33.0]}},{\"arc\":{\"ccw\":true,\"centerMm\":[25.575538911340765,-18.99999999999997],\"endMm\":[25.5755389113407,-14.0],\"radiusMm\":4.9999999999999325,\"startMm\":[30.521177652752534,-18.264705882352946]}},{\"line\":{\"fromMm\":[25.5755389113407,-14.0],\"toMm\":[-7.0,-14.0]}},{\"line\":{\"fromMm\":[-14.0,-7.0],\"toMm\":[-14.0,11.000000000000002]}},{\"line\":{\"fromMm\":[-7.0,18.0],\"toMm\":[0.0,18.0]}},{\"line\":{\"fromMm\":[-14.0,11.000000000000002],\"toMm\":[-7.0,18.0]}},{\"line\":{\"fromMm\":[-7.0,-14.0],\"toMm\":[-14.0,-7.0]}},{\"line\":{\"fromMm\":[67.0,25.0],\"toMm\":[72.0,20.0]}},{\"circle\":{\"centerMm\":[0.0,0.0],\"radiusMm\":7.0}}],\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.front\",\"sketch.circle\",\"sketch.multiProfile\",\"sketch.line\",\"sketch.arc\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch18\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":44.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude11\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"readBack\":{\"depthMm\":44.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch18\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"AISI 1020\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":7900.000000000001,\"densityRequested\":7900.0,\"material\":\"AISI 1020\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":4},{\"op\":\"sketch\",\"result\":{\"createdPlane\":\"Plane6\",\"entities\":[{\"circle\":{\"centerMm\":[72.0,28.70187343596344],\"radiusMm\":41.0}}],\"mapped\":true,\"plane\":{\"offsetFrom\":{\"face\":{\"atPointMm\":[-10.0,0.0,0.0]}},\"offsetMm\":-12.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.faceOffset\",\"sketch.circle\"]},\"radiusMm\":41.0,\"resolvedPlane\":{\"faceNormal\":[-0.0,-0.0,-1.0],\"faceOffsetMm\":-12.0,\"fromFace\":true,\"offsetFrom\":\"Front Plane\",\"offsetMm\":12.0,\"pickedBy\":\"geometry\",\"plane\":\"Plane6\",\"verified\":true},\"sketch\":\"Sketch19\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Plane6\",\"transformInverted\":false},\"step\":5},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":24.0,\"dir\":{\"flippedToFollowTheReference\":true,\"reference\":[-0.0,-0.0,-1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":true},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude8\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one.reversed\"]},\"readBack\":{\"depthMm\":24.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch19\",\"throughAll\":false,\"upToFace\":null},\"step\":6},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[-20.0,-40.0],[85.99999999999999,-13.999999999999998]]}}],\"heightMm\":26.0,\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[-10.0,0.0,44.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.front.positive\",\"sketch.rect\",\"select.multiSelectTyped\"]},\"resolvedPlane\":{\"faceNormal\":[0.0,0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch20\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false,\"widthMm\":106.0},\"step\":7},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":19.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude9\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one\"]},\"readBack\":{\"depthMm\":19.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch20\",\"throughAll\":false,\"upToFace\":null},\"step\":8},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[-20.0,-40.0],[20.0,40.0]]}}],\"heightMm\":80.0,\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[-10.0,0.0,44.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.front.positive\",\"sketch.rect\",\"select.multiSelectTyped\"]},\"resolvedPlane\":{\"faceNormal\":[0.0,0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch21\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false,\"widthMm\":40.0},\"step\":9},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":19.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude10\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one\"]},\"readBack\":{\"depthMm\":19.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch21\",\"throughAll\":false,\"upToFace\":null},\"step\":10},{\"op\":\"hole\",\"result\":{\"depthMm\":null,\"diameterMm\":11.0,\"face\":{\"atPointMm\":[58.0,11.0,44.0],\"heightMm\":44.0,\"normal\":[0.0,0.0,1.0],\"pickedBy\":\"geometry\",\"plane\":\"Front Plane\"},\"feature\":\"Cut-Extrude11\",\"features\":[\"Cut-Extrude11\"],\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"hole.simple\"]},\"steps\":[{\"op\":\"sketch\",\"result\":{\"createdPlane\":\"Plane7\",\"entities\":[{\"circle\":{\"centerMm\":[58.0,11.0],\"radiusMm\":5.5}}],\"mapped\":true,\"plane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"radiusMm\":5.5,\"resolvedPlane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"plane\":\"Plane7\",\"verified\":true},\"sketch\":\"Sketch22\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Plane7\",\"transformInverted\":false}},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":0.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":1,\"feature\":\"Cut-Extrude11\",\"readBack\":{\"depthMm\":0.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":1},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch22\",\"throughAll\":true,\"upToFace\":null}}],\"throughAll\":true},\"step\":11},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"circle\":{\"centerMm\":[72.0,28.70187343596344],\"radiusMm\":42.0}}],\"mapped\":true,\"offsets\":[{\"offsetEntities\":{\"chain\":true,\"fromFace\":{\"atPointMm\":[70.0,10.0,44.0]},\"loops\":\"outer\",\"offsetMm\":-1.0,\"side\":\"inward\"},\"route\":\"IModelDoc2::SketchOffsetEntities2\",\"segments\":8,\"selected\":\"the face's outer loop (8 edges)\",\"side\":\"inward\",\"sideVerified\":true,\"tries\":[{\"farthestFromTheFaceMm\":0.0,\"landed\":\"inward\",\"offsetMm\":-1.0,\"segments\":8}],\"why\":null}],\"plane\":{\"face\":{\"atPointMm\":[70.0,10.0,44.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.4-rc1\",\"by\":\"adom\",\"date\":\"2026-10-16\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.front.positive\",\"sketch.circle\",\"sketch.multiProfile\",\"sketch.offsetEntities.outer\",\"select.multiSelectTyped\"]},\"radiusMm\":42.0,\"resolvedPlane\":{\"faceNormal\":[0.0,0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch23\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false},\"step\":12},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":12.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":5,\"feature\":\"Cut-Extrude12\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.4-rc1\",\"by\":\"adom\",\"date\":\"2026-10-16\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.offsetFromSurface\",\"cut.regions\"]},\"readBack\":{\"depthMm\":12.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":5},\"regions\":{\"selected\":[{\"atMm\":[25.0,0.0],\"modelMm\":[25.0,0.0,44.0]}],\"via\":\"SelectByID2 SKETCHREGION, mark 4, EnableContourSelection on\"},\"reverse\":false,\"sketch\":\"Sketch23\",\"throughAll\":false,\"upToFace\":{\"mark\":1,\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false}},\"step\":13},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"circle\":{\"centerMm\":[72.0,28.70187343596344],\"radiusMm\":41.0}}],\"mapped\":true,\"offsets\":[{\"offsetEntities\":{\"chain\":true,\"fromFace\":{\"atPointMm\":[70.0,10.0,44.0]},\"loops\":\"outer\",\"offsetMm\":-1.0,\"side\":\"inward\"},\"route\":\"IModelDoc2::SketchOffsetEntities2\",\"segments\":8,\"selected\":\"the face's outer loop (8 edges)\",\"side\":\"inward\",\"sideVerified\":true,\"tries\":[{\"farthestFromTheFaceMm\":3.4694469519536138e-15,\"landed\":\"inward\",\"offsetMm\":-1.0,\"segments\":8}],\"why\":null}],\"plane\":{\"face\":{\"atPointMm\":[70.0,10.0,44.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.4-rc1\",\"by\":\"adom\",\"date\":\"2026-10-16\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.front.positive\",\"sketch.circle\",\"sketch.multiProfile\",\"sketch.offsetEntities.outer\",\"select.multiSelectTyped\"]},\"radiusMm\":41.0,\"resolvedPlane\":{\"faceNormal\":[0.0,0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch24\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false},\"step\":14},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":1.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":5,\"feature\":\"Cut-Extrude13\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.4-rc1\",\"by\":\"adom\",\"date\":\"2026-10-16\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.offsetFromSurface\",\"cut.regions\"]},\"readBack\":{\"depthMm\":1.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":5},\"regions\":{\"selected\":[{\"atMm\":[65.0,15.0],\"modelMm\":[65.0,15.0,44.0]}],\"via\":\"SelectByID2 SKETCHREGION, mark 4, EnableContourSelection on\"},\"reverse\":false,\"sketch\":\"Sketch24\",\"throughAll\":false,\"upToFace\":{\"mark\":1,\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false}},\"step\":15}],\"success\":true,\"targetDocument\":\"Part1-1792502024000.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 46.7,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 15 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 159s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 15,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792502024000.SLDPRT",+       "deleted": [+        "Sketch13",+        "Boss-Extrude10",+        "Plane4",+        "Sketch14",+        "Cut-Extrude4",+        "Sketch15",+        "Cut-Extrude5",+        "Sketch16",+        "Cut-Extrude6",+        "Plane5",+        "Sketch17",+        "Cut-Extrude7"+       ],+       "featuresDeleted": 12,+       "passes": 1,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "line": {+          "fromMm": [+           0.0,+           18.0+          ],+          "toMm": [+           22.3613808357771,+           14.057085232755291+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           25.66069621144878,+           32.768432539987224+          ],+          "endMm": [+           43.0,+           25.0+          ],+          "radiusMm": 18.99999999999998,+          "startMm": [+           22.3613808357771,+           14.057085232755291+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           43.0,+           25.0+          ],+          "toMm": [+           67.0,+           25.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           72.0,+           20.0+          ],+          "toMm": [+           72.0,+           1.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           72.0,+           1.0+          ],+          "toMm": [+           43.0,+           -33.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           43.0,+           -33.0+          ],+          "toMm": [+           37.296980052734526,+           -33.0+          ]+         }+        },+        {+         "arc": {+          "ccw": false,+          "centerMm": [+           59.20588235294099,+           -13.99999999999998+          ],+          "endMm": [+           30.521177652752534,+           -18.264705882352946+          ],+          "radiusMm": 28.999999999999883,+          "startMm": [+           37.296980052734526,+           -33.0+          ]+         }+        },+        {+         "arc": {+          "ccw": true,+          "centerMm": [+           25.575538911340765,+           -18.99999999999997+          ],+          "endMm": [+           25.5755389113407,+           -14.0+          ],+          "radiusMm": 4.9999999999999325,+          "startMm": [+           30.521177652752534,+           -18.264705882352946+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           25.5755389113407,+           -14.0+          ],+          "toMm": [+           -7.0,+           -14.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -14.0,+           -7.0+          ],+          "toMm": [+           -14.0,+           11.000000000000002+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -7.0,+           18.0+          ],+          "toMm": [+           0.0,+           18.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -14.0,+           11.000000000000002+          ],+          "toMm": [+           -7.0,+           18.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           -7.0,+           -14.0+          ],+          "toMm": [+           -14.0,+           -7.0+          ]+         }+        },+        {+         "line": {+          "fromMm": [+           67.0,+           25.0+          ],+          "toMm": [+           72.0,+           20.0+          ]+         }+        },+        {+         "circle": {+          "centerMm": [+           0.0,+           0.0+          ],+          "radiusMm": 7.0+         }+        }+       ],+       "mapped": false,+       "plane": "Front Plane",+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.plane.front",+         "sketch.circle",+         "sketch.multiProfile",+         "sketch.line",+         "sketch.arc"+        ]+       },+       "resolvedPlane": null,+       "sketch": "Sketch18",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Front Plane",+       "transformInverted": false+      },+      "step": 2+     },+     {+      "op": "extrude",+      "result": {+       "depth2Mm": null,+       "depthMm": 44.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": null,+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Boss-Extrude11",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "extrude.one"+        ]+       },+       "readBack": {+        "depthMm": 44.0,+        "draftAngleDeg": 0.0,+        "draftOutward": false,+        "endCondition": 0+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch18",+       "throughAll": false,+       "upToFace": null+      },+      "step": 3+     },+     {+      "op": "set_material",+      "result": {+       "appearanceReapplied": [],+       "current": {+        "database": "SOLIDWORKS Materials",+        "name": "AISI 1020"+       },+       "database": "SOLIDWORKS Materials.sldmat",+       "densityKgM3": 7900.000000000001,+       "densityRequested": 7900.0,+       "material": "AISI 1020",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "set_material",+         "set_material.density"+        ]+       }+      },+      "step": 4+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": "Plane6",+       "entities": [+        {+         "circle": {+          "centerMm": [+           72.0,+           28.70187343596344+          ],+          "radiusMm": 41.0+         }+        }+       ],+       "mapped": true,+       "plane": {+        "offsetFrom": {+         "face": {+          "atPointMm": [+           -10.0,+           0.0,+           0.0+          ]+         }+        },+        "offsetMm": -12.0+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.faceOffset",+         "sketch.circle"+        ]+       },+       "radiusMm": 41.0,+       "resolvedPlane": {+        "faceNormal": [+         -0.0,+         -0.0,+         -1.0+        ],+        "faceOffsetMm": -12.0,+        "fromFace": true,+        "offsetFrom": "Front Plane",+        "offsetMm": 12.0,+        "pickedBy": "geometry",+        "plane": "Plane6",+        "verified": true+       },+       "sketch": "Sketch19",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "Plane6",+       "transformInverted": false+      },+      "step": 5+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 24.0,+       "dir": {+        "flippedToFollowTheReference": true,+        "reference": [+         -0.0,+         -0.0,+         -1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": true+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Cut-Extrude8",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.one.reversed"+        ]+       },+       "readBack": {+        "depthMm": 24.0,+        "draftAngleDeg": 0.0,+        "draftOutward": false,+        "endCondition": 0+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch19",+       "throughAll": false,+       "upToFace": null+      },+      "step": 6+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            -20.0,+            -40.0+           ],+           [+            85.99999999999999,+            -13.999999999999998+           ]+          ]+         }+        }+       ],+       "heightMm": 26.0,+       "mapped": true,+       "plane": {+        "face": {+         "atPointMm": [+          -10.0,+          0.0,+          44.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.face.front.positive",+         "sketch.rect",+         "select.multiSelectTyped"+        ]+       },+       "resolvedPlane": {+        "faceNormal": [+         0.0,+         0.0,+         1.0+        ],+        "offsetFrom": "Front Plane",+        "offsetMm": 44.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch20",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false,+       "widthMm": 106.0+      },+      "step": 7+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 19.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Cut-Extrude9",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.one"+        ]+       },+       "readBack": {+        "depthMm": 19.0,+        "draftAngleDeg": 0.0,+        "draftOutward": false,+        "endCondition": 0+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch20",+       "throughAll": false,+       "upToFace": null+      },+      "step": 8+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "rect": {+          "cornersMm": [+           [+            -20.0,+            -40.0+           ],+           [+            20.0,+            40.0+           ]+          ]+         }+        }+       ],+       "heightMm": 80.0,+       "mapped": true,+       "plane": {+        "face": {+         "atPointMm": [+          -10.0,+          0.0,+          44.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.face.front.positive",+         "sketch.rect",+         "select.multiSelectTyped"+        ]+       },+       "resolvedPlane": {+        "faceNormal": [+         0.0,+         0.0,+         1.0+        ],+        "offsetFrom": "Front Plane",+        "offsetMm": 44.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch21",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false,+       "widthMm": 40.0+      },+      "step": 9+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 19.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 0,+       "feature": "Cut-Extrude10",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.one"+        ]+       },+       "readBack": {+        "depthMm": 19.0,+        "draftAngleDeg": 0.0,+        "draftOutward": false,+        "endCondition": 0+       },+       "regions": null,+       "reverse": false,+       "sketch": "Sketch21",+       "throughAll": false,+       "upToFace": null+      },+      "step": 10+     },+     {+      "op": "hole",+      "result": {+       "depthMm": null,+       "diameterMm": 11.0,+       "face": {+        "atPointMm": [+         58.0,+         11.0,+         44.0+        ],+        "heightMm": 44.0,+        "normal": [+         0.0,+         0.0,+         1.0+        ],+        "pickedBy": "geometry",+        "plane": "Front Plane"+       },+       "feature": "Cut-Extrude11",+       "features": [+        "Cut-Extrude11"+       ],+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "hole.simple"+        ]+       },+       "steps": [+        {+         "op": "sketch",+         "result": {+          "createdPlane": "Plane7",+          "entities": [+           {+            "circle": {+             "centerMm": [+              58.0,+              11.0+             ],+             "radiusMm": 5.5+            }+           }+          ],+          "mapped": true,+          "plane": {+           "offsetFrom": "Front Plane",+           "offsetMm": 44.0+          },+          "planeFrames": "plane transforms (they match the measured Front/Top axes)",+          "radiusMm": 5.5,+          "resolvedPlane": {+           "offsetFrom": "Front Plane",+           "offsetMm": 44.0,+           "plane": "Plane7",+           "verified": true+          },+          "sketch": "Sketch22",+          "sketchNormal": [+           0.0,+           0.0,+           1.0+          ],+          "sketchedOn": "Plane7",+          "transformInverted": false+         }+        },+        {+         "op": "cut",+         "result": {+          "depth2Mm": null,+          "depthMm": 0.0,+          "dir": {+           "flippedToFollowTheReference": false,+           "reference": [+            0.0,+            0.0,+            1.0+           ],+           "sketchNormal": [+            0.0,+            0.0,+            1.0+           ],+           "value": false+          },+          "direction": "one",+          "draftDeg": null,+          "draftInward": null,+          "endCondition": 1,+          "feature": "Cut-Extrude11",+          "readBack": {+           "depthMm": 0.0,+           "draftAngleDeg": 0.0,+           "draftOutward": false,+           "endCondition": 1+          },+          "regions": null,+          "reverse": false,+          "sketch": "Sketch22",+          "throughAll": true,+          "upToFace": null+         }+        }+       ],+       "throughAll": true+      },+      "step": 11+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "circle": {+          "centerMm": [+           72.0,+           28.70187343596344+          ],+          "radiusMm": 42.0+         }+        }+       ],+       "mapped": true,+       "offsets": [+        {+         "offsetEntities": {+          "chain": true,+          "fromFace": {+           "atPointMm": [+            70.0,+            10.0,+            44.0+           ]+          },+          "loops": "outer",+          "offsetMm": -1.0,+          "side": "inward"+         },+         "route": "IModelDoc2::SketchOffsetEntities2",+         "segments": 8,+         "selected": "the face's outer loop (8 edges)",+         "side": "inward",+         "sideVerified": true,+         "tries": [+          {+           "farthestFromTheFaceMm": 0.0,+           "landed": "inward",+           "offsetMm": -1.0,+           "segments": 8+          }+         ],+         "why": null+        }+       ],+       "plane": {+        "face": {+         "atPointMm": [+          70.0,+          10.0,+          44.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.4-rc1",+          "by": "adom",+          "date": "2026-10-16",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.face.front.positive",+         "sketch.circle",+         "sketch.multiProfile",+         "sketch.offsetEntities.outer",+         "select.multiSelectTyped"+        ]+       },+       "radiusMm": 42.0,+       "resolvedPlane": {+        "faceNormal": [+         0.0,+         0.0,+         1.0+        ],+        "offsetFrom": "Front Plane",+        "offsetMm": 44.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch23",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false+      },+      "step": 12+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 12.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 5,+       "feature": "Cut-Extrude12",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.4-rc1",+          "by": "adom",+          "date": "2026-10-16",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.offsetFromSurface",+         "cut.regions"+        ]+       },+       "readBack": {+        "depthMm": 12.0,+        "draftAngleDeg": 0.0,+        "draftOutward": false,+        "endCondition": 5+       },+       "regions": {+        "selected": [+         {+          "atMm": [+           25.0,+           0.0+          ],+          "modelMm": [+           25.0,+           0.0,+           44.0+          ]+         }+        ],+        "via": "SelectByID2 SKETCHREGION, mark 4, EnableContourSelection on"+       },+       "reverse": false,+       "sketch": "Sketch23",+       "throughAll": false,+       "upToFace": {+        "mark": 1,+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       }+      },+      "step": 13+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "circle": {+          "centerMm": [+           72.0,+           28.70187343596344+          ],+          "radiusMm": 41.0+         }+        }+       ],+       "mapped": true,+       "offsets": [+        {+         "offsetEntities": {+          "chain": true,+          "fromFace": {+           "atPointMm": [+            70.0,+            10.0,+            44.0+           ]+          },+          "loops": "outer",+          "offsetMm": -1.0,+          "side": "inward"+         },+         "route": "IModelDoc2::SketchOffsetEntities2",+         "segments": 8,+         "selected": "the face's outer loop (8 edges)",+         "side": "inward",+         "sideVerified": true,+         "tries": [+          {+           "farthestFromTheFaceMm": 3.4694469519536138e-15,+           "landed": "inward",+           "offsetMm": -1.0,+           "segments": 8+          }+         ],+         "why": null+        }+       ],+       "plane": {+        "face": {+         "atPointMm": [+          70.0,+          10.0,+          44.0+         ]+        }+       },+       "planeFrames": "plane transforms (they match the measured Front/Top axes)",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.3",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.11.4-rc1",+          "by": "adom",+          "date": "2026-10-16",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "sketch.face.front.positive",+         "sketch.circle",+         "sketch.multiProfile",+         "sketch.offsetEntities.outer",+         "select.multiSelectTyped"+        ]+       },+       "radiusMm": 41.0,+       "resolvedPlane": {+        "faceNormal": [+         0.0,+         0.0,+         1.0+        ],+        "offsetFrom": "Front Plane",+        "offsetMm": 44.0,+        "pickedBy": "geometry",+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       },+       "sketch": "Sketch24",+       "sketchNormal": [+        0.0,+        0.0,+        1.0+       ],+       "sketchedOn": "the picked face",+       "transformInverted": false+      },+      "step": 14+     },+     {+      "op": "cut",+      "result": {+       "depth2Mm": null,+       "depthMm": 1.0,+       "dir": {+        "flippedToFollowTheReference": false,+        "reference": [+         0.0,+         0.0,+         1.0+        ],+        "sketchNormal": [+         0.0,+         0.0,+         1.0+        ],+        "value": false+       },+       "direction": "one",+       "draftDeg": null,+       "draftInward": null,+       "endCondition": 5,+       "feature": "Cut-Extrude13",+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.11.4-rc1",+          "by": "adom",+          "date": "2026-10-16",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "cut.offsetFromSurface",+         "cut.regions"+        ]+       },+       "readBack": {+        "depthMm": 1.0,+        "draftAngleDeg": 0.0,+        "draftOutward": false,+        "endCondition": 5+       },+       "regions": {+        "selected": [+         {+          "atMm": [+           65.0,+           15.0+          ],+          "modelMm": [+           65.0,+           15.0,+           44.0+          ]+         }+        ],+        "via": "SelectByID2 SKETCHREGION, mark 4, EnableContourSelection on"+       },+       "reverse": false,+       "sketch": "Sketch24",+       "throughAll": false,+       "upToFace": {+        "mark": 1,+        "selectedVia": "MultiSelect2(typed array)",+        "viewDependent": false+       }+      },+      "step": 15+     }+    ],+    "success": true,+    "targetDocument": "Part1-1792502024000.SLDPRT",+    "timeoutSeconds": 420+   },+   "massProperties": {+    "_hint": "SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.",+    "_timeoutHint": "ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "boundingBox": [+     -0.014,+     -0.033,+     0.0,+     0.11400000000000002,+     0.07070187343596344,+     0.044+    ],+    "centerOfMass": [+     0.028679743560791063,+     -0.0013181364133994554,+     0.01197320886446479+    ],+    "centerOfMassMm": [+     28.679744,+     -1.318136,+     11.973209+    ],+    "density": 7900.0,+    "densityKgM3": 7900.0,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792502024000.SLDPRT",+     "title": "Part1-1792502024000.SLDPRT",+     "type": "part"+    },+    "durationMs": 949,+    "error": "",+    "massG": 434.7151664097057,+    "massKg": 0.4347151664097057,+    "materialName": "AISI 1020",+    "output": "{\"_hint\":\"SI units: kg, m^3, m^2, m. Mass is only as good as the material assignment \u2014 a 0 or default density means no material is set on the model, so report the density alongside the mass.\",\"_timeoutHint\":\"ab waits up to 120s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"boundingBox\":[-0.014,-0.033,0.0,0.11400000000000002,0.07070187343596344,0.044],\"centerOfMass\":[0.028679743560791063,-0.0013181364133994554,0.01197320886446479],\"centerOfMassMm\":[28.679744,-1.318136,11.973209],\"density\":7900.0,\"densityKgM3\":7900.0,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792502024000.SLDPRT\",\"title\":\"Part1-1792502024000.SLDPRT\",\"type\":\"part\"},\"massG\":434.7151664097057,\"massKg\":0.4347151664097057,\"materialName\":\"AISI 1020\",\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 207s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"statusVerb\":\"swx_status\",\"success\":true,\"surfaceAreaM2\":0.022011814184570586,\"surfaceAreaMm2\":22011.814184570587,\"timeoutSeconds\":120,\"volumeM3\":0.00005502723625439312,\"volumeMm3\":55027.23625439312}",+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 207s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "status": "ok",+    "statusVerb": "swx_status",+    "success": true,+    "surfaceAreaM2": 0.022011814184570586,+    "surfaceAreaMm2": 22011.814184570587,+    "timeoutSeconds": 120,+    "volumeM3": 5.502723625439312e-05,+    "volumeMm3": 55027.23625439312+   },+   "pass": true,+   "checks": [+    {+     "quantity": "massG",+     "expected": 432.58,+     "measured": 434.7151664097057,+     "offPct": 0.49358879506813363,+     "pass": true+    }+   ],+   "fails": [],+   "seconds": 49.3+  },+  {+   "id": "cswa-08b-tool-block-step4-explicit",+   "title": "Official Tool Block, Step 4 (Q6), the explicit inset profile: the same pocket drawn line by line (the Offset Entities fallback)",+   "official": true,+   "source": "https://www.solidworks.com/sites/default/files/2017-12/CSWASampleExam.pdf (Dassault CSWA Sample Exam, 2017 edition; archive http://web.archive.org/web/20251230104817/https://www.solidworks.com/sites/default/files/2017-12/CSWASampleExam.pdf)",+   "expected": {+    "massG": 432.58,+    "tolerancePct": 1.0+   },+   "material": {+    "name": "AISI 1020",+    "densityKgM3": 7900+   },+   "runScript": {+    "_hint": "Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.",+    "_timeoutHint": "ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.",+    "bridgeCreatedDocument": true,+    "created": null,+    "doc": {+     "config": "Default",+     "dirty": true,+     "path": "C:/Users/drew/AppData/Local/adom-solidworks-bridge/exports/scratch/Part1-1792502024000.SLDPRT",+     "title": "Part1-1792502024000.SLDPRT",+     "type": "part"+    },+    "documentName": "Part1-1792502024000.SLDPRT",+    "durationMs": 36293,+    "error": "",+    "ops": [+     "new_part",+     "new_assembly",+     "clear_part",+     "sketch",+     "sketch_rect",+     "sketch_circle",+     "extrude",+     "cut",+     "set_material",+     "set_appearance",+     "fillet",+     "chamfer",+     "shell",+     "revolve",+     "revolve_cut",+     "mirror",+     "hole",+     "linear_pattern",+     "circular_pattern",+     "set_prop",+     "save_as",+     "rebuild",+     "zoom_fit"+    ],+    "output": "{\"_hint\":\"Each step reports what it built. Verify with swx_inspect_bodies (the geometry) or swx_mass_properties (the mass) rather than trusting the step list. This document was created by the bridge, so swx_close_doc {save:false} discards the whole thing safely; swx_save_as puts it on disk. A step that fails stops the script and says which one, leaving what was already built in place.\",\"_timeoutHint\":\"ab waits up to 420s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `swx_status` until it reports done.\",\"bridgeCreatedDocument\":true,\"created\":null,\"doc\":{\"config\":\"Default\",\"dirty\":true,\"path\":\"C:\\\\Users\\\\drew\\\\AppData\\\\Local\\\\adom-solidworks-bridge\\\\exports\\\\scratch\\\\Part1-1792502024000.SLDPRT\",\"title\":\"Part1-1792502024000.SLDPRT\",\"type\":\"part\"},\"documentName\":\"Part1-1792502024000.SLDPRT\",\"ops\":[\"new_part\",\"new_assembly\",\"clear_part\",\"sketch\",\"sketch_rect\",\"sketch_circle\",\"extrude\",\"cut\",\"set_material\",\"set_appearance\",\"fillet\",\"chamfer\",\"shell\",\"revolve\",\"revolve_cut\",\"mirror\",\"hole\",\"linear_pattern\",\"circular_pattern\",\"set_prop\",\"save_as\",\"rebuild\",\"zoom_fit\"],\"progress\":{\"confidence\":\"estimate\",\"elapsedSec\":34.9,\"estimatedSec\":30,\"etaSec\":0,\"percent\":100,\"phase\":\"run_script\",\"startKind\":\"warm\",\"stepLabel\":\"Running 15 modeling step(s)\"},\"readiness\":{\"basedOn\":[\"alreadyReadyThisSession\"],\"evaluatedAt\":\"gate\",\"readsAllowed\":true,\"ready\":true,\"running\":true,\"state\":\"ready\",\"why\":\"a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 208s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed\"},\"solidworksRevision\":\"34.3.0\",\"statusVerb\":\"swx_status\",\"stepCount\":15,\"steps\":[{\"op\":\"clear_part\",\"result\":{\"bodiesLeft\":0,\"cleared\":\"Part1-1792502024000.SLDPRT\",\"deleted\":[\"Sketch18\",\"Boss-Extrude11\",\"Plane6\",\"Sketch19\",\"Cut-Extrude8\",\"Sketch20\",\"Cut-Extrude9\",\"Sketch21\",\"Cut-Extrude10\",\"Plane7\",\"Sketch22\",\"Cut-Extrude11\",\"Sketch23\",\"Cut-Extrude12\",\"Sketch24\",\"Cut-Extrude13\"],\"featuresDeleted\":16,\"passes\":1,\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.6\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"clear_part\"]},\"route\":\"DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty\"},\"step\":1},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"line\":{\"fromMm\":[0.0,18.0],\"toMm\":[22.3613808357771,14.057085232755291]}},{\"arc\":{\"ccw\":true,\"centerMm\":[25.66069621144878,32.768432539987224],\"endMm\":[43.0,25.0],\"radiusMm\":18.99999999999998,\"startMm\":[22.3613808357771,14.057085232755291]}},{\"line\":{\"fromMm\":[43.0,25.0],\"toMm\":[67.0,25.0]}},{\"line\":{\"fromMm\":[72.0,20.0],\"toMm\":[72.0,1.0]}},{\"line\":{\"fromMm\":[72.0,1.0],\"toMm\":[43.0,-33.0]}},{\"line\":{\"fromMm\":[43.0,-33.0],\"toMm\":[37.296980052734526,-33.0]}},{\"arc\":{\"ccw\":false,\"centerMm\":[59.20588235294099,-13.99999999999998],\"endMm\":[30.521177652752534,-18.264705882352946],\"radiusMm\":28.999999999999883,\"startMm\":[37.296980052734526,-33.0]}},{\"arc\":{\"ccw\":true,\"centerMm\":[25.575538911340765,-18.99999999999997],\"endMm\":[25.5755389113407,-14.0],\"radiusMm\":4.9999999999999325,\"startMm\":[30.521177652752534,-18.264705882352946]}},{\"line\":{\"fromMm\":[25.5755389113407,-14.0],\"toMm\":[-7.0,-14.0]}},{\"line\":{\"fromMm\":[-14.0,-7.0],\"toMm\":[-14.0,11.000000000000002]}},{\"line\":{\"fromMm\":[-7.0,18.0],\"toMm\":[0.0,18.0]}},{\"line\":{\"fromMm\":[-14.0,11.000000000000002],\"toMm\":[-7.0,18.0]}},{\"line\":{\"fromMm\":[-7.0,-14.0],\"toMm\":[-14.0,-7.0]}},{\"line\":{\"fromMm\":[67.0,25.0],\"toMm\":[72.0,20.0]}},{\"circle\":{\"centerMm\":[0.0,0.0],\"radiusMm\":7.0}}],\"mapped\":false,\"plane\":\"Front Plane\",\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.plane.front\",\"sketch.circle\",\"sketch.multiProfile\",\"sketch.line\",\"sketch.arc\"]},\"resolvedPlane\":null,\"sketch\":\"Sketch25\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Front Plane\",\"transformInverted\":false},\"step\":2},{\"op\":\"extrude\",\"result\":{\"depth2Mm\":null,\"depthMm\":44.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":null,\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Boss-Extrude12\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"extrude.one\"]},\"readBack\":{\"depthMm\":44.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch25\",\"throughAll\":false,\"upToFace\":null},\"step\":3},{\"op\":\"set_material\",\"result\":{\"appearanceReapplied\":[],\"current\":{\"database\":\"SOLIDWORKS Materials\",\"name\":\"AISI 1020\"},\"database\":\"SOLIDWORKS Materials.sldmat\",\"densityKgM3\":7899.999999999999,\"densityRequested\":7900.0,\"material\":\"AISI 1020\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"set_material\",\"set_material.density\"]}},\"step\":4},{\"op\":\"sketch\",\"result\":{\"createdPlane\":\"Plane8\",\"entities\":[{\"circle\":{\"centerMm\":[72.0,28.70187343596344],\"radiusMm\":41.0}}],\"mapped\":true,\"plane\":{\"offsetFrom\":{\"face\":{\"atPointMm\":[-10.0,0.0,0.0]}},\"offsetMm\":-12.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.faceOffset\",\"sketch.circle\"]},\"radiusMm\":41.0,\"resolvedPlane\":{\"faceNormal\":[-0.0,-0.0,-1.0],\"faceOffsetMm\":-12.0,\"fromFace\":true,\"offsetFrom\":\"Front Plane\",\"offsetMm\":12.0,\"pickedBy\":\"geometry\",\"plane\":\"Plane8\",\"verified\":true},\"sketch\":\"Sketch26\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Plane8\",\"transformInverted\":false},\"step\":5},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":24.0,\"dir\":{\"flippedToFollowTheReference\":true,\"reference\":[-0.0,-0.0,-1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":true},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude14\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one.reversed\"]},\"readBack\":{\"depthMm\":24.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch26\",\"throughAll\":false,\"upToFace\":null},\"step\":6},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[-20.0,-40.0],[85.99999999999999,-13.999999999999998]]}}],\"heightMm\":26.0,\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[-10.0,0.0,44.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.front.positive\",\"sketch.rect\",\"select.multiSelectTyped\"]},\"resolvedPlane\":{\"faceNormal\":[0.0,0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch27\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false,\"widthMm\":106.0},\"step\":7},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":19.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude15\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one\"]},\"readBack\":{\"depthMm\":19.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch27\",\"throughAll\":false,\"upToFace\":null},\"step\":8},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"rect\":{\"cornersMm\":[[-20.0,-40.0],[20.0,40.0]]}}],\"heightMm\":80.0,\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[-10.0,0.0,44.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.front.positive\",\"sketch.rect\",\"select.multiSelectTyped\"]},\"resolvedPlane\":{\"faceNormal\":[0.0,0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch28\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false,\"widthMm\":40.0},\"step\":9},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":19.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude16\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one\"]},\"readBack\":{\"depthMm\":19.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch28\",\"throughAll\":false,\"upToFace\":null},\"step\":10},{\"op\":\"hole\",\"result\":{\"depthMm\":null,\"diameterMm\":11.0,\"face\":{\"atPointMm\":[58.0,11.0,44.0],\"heightMm\":44.0,\"normal\":[0.0,0.0,1.0],\"pickedBy\":\"geometry\",\"plane\":\"Front Plane\"},\"feature\":\"Cut-Extrude17\",\"features\":[\"Cut-Extrude17\"],\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"hole.simple\"]},\"steps\":[{\"op\":\"sketch\",\"result\":{\"createdPlane\":\"Plane9\",\"entities\":[{\"circle\":{\"centerMm\":[58.0,11.0],\"radiusMm\":5.5}}],\"mapped\":true,\"plane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"radiusMm\":5.5,\"resolvedPlane\":{\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"plane\":\"Plane9\",\"verified\":true},\"sketch\":\"Sketch29\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"Plane9\",\"transformInverted\":false}},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":0.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":1,\"feature\":\"Cut-Extrude17\",\"readBack\":{\"depthMm\":0.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":1},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch29\",\"throughAll\":true,\"upToFace\":null}}],\"throughAll\":true},\"step\":11},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"line\":{\"fromMm\":[21.0,-13.0],\"toMm\":[58.744476295793866,-13.0]}},{\"line\":{\"fromMm\":[58.744476295793866,-13.0],\"toMm\":[59.98684774684612,-11.543426574628398]}},{\"arc\":{\"ccw\":false,\"centerMm\":[72.00000000000006,28.70187343596347],\"endMm\":[32.6466829432945,14.028208705078669],\"radiusMm\":42.00000000000004,\"startMm\":[59.98684774684612,-11.543426574628398]}},{\"arc\":{\"ccw\":false,\"centerMm\":[25.660696211448773,32.76843253998723],\"endMm\":[22.18773265811017,13.072277479743086],\"radiusMm\":19.999999999999982,\"startMm\":[32.6466829432945,14.028208705078669]}},{\"line\":{\"fromMm\":[22.18773265811017,13.072277479743086],\"toMm\":[21.0,13.281706793236491]}},{\"line\":{\"fromMm\":[21.0,13.281706793236491],\"toMm\":[21.0,-13.0]}}],\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[70.0,10.0,44.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.front.positive\",\"sketch.multiProfile\",\"sketch.line\",\"sketch.arc\",\"select.multiSelectTyped\"]},\"resolvedPlane\":{\"faceNormal\":[0.0,0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch30\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false},\"step\":12},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":32.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude18\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one\"]},\"readBack\":{\"depthMm\":32.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch30\",\"throughAll\":false,\"upToFace\":null},\"step\":13},{\"op\":\"sketch\",\"result\":{\"createdPlane\":null,\"entities\":[{\"line\":{\"fromMm\":[60.69803754833394,-10.709617841849566],\"toMm\":[71.0,1.3685450325175337]}},{\"line\":{\"fromMm\":[71.0,1.3685450325175337],\"toMm\":[71.0,19.585786437626908]}},{\"line\":{\"fromMm\":[71.0,19.585786437626908],\"toMm\":[66.58578643762691,24.0]}},{\"line\":{\"fromMm\":[66.58578643762691,24.0],\"toMm\":[43.63608468546215,24.0]}},{\"arc\":{\"ccw\":false,\"centerMm\":[25.660696211448517,32.7684325399873],\"endMm\":[33.57496135565881,14.400950207692958],\"radiusMm\":20.000000000000256,\"startMm\":[43.63608468546215,24.0]}},{\"arc\":{\"ccw\":true,\"centerMm\":[72.0,28.70187343596347],\"endMm\":[60.69803754833394,-10.709617841849566],\"radiusMm\":41.000000000000014,\"startMm\":[33.57496135565881,14.400950207692958]}}],\"mapped\":true,\"plane\":{\"face\":{\"atPointMm\":[70.0,10.0,44.0]}},\"planeFrames\":\"plane transforms (they match the measured Front/Top axes)\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"sketch.face.front.positive\",\"sketch.multiProfile\",\"sketch.line\",\"sketch.arc\",\"select.multiSelectTyped\"]},\"resolvedPlane\":{\"faceNormal\":[0.0,0.0,1.0],\"offsetFrom\":\"Front Plane\",\"offsetMm\":44.0,\"pickedBy\":\"geometry\",\"selectedVia\":\"MultiSelect2(typed array)\",\"viewDependent\":false},\"sketch\":\"Sketch31\",\"sketchNormal\":[0.0,0.0,1.0],\"sketchedOn\":\"the picked face\",\"transformInverted\":false},\"step\":14},{\"op\":\"cut\",\"result\":{\"depth2Mm\":null,\"depthMm\":7.0,\"dir\":{\"flippedToFollowTheReference\":false,\"reference\":[0.0,0.0,1.0],\"sketchNormal\":[0.0,0.0,1.0],\"value\":false},\"direction\":\"one\",\"draftDeg\":null,\"draftInward\":null,\"endCondition\":0,\"feature\":\"Cut-Extrude19\",\"proven\":{\"live\":true,\"measuredOn\":[{\"bridge\":\"0.10.3\",\"by\":\"adom\",\"date\":\"2026-10-14\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026},{\"bridge\":\"0.10.9\",\"by\":\"community\",\"date\":\"2026-10-15\",\"edition\":\"desktop\",\"major\":29,\"solidworks\":2021},{\"bridge\":\"0.11.2\",\"by\":\"adom\",\"date\":\"2026-10-15\",\"edition\":\"connected\",\"major\":34,\"solidworks\":2026}],\"variants\":[\"cut.one\"]},\"readBack\":{\"depthMm\":7.0,\"draftAngleDeg\":0.0,\"draftOutward\":false,\"endCondition\":0},\"regions\":null,\"reverse\":false,\"sketch\":\"Sketch31\",\"throughAll\":false,\"upToFace\":null},\"step\":15}],\"success\":true,\"targetDocument\":\"Part1-1792502024000.SLDPRT\",\"timeoutSeconds\":420}",+    "progress": {+     "confidence": "estimate",+     "elapsedSec": 34.9,+     "estimatedSec": 30,+     "etaSec": 0,+     "percent": 100,+     "phase": "run_script",+     "startKind": "warm",+     "stepLabel": "Running 15 modeling step(s)"+    },+    "readiness": {+     "basedOn": [+      "alreadyReadyThisSession"+     ],+     "evaluatedAt": "gate",+     "readsAllowed": true,+     "ready": true,+     "running": true,+     "state": "ready",+     "why": "a <3DXLOAD_TIME> marker, then LOAD_ADDIN line(s) not naming the platform add-in (swk3dcompassaddin.dll), then no startup activity for 208s (>= 60s): an add-in loaded on demand after the start completed \u2014 ready only if COM also says the start completed"+    },+    "schemaVersion": 1,+    "solidworksRevision": "34.3.0",+    "status": "ok",+    "statusVerb": "swx_status",+    "stepCount": 15,+    "steps": [+     {+      "op": "clear_part",+      "result": {+       "bodiesLeft": 0,+       "cleared": "Part1-1792502024000.SLDPRT",+       "deleted": [+        "Sketch18",+        "Boss-Extrude11",+        "Plane6",+        "Sketch19",+        "Cut-Extrude8",+        "Sketch20",+        "Cut-Extrude9",+        "Sketch21",+        "Cut-Extrude10",+        "Plane7",+        "Sketch22",+        "Cut-Extrude11",+        "Sketch23",+        "Cut-Extrude12",+        "Sketch24",+        "Cut-Extrude13"+       ],+       "featuresDeleted": 16,+       "passes": 1,+       "proven": {+        "live": true,+        "measuredOn": [+         {+          "bridge": "0.10.6",+          "by": "adom",+          "date": "2026-10-14",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         },+         {+          "bridge": "0.10.9",+          "by": "community",+          "date": "2026-10-15",+          "edition": "desktop",+          "major": 29,+          "solidworks": 2021+         },+         {+          "bridge": "0.11.2",+          "by": "adom",+          "date": "2026-10-15",+          "edition": "connected",+          "major": 34,+          "solidworks": 2026+         }+        ],+        "variants": [+         "clear_part"+        ]+       },+       "route": "DeleteSelection2(swDelete_Children | swDelete_Absorbed), repeated until the tree is empty"+      },+      "step": 1+     },+     {+      "op": "sketch",+      "result": {+       "createdPlane": null,+       "entities": [+        {+         "line": {+          "fromMm": [+           0.0,+           18.0+          ],+          "toMm": [+           22.3613808357771,+           14.057085232755291+          ]+         }+        },+        {